智能守护,友链无忧 — 博客友情链接监控功能乞丐版
博客友情链接监控功能可确保链接有效性,提高博客知名度和流量。通过编写PHP文件检查链接状态,创建cron任务定时更新,前端读取数据展示,实现友链监控。
本文最后由 荒野孤灯 更新于 2024 年 9 月 4 日 13 时 20 分,已有 78 天未更新。今日被查阅 9 次,若内容或图片资源失效,请留言反馈,谢谢!
摘要由 AI 智能生成
博客如同一座座知识的灯塔,博友们通过友情链接相互照亮。然而,随着时间的流逝,有些博友可能会出现下链接、博客关停的现象,影响灯塔的光芒。因此,友情链接监控功能就显得有点重要。
友情链接是博客之间互惠互利的重要手段,它有助于提高博客的知名度、流量和搜索引擎排名。然而,要是被单方面下链接,效果就适得其反了,于是就想着弄个友情链接监控功能,也能省去逐一去检查友情链接的麻烦。
友链监控思路
效果如下:
功能实现方法
步骤一
编写 friend_links.php
功能文件代码,详细代码如下,开头网站信息及友链信息需根据自身情况修改:
<?php
// 设置本站链接
$this_site_url = 'https://www.80srz.com'; // 请替换为您的网站URL
// 定义友情链接数组
$friend_links = [
'风清' => 'https://wind.ink/email',
'钧言极客' => 'https://www.jinjun.top/link.html',
'DAIDAIFU BLOG - 代代付' => 'https://www.ddf.im/index.php/145.html',
'南川吟梦' => 'https://blog.southz.top/links.html',
'旺东自留地' => 'https://wang618.cn/you-qing-lian-jie.html',
// 根据自己友链情况修改,注意是有你链接的友情链接页面的网址!
];
// 缓存文件路径
// $cache_file_path = 'friend-links.json';
$uploads_dir = $_SERVER['DOCUMENT_ROOT'].'/';
$cache_file_path = $uploads_dir. 'friend-links.json';
// 检查链接状态
function check_link_status($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $http_code;
}
// 检查是否有反链
function check_backlink($url,$backlink) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$content = curl_exec($ch);
curl_close($ch);
return strpos($content,$backlink) !== false;
}
// 显示监控结果
function display_monitor_results($friend_links,$this_site_url, $cache_file_path) {
// 更新缓存数据
$updated_cache_data = [];
foreach ($friend_links as$name => $url) {
$http_code = check_link_status($url);
$backlink = check_backlink($url, $this_site_url);
$status_class = ($http_code == 200) ? 'status-ok' : 'status-error';
$backlink_class =$backlink ? 'backlink-ok' : 'backlink-error';
$updated_cache_data[$name] = [
'url' => $url,
'status' => $http_code == 200 ? '网站还活着' : '网站倒闭了',
'backlink' => $backlink ? '我们还是朋友' : '友谊小船已翻'
];
}
// 写入缓存数据
$cache_data = [
'timestamp' => time(), // 设置当前时间戳
'links' => $updated_cache_data
];
file_put_contents($cache_file_path, json_encode($cache_data));
return $updated_cache_data;
}
// 获取监控结果
$monitor_results = display_monitor_results($friend_links, $this_site_url,$cache_file_path);
// 输出JSON数据
echo '数据缓存成功';
代码说明: 1、设置博客及友链信息;2、生成json缓存文件保存友链状态信息,避免频繁监测增加服务器负载;3、缓存文件默认保存在网址根目录。
步骤二
创建 cron
定时任务,定期访问 friend_links.php
文件。你可以把它放到网站的任意文件夹中,但要记住路径。这个步骤不再赘述。
步骤三
有了友链监控数据 friend_links.json
,我们还需将其在前端显示,方便直观查看。可以在友链页面主题模板合适位置添加以下代码,样式需根据主题样式进行微调。
// 以下是本站用的一个简单样式,可实现根据友链状态显示不同颜色
<style>
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid #333; /* 灰色边框 */
padding: 10px;
text-align: left;
}
th {
background-color: #333;
color: #fff;
}
td.status-ok {
color: #0f0; /* 正常状态为绿色 */
}
td.status-error {
color: #f00; /* 错误状态为红色 */
}
td.backlink-ok {
color: #0f0; /* 有反链为绿色 */
}
td.backlink-error {
color: #f00; /* 无反链为红色 */
}
</style>
<?php
// 设置JSON文件路径
$jsonFilePath = 'friend-links.json';
// 检查JSON文件是否存在
if (file_exists($jsonFilePath)) {
// 读取JSON文件内容
$jsonContent = file_get_contents($jsonFilePath);
// 解析JSON内容
$data = json_decode($jsonContent, true);
// 检查解析是否成功
if (json_last_error() === JSON_ERROR_NONE) {
// 获取JSON文件中的时间戳
$timestamp =$data['timestamp'];
// 显示检查更新时间
echo '<h2>友情链接监控</h2>';
// 显示表格
echo '<table>';
echo '<caption style="text-align:right;font-size:12px;font-color:#999;">自动监控报告时间:' . date('Y - n - j : H:i:s', $timestamp) . '</caption>';
echo '<tr><th style="width:8%">序号</th><th style="width:36%;">网站名称</th><th style="width:28%;">网站状态</th><th style="width:28%;">友链状态</th></tr>';
$rank = 1 ;
// 遍历JSON文件中的链接
foreach ($data['links'] as$name => $link) {
// 获取链接状态
$status =$link['status'];
// 设置状态颜色
$statusClass =$status === '网站还活着' ? 'status-ok' : 'status-error';
// 获取反链状态
$backlink =$link['backlink'];
// 设置反链颜色
$backlinkClass =$backlink === '我们还是朋友' ? 'backlink-ok' : 'backlink-error';
// 显示链接信息
echo '<tr>';
echo '<td style="text-align: center;">'.$rank.'</td>';
echo '<td><a href="' . $link['url'] . '" rel="external nofollow noopener noreferrer" target="_blank">' . $name . '</a></td>'; // 显示网站名称
echo '<td class="' . $statusClass . '" style="text-align: center;">' .$status . '</td>';
echo '<td class="' . $backlinkClass . '" style="text-align: center;">' .$backlink . '</td>';
echo '</tr>';
$rank ++;
}
echo '</table>';
} else {
// 如果解析失败,显示错误信息
echo '<p>JSON解析错误: ' . json_last_error_msg() . '</p>';
}
} else {
// 如果JSON文件不存在,显示错误信息
echo '<p>JSON文件不存在或不可读。</p>';
}
?>
好了,友情链接监控功能到此就已经实现了,记得第一从要访问一次 friend_links.php
生成友链状态数据。想要折腾的博友可以动手去试试吧。具体样式效果可查看本站友情链接页面 :友情链接
第三方网站监控API推荐
网上有很多这样的服务,诸如:Uptimerobot
和 Uptimeflare
等,基础功能也都是免费的。但今天我要推荐的是 StatusLive
+ Uptimerobot
组合,因为它部署简单,很适合我这种小白。
StatusLive
项目地址:https://github.com/freejishu/StatusLive
Uptimerobot
官网地址:https://uptimerobot.com
它最经典的打开方式 ( dist + conf.json + core.php
) ,按照说明申请 API ,修改设置文件内容后,将文件夹上传至主机空间的任意文件夹下即可,不需要使用 docker
技术,适合我这种只有虚拟主机的玩家,哈哈,大佬勿喷!!!
效果演示:
分类标签:折腾,主题模板,工具代码,typecho优化,分享
文章链接:https://80srz.com/posts/1960.html
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
StatusLive + Uptimerobot 方案我好像打不开他的html页面,F12发现两个css和js文件返回404
这些文件不是应该在你本地吗?检查文件路径是否正确?
感谢老哥回复,找到原因了。因为StatusLive的config文件中的link默认是服务器根目录,我误认为那是相对路径,目前已经通过删除所有link的第一个/解决。
我感觉这个可以给作者提issue,因为我感觉按照相对路径寻址,体验感会好一些,但是好像作者并没有开放issue。
是的,老铁,放到子文件夹要相对路径。
不搞友链的我还仔细看了看了。厉害。
我之前用过第三方api,后来关了docker容器。
厉害了,我都是每隔几个月自己一个个点进去查看,然后清理
不是很准,只是个参考
主要是完整代码怎么写?⌇●﹏●⌇
那你文章的时间对吗?参考那个啊。也可以更改服务器时区
我是这个意思,自动监控报告时间是GMT+2,我想把时间戳转换为GMT+8
我的方案是直接改代码一中写入缓存数据部分:https://chatglm.cn/share/FNbvR
智谱牛逼
解决了,谢谢
问题解决了吗?
我刚才问智谱,它给的方案与你的一样。
你试试行不行?
友链监控我在我博客友链中,发现“自动监测时间”显示的是服务器所在的时间,因为我的服务器在国外,如何把它改为中国时间?
是第一种,我说的不是第三方。
咋不问 AI ?参考:https://chatglm.cn/share/FNmMU
date_default_timezone_set('Asia/Shanghai');
没用😂
我说的是StatusLive
数据中心是啥,为啥我部署不出来。
数据中心是 UptimeRobot 里面的 Ping monitor。
好东西,没想到大佬还在折腾
瞎折腾,存在不准的情况ᥬ😂᭄
好东西,这下终于不用操心友链了。要是能自动化删除失效一周的友链就好了
这就复杂了,每个人的主题不一样,有的可能用了插件。
嗯,不同的主题设置不一样
好东西