最近临近查分日期,每天第一件做的事就是登录SPTA看成绩是否出了,简直要变强迫症,所以准备弄一个自动程序等可以查成绩了直接通过邮件通知我。
网页分析部分
网页分析以前一直用的PHP Simple HTML DOM Parser,这次准备尝试下新鲜事物,换成了blackfire/player。
用Ctrl+Shift+I研究了下SPTA的页面,发现SPTA的页面结构简直堪称完美,整个页面一个class都没有,全部是用表格定位的,随手copy了一个链接的XPath居然是这样的。
1 |
//*[@id="syno-nsc-ext-gen3"]/table/tbody/tr[6]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/a |
差点崩溃,还好老师教导过我们,没有精钢钻,就自己慢慢磨。打印所有a节点,然后用Ctrl+F找,发现第40个节点正好是第一条需要的内容。最后的分析代码如下,为方便起见,只检查前三条内容。
1 2 3 4 5 6 7 8 9 |
$scenario ->endpoint('http://www.spta.gov.cn') ->visit("url('/gradesearch_2015.html')") ->expect('status_code() == 200') ->extract('content_type', 'header("Content-Type")') ->extract('check_1st', 'css("td a").eq(40).text() matches "/一级建造师/"') ->extract('check_2st', 'css("td a").eq(41).text() matches "/一级建造师/"') ->extract('check_3st', 'css("td a").eq(42).text() matches "/一级建造师/"') ; |
有了网页分析代码之后,接下来的事情就简单了
定时监控部分
定时部分每小时运行一次网页分析代码,对结果进行判断,如果出现目标内容,则激活并发送邮件。
为了实现每小时监控,用 crontab -e 增加一条 0 * * * * 的每小时定时任务来访问定时监控程序
监控程序通过 file_get_contents() 获得分析程序的JSON格式数据,然后用 json_decode() 解码
如果发现分析程序有值,则通过邮件发送部分发送一封之前设定好内容的邮件到指定邮箱
1 2 3 4 5 6 |
$json = file_get_contents('http://dev.minirplus.com/get-html/check_spta.php'); $check_spta = json_decode($json); if($check_spta->check_no == 0) $emailBody = '一级建造师成绩还没出'; if($check_spta->check_no > 0) $emailBody = '一级建造师已经可以查成绩了'; |
邮件发送部分
邮件发送部分用的是PHPMailer / PHPMailer插件,这款插件功能强大,SMTP/XOAUTH2都不在话下,但是这里只用到了最简单的 send() 函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//Create a new PHPMailer instance $mail = new PHPMailer; //Chinese Support $mail->CharSet = 'utf-8'; $mail->Encoding = "base64"; //Set who the message is to be sent from $mail->setFrom('noreply@minirplus.com', 'My Mail System'); //Set an alternative reply-to address $mail->addReplyTo('noreply@minirplus.com', 'MINIRPLUS'); //Set who the message is to be sent to $mail->addAddress('mail@minirplus.com', 'MINIRPLUS'); //Set the subject line $mail->Subject = '一级建造师已经可以查成绩了'; //Set the body to HTML $mail->isHTML(true); $mail->Body = $emailBody; $mail->send() |
API
API请求地址
1 |
http://dev.minirplus.com/get-info/check_spta.php |
返回值
1 2 3 4 5 6 7 |
{ content_type: "text/html", check_1st: 0, check_2st: 0, check_3st: 0, check_no: 0 } |
说明
content_type 检查是否成功分析网页, check_1st 至 check_3st 是第一至第三条内容,值为0说明没有目标内容,值为1说明出现目标内容, check_no 是合并检查项,前三条内容中只要有一条符合目标内容时,该值就为1。
There are no comments yet