必应壁纸API(每日一图API)源码

As we all know,必应(Bing)搜索的首页每天都会更换一张高清的图片作为背景。于是乎,我们想将它“据为已有”——放到自己网站上,网上也有很多免费的图片API供我们调用,但是并不稳定,如果该网站维护或关站,我们还得重新更换API,非常地麻烦。所以,我们最好自己搭建API服务来自动获取每天的必应壁纸美图,这样就更加地安全可靠了。

本站必应壁纸api服务

原理分析

经过对必应首页的抓包,我们可以获得首页图的获取API。它的格式是这样的:
https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

返回的数据是这样的:

{
  "images": [
        {
            "startdate": "20161222",
            "fullstartdate": "201612221600",
            "enddate": "20161223",
            "url": "/az/hprichbg/rb/TheDomeEdinburgh_ZH-CN11993142817_1920x1080.jpg",
            "urlbase": "/az/hprichbg/rb/TheDomeEdinburgh_ZH-CN11993142817",
            "copyright": "爱丁堡一家叫做The Dome的夜店,苏格兰 (© Marty McKillop/500px)",
            "copyrightlink": "http://www.bing.com/search?q=The+Dome,+Edinburgh&form=hpcapt&mkt=zh-cn",
            "quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20161222_TheDomeEdinburgh%22&FORM=HPQUIZ",
            "wp": false,
            "hsh": "376393c9b49c6d8d1a6e7c2d38343105",
            "drk": 1,
            "top": 1,
            "bot": 1,
            "hs": []
        }
    ],
    "tooltips": {
        "loading": "正在加载...",
        "previous": "上一个图像",
        "next": "下一个图像",
        "walle": "此图片不能下载用作壁纸。",
        "walls": "下载今日美图。仅限用作桌面壁纸。"
  }
}

其中的“images”节点下的“url”值便是我们要获取的图像地址。我们把它取出来,再加上Bing的网址前缀(http://cn.bing.com)即组合成了完整的图像地址。比如说上面返回数据的完整图像地址是这样的:

https://cn.bing.com/az/hprichbg/rb/TheDomeEdinburgh_ZH-CN11993142817_1920x1080.jpg

知道了背景图的获取方式,接下来就是用PHP去动态抓取了。

搭建api服务

你只需新建一个php文件,贴入如下代码:

<?php
$str = file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1');   // 从bing获取数据

if(preg_match('/<url>([^<]+)<\/url>/isU', $str, $matches)) { // 正则匹配抓取图片url
    $imgurl = 'https://cn.bing.com'.$matches[1];
} else {  // 如果由于某些原因,没抓取到图片地址
    $imgurl = 'https://www.ifree6.cn/wp-content/imgs/rabbit.jpg'; // 使用默认的图像(默认图像链接可修改为自己的)
}

header("Location: {$imgurl}");    // 跳转至目标图像

然后把这个php文件上传到你的网站目录,访问这个php应该就能看到被跳转到了Bing的图片。

使用方法

直接将那个php文件的绝对地址当做图片的链接放进网页中即可,默认获取当天最新的必应壁纸(中国区)。

温馨提示
我也是有底线的~
点赞1
评论 抢沙发

请登录后发表评论

    暂无评论内容