Bing的限定
不知道什么时候开始,单单依靠原来的修改 GET 请求的参数 cc 来获取Bing搜索每日在不同地区展示的背景图片行不通了。 可能是聪明的Bing识破了大家抓它壁纸的套路 于是我细细地研究了一下它的新套路。
在原来的 Header 中加入了这样一行 X-Forwarded-For:64.233.161.2 以混淆视听(不是) 之后,得到了这样一个返回结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| { "images": [ { "startdate": "20191215", "fullstartdate": "201912150800", "enddate": "20191216", "url": "/th?id=OHR.NutsWeekend_EN-US5701415684_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp", "urlbase": "/th?id=OHR.NutsWeekend_EN-US5701415684", "copyright": "Beech forest covered with frost and snow, Ardennes, Belgium (© Philippe Moes/Alamy)", "copyrightlink": "https://www.bing.com/search?q=battle+of+the+bulge&form=hpcapt&filters=HpDate%3a%2220191215_0800%22", "title": "The Battle of the Bulge 75 years later", "quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20191215_NutsWeekend%22&FORM=HPQUIZ", "wp": true, "hsh": "a17e8b7d1284b2d4edb74483be0d8f43", "drk": 1, "top": 1, "bot": 1, "hs": [ ] } ], ......
|
修正请求链接
注意到返回的 UrlBase 中有这样一个标记 EN-US ,于是我在原本的请求链接后带上了原来的 cc 参数
得到了这样的返回结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| { "images": [ { "startdate": "20191214", "fullstartdate": "201912141500", "enddate": "20191215", "url": "/th?id=OHR.TrilliumLake_JA-JP3615984347_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp", "urlbase": "/th?id=OHR.TrilliumLake_JA-JP3615984347", "copyright": "「トリリアム湖とフッド山」米国オレゴン州, マウントフッド国立森林 (© Frank Krahmer/Getty Images)", "copyrightlink": "https://www.bing.com/search?q=%E3%83%95%E3%83%83%E3%83%89%E5%B1%B1&form=hpcapt&filters=HpDate%3a%2220191214_1500%22", "title": "オレゴン州の静かな湖", "quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20191214_TrilliumLake%22&FORM=HPQUIZ", "wp": true, "hsh": "6d2a3791c51a549d64928ee8d2dc7346", "drk": 1, "top": 1, "bot": 1, "hs": [ ] } ], ......
|
至此,得到的结果达到了预期
Cookies的附加
其实一开始请求的时候是无法得到 title 的,后来看了看,是因为少了这样一行 Cookies: ENSEARCH=BENVER=1,把它加上之后就得到了带有 title 的结果。
接口实现
首先根据思路找出两种不一样的请求构造。
1 2
| curl_setopt($objCurl,CURLOPT_URL,"http://cn.bing.com/HPImageArchive.aspx?format=js&idx=".$idx."&n=1&ensearch=0"); curl_setopt($objCurl,CURLOPT_URL,"http://cn.bing.com/HPImageArchive.aspx?format=js&idx=".$idx."&n=1&cc=".$region);
|
然后构造Header,设定相应的 X-Forwarded-For
值,然后设定 Cookie 为 ENSEARCH=BENVER=1
。
同时,为了满足各种请求需要,我给出了四个请求参数。
1 2 3 4
| $idx = isset($_GET["idx"])?htmlspecialchars($_GET["idx"]):"0"; $region = isset($_GET["region"])?htmlspecialchars($_GET["region"]):"cn"; $resolution = isset($_GET["resolution"])?htmlspecialchars($_GET["resolution"]):"1920x1080"; $swiftSwap = isset($_GET["ss"])?htmlspecialchars($_GET["ss"]):"0";
|
参数名称 |
必填 |
类型 |
说明 |
默认值 |
idx |
否 |
int |
图片展示距今天数 |
0 |
region |
否 |
string |
获取图片所展示地区 |
cn |
resolution |
否 |
string |
获取图片的分辨率 |
1920x1080 |
ss |
否 |
int |
快速跳转 参照文章中的代码 |
0 |
其中的 ss
为 0 时,接口会返回详细信息;为 1 时,接口将只返回图片的链接;为 3 时,接口将直接跳转到相应图片的页面。
接下来要做的就是发起请求并整理返回值,并且加入一点点细节。
Download Source