使用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中常用的各种数据库操作模块和连接实例
May 29 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
python实现Flappy Bird源码
Dec 24 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
详解Python打包分发工具setuptools
Aug 05 Python
python绘制规则网络图形实例
Dec 09 Python
基于h5py的使用及数据封装代码
Dec 26 Python
解决paramiko执行命令超时的问题
Apr 16 Python
python代码如何注释
Jun 01 Python
python办公自动化之excel的操作
May 23 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
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP答题类应用接口实例
2015/02/09 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
php5与php7的区别点总结
2019/10/11 PHP
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
感恩节红领巾广播稿
2014/02/11 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
培训班通知
2015/04/25 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
浅析python中特殊文件和特殊函数
2022/02/24 Python