用PHP方式获取Bing每日背景图片

张子凡 设计开发 2015-09-28 22:23:28 阅读(...) 评论(4)

最近感觉一直在忙与做泪雪用户中心的开发,都没有怎么玩儿,就连中秋节都在忙碌,好不容易闲下来休息一下,又总是觉得很无聊的样子,这不有开始来折腾一下了。

其实很早之前就想来试试抓取 Bing 每天的背景图片,但是到最后还是就放弃了。首先还是在网上收罗了一番,发现用到的方法都大同小异,废话就不多说了,子凡直接上中心内容。

bing

Bing 的每日背景图片官方都有一个输出地址,一个是 json 方式,一个是 XML 的方式,所以就有了下面的这两个地址。

1
2
http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1

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

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

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

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

了解了这个两个地址后,相信只要懂程序的人都知道需要把我们需要的图片 URL 提炼出来。

下面就直接上子凡的代码吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$s = $_GET['s'];
if($s == 'big'){
///////////////////////////////////////////////////////////////////////////////
	$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"};//图片URL
	//$copyright = $array->{"images"}[0]->{"copyright"};//图片描述版权
	if($imgurl){
		header('Location: '.$imgurl);
		exit();
	}else{
		exit('error');
	}
///////////////////////////////////////////////////////////////////////////////
}else{
///////////////////////////////////////////////////////////////////////////////
	$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];
	}
	if($imgurl){
		header('Location: '.$imgurl);
		//直接输出
		//header('Content-Type: image/JPEG');
		//@ob_end_clean();
		//@readfile($imgurl);
		//@flush(); @ob_flush();
		exit();
	}else{
		exit('error');
	}
///////////////////////////////////////////////////////////////////////////////
}
 
//echo $imgurl.'<br>'.$copyright;
?>

简单的说一下上面代码的功能,其实以上有获取两种背景大小的功能,所以就用到了两个地址,因为官方提供的地址中 json 输出的图片是 1920 x 1080,而使用 XML 输出的图片地址是 1366 x 768,对于子凡这样追求极致的人来说,做成这样就情有可原咯!

1
2
3
//DEMO示例
https://zhangzifan.com/bing    //获取1366 x 768的小图
https://zhangzifan.com/bing?s=big    //获取1920 x 1080的大图

好吧!多余的就不说了,有兴趣的朋友们还可以继续深度研究。如果大家有什么好玩儿的功能也可以给子凡折腾折腾哈!

最后再给大家分享一个 Bing 搜索引擎的小功能:

www.bing.com/?rb=0 //这个可以关闭 Bing 搜索引擎的背景图片哦

www.bing.com/?rb=1 //这个可以开启 Bing 搜索引擎的背景图片哦

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/get-bing-bg.html

发表评论

  1. 阿龙啊
    1楼
    阿龙啊 1年前 (2017-11-05)

    求1920×1080的代码

    • 张子凡
      回复
      张子凡 1年前 (2017-11-06)
      回复 @阿龙啊 :示例代码中已经有了,请仔细参考
  2. 阿龙啊
    2楼
    阿龙啊 1年前 (2017-11-05)

    http://www.aisni.top/az/hprichbg/rb/GreenHeadedTanager_ROW12672846774_1920x1080.jpg
    这种情况怎么解决?

    • 张子凡
      回复
      张子凡 1年前 (2017-11-06)
      回复 @阿龙啊 :请参考已经给出的代码示例,不要改其中bing的官方地址