用PHP抓取bing每日背景壁纸

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

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

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

经过

根据上面接口的参数,我大致得出了以下3个参数的解析:

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

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

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

结尾

有兴趣的同学可以去研究上面的接口吧,接下来我来贴代码了,我是调用的第二个接口(返回格式是 XML):

<?php
ini_set('date.timezone','Asia/Shanghai');//设置时区,亚洲、上海;老外好像更喜欢上海,所以不能改成 Asia/Beijing
/**
*我对此做了缓存,减轻服务器负载,如果不需要,你可以自己改一下
*/
$tomorrow=strtotime(date('Y-m-d 00:00:00',strtotime('+1 day')));//明天的时间戳
$cache_time=$tomorrow-time();//明天的时间戳-现在的时间戳=缓存的时间,因为必应每日一图,一天换一次...
$modified_time=@$_SERVER['HTTP_IF_MODIFIED_SINCE'];
if(strtotime($modified_time)+$cache_time>time()){//如果缓存的时间戳大于现在的时间戳
    header("HTTP/1.1 304");//发送HTTP状态码304,使浏览器返回缓存的结果
}else{//否则抓取重新抓取图片,返回给用户
    $str=curl_get('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');
        header ("Last-Modified: ".gmdate("D, d M Y H:i:s", time() )." GMT");//发送Last-Modified头标,设置文档的最后的更新日期。
        header ("Expires: ".gmdate("D, d M Y H:i:s", time()+$cache_time )." GMT");//发送Expires头标,设置当前缓存的文档过期时间,GMT格式。
        header ("Cache-Control: max-age=$cache_time");//发送Cache_Control头标,设置xx秒以后文档过时,可以代替Expires,如果同时出现,max-age优先。
        @ob_end_clean();
        @readfile($imgurl);
        @flush();
        @ob_flush();
        die;
    }else{
        die('error, please try again !');//获取失败,提醒用户刷新页面重试
    }
}
function curl_get($url,$time_out=10){
    $ch=curl_init($url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; U; Android 4.4.1; zh-cn; R815T Build/JOP40D) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 Chrome/4.5 Mobile Safari/533.1');
    curl_setopt($ch,CURLOPT_TIMEOUT, $time_out);
    $content=curl_exec($ch);
    curl_close($ch);
    return($content);
}
?>
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《用PHP抓取bing每日背景壁纸》
文章链接:https://qqooo.cn/html/1445.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
本站资源均来源于网络,若侵犯您的权益,请来信 Feelym@88.com 删除!