Linux下 Crond定时执行PHP文件推送校园网通知

前言

前几天晚上洗澡的时候,洗头洗到一半,居然停水了!泡沫都没冲掉!
后来才知道原来校园网在停水前一天已经发布通知了,但是由于平时很少关注校园网通知,加上班长也没有转发通知,所以导致这个事情发生。
于是就想写一个定时任务,推送一下新通知~

执行流程

  1. 利用sunra/php-simple-html-dom-parser拓展,分析校园网通知页面源码,发现新通知时,通过公众号推送消息(也可以是邮箱等等)
  2. 利用cron作定时任务

详细步骤

  1. 首先利用composer安装 sunra/php-simple-html-dom-parser
  2. 然后可以在vender目录看到 sunra ,在使用文件中直接 use 使用
use Sunra\PhpSimple\HtmlDomParser;
  1. 接下来对拓展的操作可以在官方文档查找
    官方文档
  2. 在获取网站源码的时候,利用 file_get_html(‘http://xxxx’)时,报错了!

file_get_contents() stream does not support seeking

后来查找资料才知道,远程文件不支持寻求(偏移)。尝试寻找非本地文件可能会使用较小的偏移量,但这是不可预测的,因为它适用于缓冲流。

您可以执行的操作是substr在您检索页面内容后使用:

p a r t = s u b s t r ( part = substr( part=substr(name, 849, 32);

不过后来我是直接 curl 源码之后再利用 str_get_html($str);。。。。

  1. 一开始写的是第一次爬取通知列表时,爬取第一条通知,然后写入文件,并推送。 接下来每次爬取第一条之后都和写入文件的比较是否一致, 不一致就推送消息,然后更新文件。。
    后来发现有的通知会被置顶!而且置顶之后有可能又取消置顶,总之不能只判断第一条。
    根据观察之后,发现每天最多只会发两条通知,加上置顶位的话,循环爬去前四条通知应该是可以的了。
    然后将爬取和文件比对一下,是否已经存在,存在的话就跳过,未存在就追加写入文件,然后推送通知。
use APP\Untis\WeChatSDK;
use Sunra\PhpSimple\HtmlDomParser;
    /**
     * 分析源码
     * 
     * @return int|string
     */
     public function school() {
		$url = "http://xxxx";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //保存在变量中,而不是直接输出

        $html = curl_exec($ch);
        if(curl_errno($ch)) {
            return curl_errno($ch);
        }
        curl_close($ch);

        $dom = HtmlDomParser::str_get_html($html);
        $path = base_path().'/config/school.txt';
        $oldLinks = file_get_contents($path);

        for($i=0; $i<4; $i++) {
            $link = $dom->find('ul', 2)->find('li', $i)->find('a', 0)->href;
            $title = $dom->find('ul',2)->find('li', $i)->find('a', 0)->title;

            if(!strstr($oldLinks, $link)) {
                $oldLinks = $oldLinks.','.$link;
                file_put_contents($path, $oldLinks);
                $link = 'http://xxx/'.$link;
                $this->schoolPush($link, $title); 
            } 
        }
        $dom->clear();
    }
    
    /**
     * 推送新通知
     * 
     * @param $link
     * @param $title
     * @return mixed
     */
     private function schoolPush($link, $title)
    {
        $data = config('school_account'); //待推送人的openid
        foreach ($data as $datum) {
            if(!empty($datum)) {
                $sdk = new WeChatSDK(); //封装好的sdk,我这里直接调用了
                $openid = $datum;
                $tplMask = 'xxxx';
                $url = $link;
                $arr = [
                    'first' => array(
                        'value' => '校园网新通知来啦~',
                        'color' => '#FF0000'
                    ),
                    'keyword1'  => array(
                        'value' => $title,
                        'color' => '#3CB371'
                    ),
                    'keyword2'  => array(
                        'value' => $link,
                        'color' => '#FF0000'
                    ),
                    'keyword3'  => array(
                        'value' => '? ? ? ?',
                        'color' => '#FF0000'
                    ),
                    'remark'    => array(
                        'value' => '点击跳转到校园网该通知噢~',
                        'color' => '#FF0000'
                    )
                ];
                $result = $sdk->sendTplMessage($openid, $tplMask, $arr, $url);
            }
        }
        return $result;
    }
  1. 设置定时访问该任务
//进入cron编写状态
crontab -e 

//下面这里的五个星号分别代表了分、时、日、月、周,具体请百度相关的语法;后面的url链接更换为相应的链接即可。
//我这里设置了 每15 分钟执行一次
*/15 * * * * /usr/bin/curl http:// www.xxx.cn/school

在这里插入图片描述
保存即可,保存后需要service crond restart重启任务
crontab -l查看任务,crontab -r删除任务

7.推送结果
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值