背景

我的博客登陆背景图就是调用的bing接口来实现的,每天自动换背景,很是华丽,但是从网上找的几个调用接口总是出现调用失败的情况,很是尴尬,于是就自己撸代码实现吧,靠谱!

思路

  1. 分析bing每日壁纸接口
  2. 使用python调用bing每日接口并解析
  3. 使用flask 实现对外调用接口

bing每日壁纸接口说明

接口:https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

参数说明:

format:返回数据格式,format=js返回数据格式为json,默认不写返回的是xml格式

idx:不写或idx=0返回当天壁纸数据,-1为已经预备用于明天显示的信息,1则为昨天的图片,idx最多获取到之前16天的图片信息

n:返回壁纸数量,比如n=1,即为1条,以此类推,至多输出8条

在此我选择是json格式,如下:

{
    "images": [{
        "startdate": "20200325",
        "fullstartdate": "202003251600",
        "enddate": "20200326",
        "url": "/th?id=OHR.NoCaliCoast_ZH-CN2604627519_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
        "urlbase": "/th?id=OHR.NoCaliCoast_ZH-CN2604627519",
        "copyright": "鸟瞰蒙特雷附近的大苏尔海岸线,加利福尼亚州 (© Blue Planet Archive/Alamy)",
        "copyrightlink": "https://www.bing.com/search?q=%E5%A4%A7%E8%8B%8F%E5%B0%94%E6%B5%B7%E5%B2%B8%E7%BA%BF&form=hpcapt&mkt=zh-cn",
        "title": "",
        "quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20200325_NoCaliCoast%22&FORM=HPQUIZ",
        "wp": true,
        "hsh": "db3f08bec4f87e23f23f3aedf7698f29",
        "drk": 1,
        "top": 1,
        "bot": 1,
        "hs": []
    }],
    "tooltips": {
        "loading": "正在加载...",
        "previous": "上一个图像",
        "next": "下一个图像",
        "walle": "此图片不能下载用作壁纸。",
        "walls": "下载今日美图。仅限用作桌面壁纸。"
    }
}

返回参数中,url是我们要获取的壁纸地址,urlbase是基础地址,根据规则,可以提供不同分辨率的壁纸大小,比如:1920x1080

使用python实现bing每日壁纸接口

代码如下:

def get_bing_img_url(format='js',idx=0):
    '''
    获取bing每日壁纸地址
    '''
    url = 'https://cn.bing.com/HPImageArchive.aspx?format={}&idx={}&n=1'.format(format,idx)
    resp = requests.get(url,timeout=5).text
    data = json.loads(resp)
    return 'https://cn.bing.com{}'.format(data['images'][0]['url'])

if __name__ == "__main__":
    img = get_bing_img_url()
    print(img)

调用返回:

https://cn.bing.com/th?id=OHR.NoCaliCoast_ZH-CN2604627519_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp

flask实现对外调用接口

from flask import Flask, redirect

app = Flask(__name__)

def get_bing_img_url(format='js',idx=0):
    '''
    获取bing每日壁纸地址
    '''
    url = 'https://cn.bing.com/HPImageArchive.aspx?format={}&idx={}&n=1'.format(format,idx)
    resp = requests.get(url,timeout=5).text
    data = json.loads(resp)
    return 'https://cn.bing.com{}'.format(data['images'][0]['url'])


@app.router('/bing_bg')
def bing_bg():
    return redirect(get_bing_img_url())

本站提供的对外调用接口

https://www.h3blog.com/bing_bg

实现效果