Typecho 文档:在博客里显示彗星观测数据
适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/attachment/3799/
许可方式:CC BY-NC-SA
注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。
敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。
文档说明
作为曾经的天文爱好者,虽然日常里也会偶尔打开天文类网站了解可能出现的高亮彗星,但是大多数情况下还是会错过,比如近期的 C/2023 A3 (Tsuchinshan-ATLAS) 彗星,也是在彗星抵达近日点的几天前才知晓。
查看数据后,意外地发现,这颗彗星应该是继1997年的 C/1995 O1 (Hale-Bop) 世纪彗星后,最亮的一颗北半球可观测彗星了。
为了在之后能及时了解到彗星的信息,制作了这篇文档。
另有插件 Lopwon Comet
使用方法
A 涉及文件
usr/themes/***/functions.php
B 改造文件
作用:在博客里显示彗星观测数据。
1. 打开文件 usr/themes/***/functions.php 添加以下代码(留意注释,以及按需修改):
function getCometData() {
$api = 'https://cobs.si/api/comet_list.api?cur-mag=10'; // 获取彗星列表数据,其中 cur-mag 为获取亮度值内的彗星数据,如获取肉眼可视亮度的彗星则 cur-mag=6
$ch = curl_init($api); // 初始化 cURL 会话
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置返回内容为字符串而非直接输出
$response = curl_exec($ch); // 执行 cURL 请求
if ($response === FALSE) {
die('Error occurred: ' . curl_error($ch)); // 检查请求是否成功
}
curl_close($ch); // 关闭 cURL 会话
$data = json_decode($response, true); // 将 JSON 响应解码为 PHP 数组
if (isset($data['objects'])) { // 检查数据中是否包含彗星对象
usort($data['objects'], function($a, $b) { // 按当前亮度排序,值越小越靠前
return $a['current_mag'] <=> $b['current_mag'];
});
$item = ''; // 初始化存储彗星信息的字符串
foreach ($data['objects'] as $object) { // 遍历每个彗星对象并输出相关信息
$name = htmlspecialchars($object['name']); // 彗星简称
$fullname = htmlspecialchars($object['fullname']); // 彗星全称
$type = htmlspecialchars($object['type']); // 彗星类型
$currentMag = htmlspecialchars($object['current_mag']); // 当前亮度
$perihelionDate = htmlspecialchars($object['perihelion_date']); // 近日时间
$perihelionMag = htmlspecialchars($object['perihelion_mag']); // 近日亮度
$toCobs = 'https://cobs.si/obs_list?des=' . $name; // 观测数据链接
$toHeavensAbove = 'https://www.heavens-above.com/comet.aspx?cid=' . $name; // 位置数据链接
$item .= '
<div class="comet-item">
<span>彗星简称:' . $name . '</span>
<span>彗星全称:' . $fullname . '</span>
<span>彗星类型:' . $type . '</span>
<span>当前亮度:' . $currentMag . '</span>
<span>近日时间:' . $perihelionDate . '</span>
<span>近日亮度:' . $perihelionMag . '</span>
<span>观测数据:<a href="' . $toCobs . '" rel="noopener noreferrer" target="_blank">' . $toCobs . '</a></span>
<span>位置数据:<a href="' . $toHeavensAbove . '" rel="noopener noreferrer" target="_blank">' . $toHeavensAbove . '</a></span>
</div>
';
}
} else { // 如果没有找到彗星数据,输出提示信息
$item = '没有找到彗星数据。';
}
// 输出 HTML 和 CSS
echo '
<style>
.comet-list {
display: flex;
flex-direction: column;
gap: 2em;
margin: 0 auto;
padding: 1em;
width: calc(100% - 2em);
max-width: 768px;
}
.comet-item {
display: flex;
flex-direction: column;
gap: 0.25em;
}
.comet-list .comet-item:first-child {
margin-top: 2em;
}
.comet-list .comet-item:last-child {
margin-bottom: 2em;
}
.comet-powered {
display: flex;
gap: 2em;
margin: 0 auto;
padding: 1em;
width: calc(100% - 2em);
max-width: 768px;
}
</style>
<div class="comet-wrap">
<div class="comet-list">' . $item . '</div>
<div class="comet-powered">
<span>彗星数据由 <a href="https://cobs.si/" rel="noopener noreferrer" target="_blank">COBS</a> 提供</span>
<span>页面功能由 <a href="http://www.lopwon.com/" rel="noopener noreferrer" target="_blank">Lopwon</a> 制作</span>
</div>
</div>
';
}
至此,通过调用 getCometData(); 即可显示自定义亮度内的彗星数据。
或者可以简化为以下:即当出现了预期亮度的彗星时,则为 true 结果,可以输出自定义的信息,比如图标之类的,用以提示有彗星出现了。
function getCometData($mag) {
$api = 'https://cobs.si/api/comet_list.api?cur-mag=' . $mag; // 获取预期亮度的彗星列表数据
$ch = curl_init($api); // 初始化 cURL 会话
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置返回内容为字符串而非直接输出
$response = curl_exec($ch); // 执行 cURL 请求
if ($response === FALSE) {
die('Error occurred: ' . curl_error($ch)); // 检查请求是否成功
}
curl_close($ch); // 关闭 cURL 会话
$data = json_decode($response, true); // 将 JSON 响应解码为 PHP 数组
return !empty($data['objects']); // 如果有数据则返回 true,否则返回 false
}
调用 getCometData($mag); 如 getCometData(6); 则表示:如果有亮度亮于 6 等的彗星时,则输出 true 结果。