/

获取bing每日图片

因为选用的blog模版实际上是支持文章带封面图的,例如本篇博文这样。只需要提供图片地址即可,开始想着自己找些跟文章相关的图片上传到七牛云(本博客网站用的图床),然后在将链接加入blog中,但是感觉过于繁琐,且七牛云免费的空间容量有限。所以想到了直接用bing的图片,因为我本身就非常喜欢bing每天更新的图片。

设计思路

  1. 找到bing图片api地址
  2. 编写脚本请求api地址,解析出图片地址,保存到文本文件中
  3. crontab设置一个合适的时间点,定时请求脚本
  4. 下次编写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中,大功告成~