使用Python做定时任务及时了解互联网动态


Posted in Python onMay 15, 2019

前言

本人因为比较喜欢看漫画和动漫, 所以总会遇到一些问题, 因为订阅的漫画或者动漫太多, 总会忘记自己看到那一章节或者不知道什么时候更新. 故会有这么一个需求, 想记录自己想看的漫画或动画并在其更新的时候第一时间知道,

当然, 你可以拓展到任何你想关注的, 都可以通过邮件及时推送.

思路

使用Python做定时任务及时了解互联网动态

使用Python做定时任务及时了解互联网动态

目录

使用Python做定时任务及时了解互联网动态

运行环境

  • Python3.6
  • 第三方库
fake-useragent==0.1.11
pyquery==1.4.0
requests==2.21.0
pip3 install -r requirements.txt -i http://pypi.douban.com/simple

实现

获取全部代码, 请移步:Github

git clone https://github.com/Amd794/Checkupdate.git

邮件发送

需要用到smtplib发送邮件和email构造邮件.

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

下面来构造一封完整的邮件, 首先导入需要用到的方法或类:

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib

然后, 我们先构造好头部,  工欲善其事,必先利其器

# 发送人
from_name = 'Amd794'
# 发送人邮箱
from_addr = '2952277346@qq.com'
# 发送人密码
password = '你的密码'
# 收件人
to_name = 'Your'
# 收件人邮箱
to_addr = '2952277346@qq.com'
# 邮箱服务
smtp_server = 'smtp.qq.com'

这里用到QQ的SMTP服务, 你也可以换成你喜欢的, 比如163, Google 等, 自选

但是你必须开启邮箱的SMTP服务, 下面来介绍下QQ邮箱打开服务的方法

你需要登录你的qq邮箱账号,  https://mail.qq.com/

使用Python做定时任务及时了解互联网动态

登录后, 点击设置

使用Python做定时任务及时了解互联网动态 

然后点击账户

使用Python做定时任务及时了解互联网动态 

滑动滚轮, 找到如下所示, 我是已经开了, 你只需要点击开启, 然后按说明一步一步就行

使用Python做定时任务及时了解互联网动态 

然后再点击生成授权码, 将得到的密码, 填到上面的password 字段

使用Python做定时任务及时了解互联网动态 使用Python做定时任务及时了解互联网动态

这样, 头部就构造好了

然后, 构造发送体

def _contact(self, msg, from_addr, to_addr, title):
  msg['From'] = self._format_addr('%s <%s>' % (from_name, from_addr))
  msg['To'] = self._format_addr('%s <%s>' % (to_name, to_addr))
  msg['Subject'] = Header(title, 'utf-8').encode()
msg = MIMEText(content, 'plain', 'utf-8')
_contact(msg, from_addr, to_addr, title)

发送邮件

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

发送成功

使用Python做定时任务及时了解互联网动态

更新检测

思路是通过, 获取云端数据 然后 通过与本地缓存 对比, 得到更新情况

构造本地数据, 自定义自己想要订阅的漫画, 格式 平台-名称-链接

# 支持平台 漫画台, 土豪漫画, 腾讯漫画,腾讯视频 对应 Manhuatai Tohomh123 TencentComic TencentVedio
ComecDict = {
  'Manhuatai-武动乾坤': 'https://www.manhuatai.com/wudongqiankun',
  'Manhuatai-斗破苍穹': 'https://www.manhuatai.com/doupocangqiong',
  'Tohomh123-妖神记': 'https://www.tohomh123.com/yaoshenji/',
  'Manhuatai-大主宰': 'https://www.manhuatai.com/dazhuzai',
  'TencentComic-海贼王': 'https://ac.qq.com/Comic/comicInfo/id/505430',
  'Tohomh123-全职法师': 'https://www.tohomh123.com/quanzhifashi/',
  'Tohomh123-永恒至尊': 'https://www.tohomh123.com/yonghengzhizun/',
  'TencentVedio-万界神主': 'https://v.qq.com/x/cover/y0jueuihog64xhb/j0030ajsgq9.html',
  'TencentVedio-斗罗大陆': 'https://v.qq.com/x/cover/m441e3rjq9kwpsc/r0030jqn37g.html',
  'TencentVedio-狐妖小红娘': 'https://v.qq.com/x/cover/0sdnyl7h86atoyt.html',
  'TencentVedio-万界仙踪 第2季' : 'https://v.qq.com/x/cover/7s65u4bg66so7e6/y0030u40wuu.html',
  'TencentVedio-天行九歌' : 'https://v.qq.com/x/cover/rm3tmmat4li8uul/w0030phkr6h.html',
}

