Bing 每日图片获取
大家都知道微软的Bing搜索引擎首页每天都会提供了一些有趣的图片,而这些图片很多都是有故事含义的,很多网友每天去访问bing首页都是为了这些图片而去的。那么怎么下载下来呢,下面就介绍几种方法。
方法一
打开了 https://bing.com 抓到他的 API。
地址是:
http://www.bing.com/HpImageArchive.aspx?format=xml&idx=0&n=1&mkt=zh-CN
我们很容易的能得到,mkt 是 语言,idx 是 n天前, n 是图片的个数,format 是返回格式。 目前摸到 2 种格式 XML 和 JS (JSON) 。images 就是图片的集合了,在这里取出我们需要的就好, 会用到3个url, hs 的 desc 和 query。
代码
<?php
define('CACHEPATH', dirname(_file) . '/');
header('Access-Control-Allow-Origin: *');
function CacheTodayBing ()
{
$data = json_decode(requestdata('http://cn.bing.com/HpImageArchive.aspx?format=js&idx=0&n=1'), true);
$title = isset($data['images'][0]['hs'][3]['query']) ? htmlspecialchars($data['images'][0]['hs'][3]['query']) : '';
$desc = isset($data['images'][0]['hs'][3]['desc']) ? htmlspecialchars($data['images'][0]['hs'][3]['desc']) : '';
$url = isset($data['images'][0]['url']) ? htmlspecialchars($data['images'][0]['url']) : '';
$path = CACHE_PATH . 'cached/';
$date = date('Ymd');
$file = $path . $date . '.jpg';
if (!is_dir ($path)) {
mkdir($path, 0755, true);
}
if (!file_exists($path . $file))
requestdata ($url, $file);
$array = ['title' => $title, 'desc' => $desc, 'url' => 'http://0pa1.cn/bing/cached/' . $date . '.jpg'];
return $array;
}
exit (json_encode(CacheTodayBing()));
function requestdata ($url, $file = '') {
if ($file != '')
$fp = fopen($file, 'wb');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if ($fp) {
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
curl_close($ch);
return fclose ($fp);
} else {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36');
@$data = curl_exec($ch);
curl_close($ch);
}
return $data;
}
?>
调用
这个方面就没什么好说的了. 如果你想直接把这个当成 img 也行, 变成跳转或者 wget 都行,推荐跳转。 在第8行加入
header('Loaction: ' . $data['images'][0]['url']);
exit();
方法二
国际版
URL:
http://www.bing.com/HpImageArchive.aspx?format=xml&idx=0&n=1
继续用这个,但是如果你是国内的主机不加 Cookie 会直接跳转到中国版。 然后用其实加个 Cookie 就好。
Cookie:
SRCHD=AF=NOFORM; SRCHUSR=AUTOREDIR=0&GEOVAR=&DOB=20141214; _EDGE_S=F=1&SID=0812E6E6F0BE63402FF1E1F6F11F62BB; _EDGE_V=1; MUID=13771579CCDD6B7E08BC1269CD7C6A34; _HOP=; SRCHHPGUSR=CW=1292&CH=279; _FS=NU=1&mkt=en-us&ui=en-us; WLS=TS=63554116155; SRCHUID=V=2&GUID=DBAB6AFA773F41C496D947DA35AC0BFF; MUIDB=13771579CCDD6B7E08BC1269CD7C6A34; SCRHDN=ASD=0&DURL=#; FBS=WTS=1418519360908; _RwBf=s=70&o=16; _SS=SID=CD722604FB7F4C51929B569EA52E187D&bIm=457904&R=0
手机版
API
URL:
http://cn.bing.com/cnhp/coverstory/
imageUrl 图片地址(相对地址)primaryImageUrl 同上(完整地址)。
方法三
1366*768分辨率:
代码: 复制保存为.php文件
一:
<?php
$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('Content-Type: image/JPEG');
@ob_end_clean();
@readfile($imgurl);
@flush(); @ob_flush();
exit();
}else{
exit('error');
}
?>
二:
<?php
//header("Access-Control-Allow-Origin: *");
$url = file_get_contents("http://cn.bing.com/cnhp/coverstory");
$array = json_decode($url,true);
$echo = array('title'=>$array['attribute'],'desc'=>$array['para1'],'url'=>str_replace('http://scp-social.s-msn.com/s/images/binghp/zh-cn/', 'http://s.cn.bing.net/az/hprichbg/rb/', $array['primaryImageUrl']));
echo json_encode($echo);
福利放送!!!
放出 Min Mini Theme 背景API源码~ 此代码经过我综合了各种代码最后搞出来的,幸好能用。。。
1920*1080分辨率:
在functions.php添加如下代码:
function bingimage(){
$str = curl_init();
curl_setopt($str, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
curl_setopt($str, CURLOPT_RETURNTRANSFER, 1);
$re = curl_exec($str);
$re = json_decode($re,1);
return ''.$re['images'][0]['url'].'';
}
调用
<?php echo bingimage(); ?>
结束语
写这篇文章记录下来。文中代码出处:
Bing 每日图片获取(一、二)
放出Doby Kunr Theme背景API源码
网上摘抄
雁过留痕,评论一下吧~ 我会很开心的哦!
故事内容怎么抓取?
不错不错
嗯 还不错,bing的图片老好了
好东西耶!!
[哈哈]哇哦,收藏辣!
不错 我准备也用上
好东西 :)
老大,那个调用的放在哪里呢
右侧的动画怎么设置的?
十分感谢哈,我博客也用上了[嘻嘻]
[偷笑]
不错。