抓取Momentum每日图片作为blog的背景

Posted by FridayLi on April 20, 2017

本文所提方法已失效

chrome 插件Momentum是个很棒的应用,每天都会提供非常漂亮的高清图片,我很多次都把图片下载下来作为桌面背景,今天突发奇想,诶,为啥不自动同步到我的博客上面呢?
###抓取Momentum图片 说干就干,思路很清晰,首先要解析Momentum每天更新图片的规则,用chrome抓了一会儿包,只发现了一个访问backgrouds.json一个也许有用的连接,仔细分析返回的字符串,发现并不是想要的结果。保密工作很到位哈。还好,我还有另一杀手锏,去GitHub上搜搜看,一搜果然有,看了下代码发现获取图片的网址是:

1
https://api.momentumdash.com/feed/bulk?syncTypes=backgrounds&localDate=

easy, 加上从chrome抓包上查到的headers信息,轻松拿到了想要的图片,代码 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#/usr/bin/python3

import time
import requests


client_id = '这里是你自己chrome 访问插件Momentum的ID, 打开个新窗口看下访问数据就知道了'

directory = '/root/blog_flask/my_spirit_home/static/assets/img'
filename = directory + '/bg.jpg'
bg_blur = directory + '/bg_blur.jpg'
today = time.strftime("%Y-%m-%d")

headers = {
    'Host': 'api.momentumdash.com',
    'Accept': '*/*',
    'X-Momentum-ClientId': client_id,
    'X-Momentum-Version': '0.92.2',
    'X-Momentum-ClientDate': today,
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
    'Content-Type': 'application/json',
    'Authorization':'在chrome中打开个新窗口,在访问backgrounds.json的连接的头文件中查找'
}

r = requests.get('https://api.momentumdash.com/feed/bulk?syncTypes=backgrounds&localDate=' + today, headers=headers)
print(r.json())
image_list = r.json()['backgrounds']
image_url = ''
for image in image_list:
    if image['forDate'] == today:
        image_url = image['filename']

从返回的结果r.json来看,里面有今明两天的图片,看来是有备无患,如果明天断网的话照样可以看见新鲜的图片。
获取到图片url后, 调用urlretrieve 下载:

1
2
3
from urllib.request import urlretrieve
if image_url:
    urlretrieve(image_url, filename)

这样下载好的图片就保存到指定的目录下了,我这里指定的目录文件正好是博客首页的背景图片名字,所以会替换掉原有的图片。
###处理图片 Momentum的图片实在太高清了,有1.5MB大小,对博客来说不太合适,调用PIL调整一下大小:

1
2
3
4
5
6
from PIL import Image
img = Image.open(filename)
new_img = img.resize((1536, 1023), Image.ANTIALIAS)
new_img.save(filename, quility=100)
new_img_blur = img.resize((153, 102), Image.ANTIALIAS)
new_img_blur.save(bg_blur, quility=100)

这里多了一个bg_blur, 是用来实现在首页下拉时的背景模糊效果的。

最后一步: 定时更新

Linux下可以使用crontab进行定时执行脚本
在命令端输入 crontab -e(如果第一次用,出现选项时选c), 在末尾添加一行定时命令:

1
1 0 * * * python3 /目录/sync_momentum.py

表示每天零点1分执行以下更新图片脚本,当然,是服务器所在地的零点。
Ta-Da, 大工告成。
源码在这里
参考代码:https://github.com/mattbryson/momentum-desktop-images