最后检测实现, 部分代码:

def main():
  # 支持的平台
  paltfromList = {
    'Manhuatai': Manhuatai, # 漫画台
    'TencentComic': TencentComic, # 腾讯动漫平台
    'Tohomh123': Tohomh123, # 土豪漫画平台
    'TencentVedio': TencentVedio, # 腾讯视频
  }
  with open('datas.json', encoding='utf-8') as fr: # 读取本地漫画状态
    datas = json.load(fr)
  for key, value in ComecDict.items():
    try:
      paltfrom, key = key.split('-')
      obj = paltfromList.get(paltfrom)().run(value) # 获取漫画最新更新状态
      if obj:
        content, url = obj
        new_data = content # 最新章节数据
        old_data = datas.get(key, None) # 本地章节数据
        if old_data != new_data: # 判断是否有更新
          datas[key] = content # 更新本地章节
          with open('template.html', encoding='utf-8') as f:
            tx = f.read().format(url=url, new_data=new_data, old_data=old_data) # 构造邮件内容
          SendEmail(content=tx, title='{key} 更新通知'.format(key=key),
               emtype='htmlcontent').sendEmail() # 发送邮件, 推送更新
          with open('datas.json', 'w', encoding='utf-8') as fw: # 存储更新后的状态
            json.dump(datas, fw, ensure_ascii=False, indent=4, separators=(', ', ': '))
        else:
          print('\033[22;35;m {} \033[m 暂无更新, 当前章节: \033[22;35;m {} \033[m'.format(key, old_data))
    except TypeError:
      print('检测{key}失败, 该平台没有{key}, 或者平台配置有误'.format(key=key))
    except Exception:
      SendEmail(content=traceback.format_exc(),
           title='获取 {key} 时脚本异常通知'.format(key=key)).sendEmail() # 发送邮件, 脚本异常

最终效果

使用Python做定时任务及时了解互联网动态

使用Python做定时任务及时了解互联网动态

总结

以上所述是小编给大家介绍的使用Python做定时任务及时了解互联网动态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python概率计算器实例分析
Mar 25 Python
在Python中操作时间之strptime()方法的使用
Dec 30 Python
Python3中的2to3转换工具使用示例
Jun 12 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
python logging模块的使用总结
Jul 09 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 Python
python和opencv构建运动检测器的实现
Mar 03 Python
Python使用统计函数绘制简单图形实例代码
May 15 #Python
详解Python3 对象组合zip()和回退方式*zip
May 15 #Python
python语言元素知识点详解
May 15 #Python
django admin后台添加导出excel功能示例代码
May 15 #Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 #Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 #Python
Python发展简史 Python来历
May 14 #Python
You might like
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP钩子实现方法解析
2019/05/21 PHP
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
解读Python编程中的命名空间与作用域
2015/10/16 Python
python内打印变量之%和f的实例
2020/02/19 Python
PageFactory设计模式基于python实现
2020/04/14 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
网络安全方面的面试题
2015/11/04 面试题
服务整改报告
2014/11/06 职场文书
团拜会主持词
2015/07/04 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis
MySQL 数据表操作
2022/05/04 MySQL