0

0

监控阮1峰老师的blog

php中文网

php中文网

发布时间:2016-06-13 12:29:03

|

1269人浏览过

|

来源于php中文网

原创

监控阮一峰老师的blog

引言

阮一峰大家基本都认识,很厉害的一个人,经济学博士,文章写得很棒,知识面很广泛,计算机、算法、英语、文采,这是能想到的他的一些标签,他的博客应该算是最受欢迎的博客之一了。
我经常回去看他的博客,但有时候时间长了,再次去看,发现他已经有好几篇新文章了,我就在想,能不能自己写个程序,监控的他博客,当他有新文章的时候,第一时间推送给我。

思路

他的博客中有一个feed,是一个返回xml格式文档的接口,这个接口是最新的文章列表,总共15篇,可以通过监控这个接口中前几篇文章列表的变化来间接的检测他的文章更新,如果有新的文章马上给我的邮箱发送邮件,这样我就可以尽可能早的get到阮老师的最新文章了。
这是设计思路图:
系统流程图

首先就是rss解析了,这个使用php的原生函数simplexml_load_string得到一个解析之后的SimpleXMLElement对象,通过该对象可以很轻松的获取到阮老师更新的前几篇文章。然后和redis中的已发送文章列表集合作对比,如果有新的更新,将更新的信息发送给UDPserver,让UDPserver去发送邮件给用户列表。检测程序循环执行,每10分钟跑一次。

开始编码

有了思路编码就很快了(这里其实优化了好几次,刚开始的时候思路也没有这么明了,边做边改,当然了,还是要慢慢锻炼,开始之前尽可能多的完善思路)。
使用PHP依赖管理利器——Composer,经常使用PHP的开发者对这个工具应该很熟悉,不熟悉的同学可以点击前面的链接进行脑补,文档是中文的,很好懂。这个小系统将会使用到三个类库:
phpmailerpredisworkerman。第一个是一个发送邮件的类库,可以点击这里查看他的相关信息,第二个类库是php对redis接口的封装,这里是他的源码地址,第三个是一个创建UDPserver的类库,这里是他的官方网站。

安装依赖的类库

首先新建一个项目目录,然后进入项目目录安装依赖

mkdir blog-observercd blog-observercomposer require phpmailer/phpmailercomposer require predis/prediscomposer require workerman/workerman

执行完上面的命令之后,会在项目目录blog-observer目录下面看到下面几个文件composer.jsoncomposer.lock和文件夹vender,composer.json中的内容如下,至此依赖的类库安装好了。

{    "require": {        "phpmailer/phpmailer": "^5.2",        "predis/predis": "^1.0",        "workerman/workerman": "^3.3"    }}
监控博客更新&推送更新消息给UDP

下面是主要代码,由于是服务端程序,所以这里设置为daemon进程,我这里UDPserver为udp://127.0.0.1:1234

怪兽AI数字人
怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

下载
daemonize();while(1){       //获取最新的几篇文章,看看是否需要推送    $c = file_get_contents(XML_URL);    $parse = @simplexml_load_string($c);    if($parse)    {           $count  = count($parse->entry);        $count  = $count > RECENT_NUM ? RECENT_NUM : $count;        $maynew = [];          for($i = 0; $i < $count; $i++)        {               $maynew[$parse->entry[$i]->link->attributes()->href->__toString()]   = $parse->entry[$i]->title->__toString();        }        $body   = "";        //是否推送        foreach($maynew as $url => $title)        {               if($client->sadd(SENDED_SET_KEY, $url))            {                   //send EMAIL                $body   .= "".$title."
"; } } if($body) { $msg = []; $msg['type'] = 1; $msg['mailbody'] = $body; $start = 0; while($mailaddrs = $client->lrange(EMAIL_LIST_KEY ,$start, ($start + EVERY_SEND_NUM -1 ))) { $msg['mailaddrs'] = $mailaddrs; $send_msg = json_encode($msg); socket_sendto($sock, $send_msg, strlen($send_msg), 0, '127.0.0.1', 1234); $start += EVERY_SEND_NUM; } } } sleep(GAP_SECONDS);}
UDPserver程序

有了workerman,可以很方便的实现UDPserver,比自己写来的快得多。

$udp_worker         = new Workerman\Worker("udp://0.0.0.0:".MAIL_UDP_PORT);$udp_worker->count  = 2;$udp_worker->onMessage = function($connection, $data) use ($mail){    $arr    = json_decode($data, true);    switch($arr['type'])    {        //发送邮件        case '1':        {            $mailaddrs  = $arr['mailaddrs'];            if(!empty($mailaddrs) && $arr['mailbody'])            {                foreach($mailaddrs as $to)                {                    $mail->clearAddresses();                    $mail->AddAddress($to);                    $mail->Body = $arr['mailbody'];                    if(!$mail->Send())                    {                        echo "发送邮件失败:\n"."address:".$to."\n";                    }                }            }            break;        }        default:            break;    }};Workerman\Worker::runAll();
启动监控程序

好了,至此所有的设计编码工作就完成了,现在启动程序,进程启动之后会议daemon的形式运行,不会随着终端的关闭而停止。

php xmldup.php startphp xmlmail.php

总结

这是一个小系统,当然了还有很多不规范的地方,比如daemon进程一般都会以字母d结尾,还有就是启动很不方便,要启动两次脚本,哈哈,当然了,这只是自己先来无事玩玩了,要真设计一个完成的系统估计会考虑很多很多的东西,加油吧,继续前进。

这里是github地址:blog-observer,自己试用的时候记得修改邮箱名称和密码。

如果谁也想第一时间获取到最新的阮老师的文章可以给我发邮件,我把你们的邮件地添加到邮件list中,但不保证会发送到,有时候关了电脑程序就停止了~
7楼飞凡123
时间间隔设定的是多少
Re: 奔跑的Man
@飞凡123,测试的时候是600s,这个时间不能太短,太短了没多大意义,还浪费阮老师的服务器资源
6楼Liez
马克
5楼白丸
真是好学生
4楼旭宝爱吃鱼
可以,赞
Re: 奔跑的Man
@旭宝爱吃鱼,THX
3楼wzx_xle
我用的foxmail的rss订阅功能
Re: 奔跑的Man
@wzx_xle,@星夜落尘,RSS订阅?行,你们可以啊,我又没说不可以,你要用RSS订阅我啥也不说了,我就喜欢DIV,得劲了吧~~
2楼永远的麦子
写得很好,也很喜欢阮老师的博客,上次了解到阮老师的博客是学习git的时候了解到阮老师的。
Re: 奔跑的Man
@永远的麦子,谢谢了。多像阮老师学习,哈哈,多涉猎技术之外的知识充实自己
1楼星夜落尘
不是有rss订阅吗。。。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

32

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

268

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

195

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

170

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

85

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 15万人学习

Pandas 教程
Pandas 教程

共15课时 | 1万人学习

C# 教程
C# 教程

共94课时 | 8.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号