banner

用JSON获取Bing每日背景图片

[较为靠谱的方法 - To:2017-07-19更新 - 忘了兼容https]

经过访问BING的网址最终发现,bing中文网一直在提供每日更新背景图片壁纸的json数据。

访问网址:http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

根据上面地址的结构,我暂时研究到就三项属性有效,他们分别是

1、format,非必要。我理解为输出格式,不存在或者不等于js,即为xml格式,等于js时,输出json格式;

2、idx,非必要。不存在或者等于0时,输出当天的图片,-1为已经预备用于明天显示的信息,1则为昨天的图片,idx最多获取到之前16天的图片信息;*

3、n,必要。这是输出信息的数量,比如n=1,即为1条,以此类推,至多输出8条;*

*号注释:此处我们要注意的时,是否正常的输出信息,与n和idx有关,通过idx的值,我们就可以获得之前bing所使用的背景图片的信息了。

提供一个我正在用json转php,调用图片地址的方法:

    $str = file_get_contents('http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
    $array = json_decode($str);
    $imgurl = $array->{"images"}[0]->{"url"};
    $imgurl = '//cn.bing.com'.$imgurl;

如果是JS的ajax抓取,请注意,需要浏览器跨域,或者在nodejs上玩;

当然,也可以在利用PHP这类的程序在后台抓,然后JS再从后台获取可以避开跨域问题。

【话题外】用NodeJS写的一个下载工具: Github


[效率较低的方法,但方法依然有效]

今天在弄我的小博客,突发异想,想要去把bing中文网每日更新的背景图片抓取过来。

之前一直以为通过在线抓取bing得网页以后,再做正则的匹配,不过,今天在网上才注意到,原来在CSDN论坛已有有人发了一个更为简便的方式。当然,还是通过php的方式获取,但是匹配的xml页面,相对更加快捷的获取背景图片。

php代码如下:【来源:CSDN论坛

    $str=file_get_contents('http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1');
    if(preg_match("/<url>(.+?)<\/url>/ies",$str,$matches)){
        $imgurl = 'http://cn.bing.com'.$matches[1];
    }

可以直接调用上面的变量$imgurl,也可以将这个封成函数,方便调用。

补充CSS部分,如何让背景图固定不随滚动条滚动。

background:fixed;

为你背景图所在的选择器内,添加上面这句声明即可。

很可惜,上面的方法,经过我的实验,还是存在一些遗憾。获取到的图片并不完美,可能永远只有1366x768大小的图片,对于现在很多分辨率在1600x900或者1980x1080的时候,上面获取到的大小,明显不合适了。


阅读: 13869
在同意共创许可协议(CC BY-NC-SA-4.0)的前提下,您可以转载本文。
橙色阳光
https://oss.so/article/55

相关阅读

留言评论

16条留言
姜辰
一年之后,这些依然有用,霸气哦~
龙笑天
写的非常棒,赞!
pxsky
站长,您好。试了一下JSON方法,但显示空白,还望指教,谢谢!
橙色阳光
用的什么方法?这个地址不提供jsonp,所以在浏览器上用js获取是无法跨域的;
如果是PHP的,你把$imgurl打印出来看看。
我之前做的测试今天刚好删掉了,之前试用一直是没有问题的;
pxsky
echo $imgurl;
这样运行输出空白,另外把echo换成print或者print_r,一样是空白,能否直接给下源代码呢。我是小白哈!
橙色阳光
检查是否file_get_contents正常,或者看邮件,加我
智享互联
jauner 这个网站的正常 但是使用你发的不正常 求解
橙色阳光
要用后面的JSON部分代码
智享互联
为什么我还是不能获取到高分辨的背景 每次都是 1366x768
Jacky
json 得到的是 1920×1080 的,而 xml 得到的是 1366×768 的。两个路径除了分辨率的数字是不一样的,其他全都一样,所以只要把地址中的数字换掉,就是高清的图片。
圆月博客
好强大,果断收藏了一下
阿里百秀
分享的内容很赞,收藏了,看来还是要多学习啊,常来常往,欢迎去我们的网站做客
涂涂研版
收藏,观察下json。学习下。
暴博客
我以前是用抓首页源码正则匹配的,没想到刚做完就发现了json==
天兴工作室
我擦咧,当我现在点开你的hizhou.com报错了,哇哈哈哈哈...
橙色阳光
说明我正好在改方法,那个时候是报错了一段时间