使用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网络编程实例简析
Sep 26 Python
python中引用与复制用法实例分析
Jun 04 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
对python中的logger模块全面讲解
Apr 28 Python
python3之模块psutil系统性能信息使用
May 30 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
python实践项目之监控当前联网状态详情
May 23 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
python3爬虫中多线程的优势总结
Nov 24 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
全文搜索和替换
2006/10/09 PHP
用PHP实现图象锐化代码
2007/06/14 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
vue实现打地鼠小游戏
2020/08/21 Javascript
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
Java如何支持I18N?
2016/10/31 面试题
电台编导求职信
2014/05/06 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
设备收款委托书范本
2014/10/02 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js