推送观影任务到奇妙清单

看了两个奥斯卡最佳真人短片感觉66的,想要每天都能记得看下短片。当然你可以说为什么不直接在奇妙清单里添加呢?因为我希望可以按照 豆瓣榜单 按顺序推送观影任务给我,不然每天还得去找看什么短片合适有点浪费时间了。

需要做的工作:

  1. 获取观影清单

  2. 推送到奇妙清单(邮件到 me@wunderlist.com 即可)

  3. 每天推送(windows 也可以设置计划任务)

import requests
import json

r = requests.get('https://movie.douban.com/j/chart/top_list?type=23&interval_id=100%3A90&action=0&start=0&limit=149')
film = {}
for i in r.json():
    film[str(i['rank'])+' '+i['title']] = i['url']
with open('film.txt','w',encoding = 'utf-8') as f:
    f.write(json.dumps(film, ensure_ascii = False))

还以为 python3 对编码没什么要求了,没想到 json.dumps 默认还是 ensure.ascii=True,这里需要注意下。

这样本地就有了榜单里的150个短片,接下来我们发邮件推送到奇妙清单,激活此功能

# -*- coding: utf-8 -*-
import json
from email.mime.text import MIMEText
from email.header import Header
import smtplib

with open(r'F:\pythonwork\spider\film.txt','r+',encoding = 'utf-8') as f:
    film = json.load(f)
    if not film:
        first = '看光了去重新获取列表吧'
        link = 'https://movie.douban.com/typerank?type_name=%E7%9F%AD%E7%89%87&type=23&interval_id=100:90&action='
    else:
        first = list(film.keys())[0]
        link = film[first]
    # 发送邮件
    from_addr = '发件邮箱'
    password = '密码'
    to_addr = 'me@wunderlist.com'
    smtp_server = 'smtp.126.com' #smtp服务器地址

    msg = MIMEText(link,'plain','utf-8')
    subject = first
    msg['From'] = Header('<{}>'.format(from_addr))
    msg['To'] = Header('<{}>'.format(to_addr))
    msg['Subject'] = Header('今天'+first, 'utf-8')

    server = smtplib.SMTP_SSL(smtp_server, 465)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
    del film[first]
    f.seek(0)
    f.write(json.dumps(film, ensure_ascii = False))
    f.truncate()

Python 发邮件真是累,可以考虑试一试 yagmail ,一直以为 ‘r+’就是读写模式,没想到还是追加的形式,如果不想 open 两次的话就得像结尾 3 行那么写了,有点难看呀。

接下来就是定时运行脚本了,linux 相信会很容易,windows略麻烦了,不过也能用,自己按照需求设置吧。我自定义的每天 12 点运行,过了时效也运行。

测试时用 gmail 我也是脑抽了,不挂代理连不上的。用 qq 邮箱结果任务名都是乱码我的天,还是扔了许久的网易比较靠谱。

有个小问题就是标题虽然给了“今天”可以把任务设到今天提醒,不过奇妙清单没有自动去掉,所以我就没加固定时间了,又去不掉,就算加了之后有提醒功能,前缀也太难看了些。反馈了下不知何时能解决。
反馈