首页 > 编程语言 > 详细

[Python] 利用Python做定时任务, 及时了解互联网动态

时间:2019-05-14 21:11:55      阅读:301      评论:0      收藏:0      [点我收藏+]

前言

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

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

思路

技术分享图片

技术分享图片

目录

技术分享图片

 

运行环境

  • 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邮箱打开服务的方法

  1. 你需要登录你的qq邮箱账号, https://mail.qq.com/
  2. 技术分享图片
  3. 登录后, 点击设置
  4. 技术分享图片
  5. 然后点击账户
  6. 技术分享图片
  7. 滑动滚轮, 找到如下所示, 我是已经开了, 你只需要点击开启, 然后按说明一步一步就行
  8. 技术分享图片
  9. 然后再点击生成授权码, 将得到的密码, 填到上面的password 字段
  10. 技术分享图片
  11. 技术分享图片

这样, 头部就构造好了

 

然后, 构造发送体

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()

发送成功

技术分享图片

 

更新检测

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

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

# 支持平台 漫画台, 土豪漫画, 腾讯漫画,腾讯视频 对应 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做定时任务, 及时了解互联网动态

原文:https://www.cnblogs.com/Mifen2952277346/p/10864517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!