因为选用的blog模版实际上是支持文章带封面图的,例如本篇博文这样。只需要提供图片地址即可,开始想着自己找些跟文章相关的图片上传到七牛云(本博客网站用的图床),然后在将链接加入blog中,但是感觉过于繁琐,且七牛云免费的空间容量有限。所以想到了直接用bing的图片,因为我本身就非常喜欢bing每天更新的图片。
设计思路
- 找到bing图片api地址
- 编写脚本请求api地址,解析出图片地址,保存到文本文件中
- crontab设置一个合适的时间点,定时请求脚本
- 下次编写blog时,直接
tail -1 文本文件
取最后一条图片地址作为博客封面图
实践
1.找api地址
直接google一搜,发现有人在stackoverflow上问过,https://stackoverflow.com/questions/10639914/is-there-a-way-to-get-bings-photo-of-the-day
因为json解析起来方便点,所以选用返回格式为json的api地址:https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US
2.编写python脚本get_bing_pic_url.py
没啥好多说的,按 请求,解析,保存三步走即可,用到了requests类库,没有的需要装下,安装方法见注释
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#############################################
######### sudo easy_install pip #########
######### sudo pip install requests #########
#############################################
import requests
import json
file = "/Users/jianlin/dev/coding/python/crawler/bingPics.txt"
url = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"
domain = "https://cn.bing.com"
def get_data():
r = requests.get(url, timeout=5)
return r.content
def parse_data(content):
json_data = json.loads(content)
return json_data['images'][0]['url']
def save_url(pic_url):
try:
f = open(file, "a")
f.writelines(pic_url)
f.write("\n")
finally:
if f:
f.close
if __name__ == '__main__':
d = get_data()
u = domain + parse_data(d)
print u
save_url(u)
运行后,url会追加到bingPics.txt文件中,之所以用追加,因为我想保存所有的图片,到时候写blog时封面图选择面广。注意file路径需要改成你自己的。
3.crontab配置,注意路径要写全
00 11 * * * python /Users/jianlin/dev/coding/python/crawler/get_bing_pic_url.py
最好将python脚本可执行权限加上
chmod +x /Users/jianlin/dev/coding/python/crawler/get_bing_pic_url.py
4.查看图片url, tail -1
➜ crawler tail -1 bingPics.txt
https://cn.bing.com/az/hprichbg/rb/HNPVisitors_ZH-CN13484945239_1920x1080.jpg
ok,放到blog中,大功告成~