闲的无事,不想学习,做了一个小的定时脚本
来检测韩剧网站的熟肉更新。因为虽然剧每周都是按日期播,但是字幕组们可能就没有那么准时了,与其自己手动刷新,不如懒(不是 叫服务器帮我完成,反正服务器除了架了个插件的后台没什么别的用。
获取更新
一般一个字幕组的剧集主页都是不变的,这样方便各个地方索引,但是资源的网站基本都是变的,因为可能的版权啊之类的,所以要一层一层一层的拨开我的心 找到最终的资源页,才能知道有木有更新。
1 2 3 root ├── ju.py └── data.json
剧数据
当然,一个小小的脚本是不需要数据库来杀鸡牛刀的,就直接写入文件读取文件吧(因为要记录之前多少集,才有更新一说)。
1 2 3 4 5 6 7 8 [ { "url" : "https://newzmz.com/details-xN3YGxeW.html" , "count" : 0 , "name" : "\u867d\u7136\u662f\u7cbe\u795e\u75c5\u4f46\u6ca1\u5173\u7cfb" , "element" : ["<a class=\"addgz\" href=\"([\\S]+)\"" , "<tr>" ] } ]
以上就是data.json
的内容,因为未来可能会有很多剧需要追更,所以最外层是个数组,然后才是每个剧的字典。
因为功能很简单,所以字段暂时先弄这么多,后面需要再加 。
url
: 就是前面说的字幕组的剧集主页,不会变的。
count
: 记录当前集数。
name
: 就是这部剧的名字,发邮件的时候要带上的,这里其实是《虽然是精神病但没关系》
的 unicode 字符。
element
: 这个就是比较重要的东西了,是一个正则表达式,前面的 n-1 个
是用来找到最终的资源页面的,最后一个
是用来数数的,就是有多少集。
主体代码
为了兼容,写的是python2
的版本。
1 2 3 4 5 6 7 8 9 10 11 import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrimport osimport jsonimport timeimport urllib2import re
发邮件直接 copy 幕课的,因为以前有个电费提醒的脚本,所以直接拿过来用了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 my_sender='i@onns.xyz' my_pass = '' my_user='onns@onns.xyz' def mail (to,content) : ret=True try : msg=MIMEText(content,'plain' ,'utf-8' ) msg['From' ]=formataddr(["Onns" ,my_sender]) msg['To' ]=formataddr(['to' ,to]) msg['Subject' ]="新剧提醒" server=smtplib.SMTP_SSL("smtp.exmail.qq.com" , 465 ) server.login(my_sender, my_pass) server.sendmail(my_sender,[to,],msg.as_string()) server.quit() except Exception, e: print e ret=False return ret
主体代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 f = open('/root/data.json' , 'r' ) data = json.loads(f.read()) f.close() new_data = [] for ju in data: html = '' url = ju['url' ] for ele in ju['element' ]: html = urllib2.urlopen(url).read().decode('utf-8' ) results = re.findall(ele, html) url = results[0 ] count = len(results) if count > ju['count' ]: ret=mail(my_user,u'《' +ju['name' ]+ u'》更新啦!' ) ju['count' ] = count new_data.append(ju) f = open('/root/data.json' , 'w' ) f.write(json.dumps(new_data)) f.close()
上服务器
把定时脚本加进去
1 */10 * * * 6,7,1 /usr/bin/python /root/ju.py /dev/null 1>/dev/null
因为不用很精细就 10 分钟执行一次,周末晚间更新所以 6、7、1
三天才需要跑的。
完。