智能守护,友链无忧 — 博客友情链接监控功能乞丐版



  博客如同一座座知识的灯塔,博友们通过友情链接相互照亮。然而,随着时间的流逝,有些博友可能会出现下链接、博客关停的现象,影响灯塔的光芒。因此,友情链接监控功能就显得有点重要。

  友情链接是博客之间互惠互利的重要手段,它有助于提高博客的知名度、流量和搜索引擎排名。然而,要是被单方面下链接,效果就适得其反了,于是就想着弄个友情链接监控功能,也能省去逐一去检查友情链接的麻烦。

友链监控思路

  1. 编写php文件,检查友链网站运行状态,及友情链接反链情况,生成json文件缓存数据;
  2. 创建 cron 定时任务,每日定时访问php文件,更新友链状态数据;
  3. 前端读取json文件数据,显示友链情况;

效果如下:

友情链接监控

图:友情链接监控

功能实现方法

步骤一

编写 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推荐

  网上有很多这样的服务,诸如:UptimerobotUptimeflare 等,基础功能也都是免费的。但今天我要推荐的是 StatusLive + Uptimerobot 组合,因为它部署简单,很适合我这种小白。

  StatusLive项目地址:https://github.com/freejishu/StatusLive

  Uptimerobot官网地址:https://uptimerobot.com

  它最经典的打开方式 ( dist + conf.json + core.php ) ,按照说明申请 API ,修改设置文件内容后,将文件夹上传至主机空间的任意文件夹下即可,不需要使用 docker 技术,适合我这种只有虚拟主机的玩家,哈哈,大佬勿喷!!!

效果演示:

运行状态监控

图:运行状态监控

  运行状态监控详情查看网址



 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
(*) 5 + 4 =
共 49 条评论, 9 次评论点赞。快来参与吧!
    11月4日 浙江省杭州市 发自Windows 10 回复 0

    StatusLive + Uptimerobot 方案我好像打不开他的html页面,F12发现两个css和js文件返回404

      11月4日 江西省 发自Windows 10 回复 0

      这些文件不是应该在你本地吗?检查文件路径是否正确?

        11月4日 浙江省杭州市 发自Windows 10 回复 0

        感谢老哥回复,找到原因了。因为StatusLive的config文件中的link默认是服务器根目录,我误认为那是相对路径,目前已经通过删除所有link的第一个/解决。
        我感觉这个可以给作者提issue,因为我感觉按照相对路径寻址,体验感会好一些,但是好像作者并没有开放issue。

          11月5日 江西省 发自Windows 10 回复 0

          是的,老铁,放到子文件夹要相对路径。

    11月4日 山东省青岛市 发自Windows 10 回复 0

    不搞友链的我还仔细看了看了。厉害。
    我之前用过第三方api,后来关了docker容器。

    10月10日 广东省佛山市 发自Windows 10 回复 0

    厉害了,我都是每隔几个月自己一个个点进去查看,然后清理

      10月10日 福建省漳州市 发自Android 回复 0

      不是很准,只是个参考

    10月6日 福建省厦门市 发自Android 回复 0

    主要是完整代码怎么写?⌇●﹏●⌇

      10月6日 福建省漳州市 发自Windows 10 回复 0

      那你文章的时间对吗?参考那个啊。也可以更改服务器时区

        10月6日 福建省厦门市 发自Windows 10 回复 0

        我是这个意思,自动监控报告时间是GMT+2,我想把时间戳转换为GMT+8

          10月6日 福建省漳州市 发自Windows 10 回复 0

          我的方案是直接改代码一中写入缓存数据部分:https://chatglm.cn/share/FNbvR

            10月6日 福建省厦门市 发自Windows 10 1

            智谱牛逼

            10月6日 福建省厦门市 发自Windows 10 0

            解决了,谢谢

            10月6日 福建省漳州市 发自Windows 10 0

            问题解决了吗?

            10月6日 福建省厦门市 发自Windows 10 0

            我刚才问智谱,它给的方案与你的一样。

            10月6日 福建省漳州市 发自Windows 10 0

            你试试行不行?

    10月6日 福建省厦门市 发自Android 回复 0

    友链监控我在我博客友链中,发现“自动监测时间”显示的是服务器所在的时间,因为我的服务器在国外,如何把它改为中国时间?

      10月6日 福建省厦门市 发自Android 回复 0

      是第一种,我说的不是第三方。

        10月6日 福建省漳州市 发自Windows 10 回复 0

        咋不问 AI ?参考:https://chatglm.cn/share/FNmMU

          10月6日 福建省厦门市 发自Windows 10 回复 0

          date_default_timezone_set('Asia/Shanghai');
          没用😂

    10月1日 福建省厦门市 发自Android 回复 0

    我说的是StatusLive

    10月1日 福建省厦门市 发自Android 回复 0

    数据中心是啥,为啥我部署不出来。

      10月1日 福建省厦门市 发自Windows 10 回复 0

      数据中心是 UptimeRobot 里面的 Ping monitor。

    9月16日 美国新泽西州纽瓦克市 发自Windows 10 回复 0

    好东西,没想到大佬还在折腾

      9月17日 福建省厦门市 发自Android 回复 0

      瞎折腾,存在不准的情况ᥬ😂᭄

    9月8日 福建省厦门市 发自Android 回复 0

    好东西,这下终于不用操心友链了。要是能自动化删除失效一周的友链就好了

      9月8日 福建省漳州市 发自Windows 10 回复 0

      这就复杂了,每个人的主题不一样,有的可能用了插件。

        9月8日 福建省厦门市 发自Android 回复 0

        嗯,不同的主题设置不一样

    9月8日 福建省厦门市 发自Android 回复 0

    好东西