又又又双叒叕改博客——必应“每日一图”API


先祭出对PHP基本一无所知的我用了不知道多久写出的api:

https://www.mapletown.xyz/bing.php/

过程

相信大多数独立博客的博主都有一样的习惯——不定期地折腾博客,今天换个主题,明天改改样式。这不,最近我又想改博客了,电脑访问我的博客,在首页有一个大图,之前用的是固定地图片,精心挑选一张图片换上,感觉效果还不错,但时间长了,就有点看腻了的感觉。必应搜索每天都会更换背景图,而且图片质量都挺不错,所以萌生了使用必应“每日一图”作为博客主页大图的想法,在网上找了一下,已经有很多现成的API可以使用,但我在寻找API的过程中,对API的实现方法产生了浓厚兴趣,于是便用工具对必应首页抓了一下包,经过一波操作,得到了如下接口:

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

用浏览器直接访问,得到了一串JSON,如下:

{"images":[{"startdate":"20191013","fullstartdate":"201910131600","enddate":"20191014","url":"/th?id=OHR.AlbertaThanksgiving_ZH-CN5899007960_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp","urlbase":"/th?id=OHR.AlbertaThanksgiving_ZH-CN5899007960","copyright":"阿尔伯塔的日出,加拿大 (© Ambre Haller/Moment/Getty Images)","copyrightlink":"https://www.bing.com/search?q=%E9%98%BF%E5%B0%94%E4%BC%AF%E5%A1%94%E7%9A%84%E6%97%A5%E5%87%BA&form=hpcapt&mkt=zh-cn","title":"","quiz":"/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20191013_AlbertaThanksgiving%22&FORM=HPQUIZ","wp":true,"hsh":"54ba1f944ffa5b13a8ce1916c597b336","drk":1,"top":1,"bot":1,"hs":[]}],"tooltips":{"loading":"正在加载...","previous":"上一个图像","next":"下一个图像","walle":"此图片不能下载用作壁纸。","walls":"下载今日美图。仅限用作桌面壁纸。"}}

艰难地阅读这段毫无缩进的JSON后,发现了一个url的字段,但一眼就能看出是地址的一部分,于是我在这段url前加上了https://cn.bing.com,即https://cn.bing.com/th?id=OHR.AlbertaThanksgiving_ZH-CN5899007960_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp,然后,我看到了今天必应的背景图,图片获取方式找到了,接下来就该实现一个接口,然后改一下博客主页大图的地址就可以了。

思路:
Get方法请求抓包的得到的地址(http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1),取得今天的图片的url,然后在url前加上https://cn.bing.com,就可以取得图片地址了。

使用Java很容易实现这个api,但Java又要在服务器上配置Tomcat才能运行,所以我决定使用PHP来实现,但我又不会PHP,于是,便开始了边看文档,边看示例代码,边搜素的痛苦过程。

修改PHP发送Get请求的示例代码,解析JSON,拼接地址,我很轻松地拿到了完整的图片地址,但还需要访问图片地址获取图片并将图片输出,只输出图片地址并没什么卵用,因为除了PHP的变量定义,数组,函数定义等和编程语言共用的知识点,我对PHP的算是一无所知,经过不知道多久的努力,最后我终于写出了接口,代码如下:

<?php
//请求必应的api
$url='http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1';
$result = file_get_contents($url);

//解析JSON,取得完整地址
$obj = json_decode($result);
$arr = json_decode($result, 1);
$image = "https://cn.bing.com".$arr[images][0][url];

//获取图片并输出
$imagedata=file_get_contents($image);
$data=getimagesizefromstring($imagedata);
header("content-type:".$data['mime']);
ob_clean();
echo $imagedata;
?>

本次对博客的改动

  1. 更换首页大图为必应“每日一图”。
  2. 增加“微语”页面。

声明:楓の街|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 又又又双叒叕改博客——必应“每日一图”API


Just For Fun...