网上获取Bing背景图的方法很多,但是好像很多都是获取的都是1366x768像素的,大屏幕下这个大小好像不够用,但是Bing网站的背景图是1920x1080的,官方用的是Josn方式获取的,于是:

//获取bing背景图
$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"};

<?php echo $imgurl;?>就可以输出图片地址了,在本地测试正常,但是我的实际应用却遇到了一些问题,上传到主机只能输出“/az/hprichbg/rb/图片名_1920x1080.jpg”不含主机头的地址,万分不解,于是我就稍微改造了下:

$imgurl = 'http://s.cn.bing.net'.$array->{"images"}[0]->{"urlbase"}.'_1920x1080.jpg';

这样就可以在一些比较特殊的主机上正常调用图片了,而且上面的方式还可以用一些CDN镜像这些图片来加速静态文件访问速度,比如我就是用的七牛云存储,简单粗暴的就应用上了。

解析:

$str = file_get_contents('http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');

idx=0” 的意思是当天的图片,“1”为昨天使用的图片,“-1”为明天要使用的图片,最小为-1,最大为15,也就是可以通过修改idx可以获取最近17的图片。 “n=1” 则是打印几个图片josn,默认1就可以打印一个图片信息,可以修改一下做其他用途。

标签: CDN, 七牛云存储, Bing

已有 37 条评论

  1. 哇!沙发,前天刚好看到好多人在说这个,你就弄出来玩了,速度真快,我也要弄一个。

    1. 你的新站地址是多少

      1. 垃圾站来的哦,你要看?

        1. 你竟然还搞垃圾站。。。

          1. 碎碎念小邪恶 碎碎念小邪恶

            没事玩点新程序撒,隔一段时间就换掉的

  2. 我的Firefox的新标签页背景就是从bing自动下载的!

  3. 背景图是每天获取Bing壁纸

  4. 自动背景切换,很爽啊,张张精选

  5. 这个方法看起来很不错的样子

  6. 感觉高大上多了~~

  7. 支持,非常不错!

  8. 然而并不行。。。

  9. 嗨~ 我在博客志推荐了天空团 天空团在博客志的永久专属网址是 http://www.daquan8.com/typecho/62.html 不给博客志加个友链么~

  10. 这方法能行。。。。

  11. 好评,留着

  12. bing 上面的背景好漂亮,现在百度图片搜索也搞的像bing~~

    1. 不敢用百度的,不知道什么时候就失效了

      1. 嗯,百度的图片有防盗链,很有可能突然之间变成了一个小孩(慈善广告)。。

        1. 嗯,百度还是不打算像Bing那样

  13. $imgurl 那里多了个双引号不会出错吗?

    1. 好像没多- -

      1. $imgurl = '"http://s.cn.bing.net'.$array->{"images"}[0]->{"urlbase"}.'_1920x1080.jpg';这里第一个…

        1. - -多了一个双引号

          1. 我之前也发现了,但是忘了告诉你。。

            1. 我每注意,手打的时候抽了一下

        2. 奇怪,难道没人遇到这个错误。。。为什么没人告诉我

  14. 嗯,轻轻松松copy过来了,哈哈

  15. 感觉七牛越来越不给力了,我最近想试试又拍云

    1. 还行啊,没什么变化。。。

      1. 难道是我的网络问题?感觉又拍云真的快很多。七牛有时候超时。
        另外,感觉文章中用file_get_contents的方式好像不够curl效率高,而且用file_get_contents服务器压力大些。

  16. 我研究了一番,发现获取到的图片地址不含主机头原因如下:
    1.要想获取到的图片地址带主机头,必须定义格式参数为js,为http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1。其中format参数是js,也就是json。直接打开这个网址,你会发现,url值是带主机头的。
    2.当不带格式参数时,默认获取到的就是xml格式,而不是json。如:http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1。直接打开这个网址,你会看到是xml格式的,而且url值是不带主机头的。

    1. 因此得出结论:获取到的地址是否带主机头与是否在本地测试或在线应用无关。

      1. 而且xml格式获取到的图片只有1366x768,想要直接获取到1080p的图,必须是json格式获取。

        1. 我本地和线上都是json方式

          1. 这就奇怪了,我在线和本地输出的结果都是一样的,是不是传递参数过程中出了问题?

            1. 这个就不知道了

          2. 我Ping过s.cn.bing.net,发现是国内的IP,而且Ping值非常低,感觉没必要用七牛来加速。。

添加新评论