PHP获取Bing每日壁纸与故事

发布于 / 教程 / 0 条评论

如你所见,本站首页已经使用了bing每日壁纸,另外博主还专门做了一个bing壁纸页面包含了bing每日图片故事,你可以点击右上角菜单访问查看效果或者点击直接访问

网上已经有许多关于引用bing每日壁纸的教程,多是用json获取然后封装成一个php文件丢到站点某个目录下,点击查看效果 这是在文件中直接输出获取的图片,在需调用的时候直接调用这个php文件路径。

[dangerbox title=”5月更新”]api处理更新,图片两种分辨率可选,在线直接调用,更加易于使用,引用示例:
[/dangerbox]

首先在需要的页面引入:$bingimg= bingImgFetch();
然后调用即可:
/* 输出1920*1080分辨率图片url */
<?php echo $bingimg['url']; ?>
/* 输出1366*768分辨率图片url */
<?php echo $bingimg['url2']; ?>
/* 输出每日故事标题 */
<?php echo $bingimg['title'];
/* 输出每日故事内容 */
<?php echo $bingimg['story']; ?>

以下代码加入到主题function.php中:

function bingImgFetch(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $re = curl_exec($ch);
    curl_close($ch);
    $re = json_decode($re,1);//电脑版返回内容
    $re2 = json_decode(file_get_contents('http://cn.bing.com/cnhp/coverstory/'),1);//移动版返回内容
    return array(
          /* 拼接1920*1080分辨率图片地址 */
        'url' =>'https://www.bing.com'.$re['images'][0]['url'],
          /* 裁剪分辨率为1366*768分辨率图片地址 */
        'url2' =>'https://www.bing.com'.str_replace('1920x1080','1366x768',$re['images'][0]['url']),
        /* 故事标题 */
        'title' => $re2['title'],
        /* 故事内容 */
        'story' => $re2['para1'],
        /* 结束日期 */
        'date' => date('j',strtotime($re['images'][0]['enddate'])),
    );
}

这种做法很直接,但是有点问题:每次访问这个图片页面就意味着一次向bing的请求,那如果你的网站访问量很大呢?是不是意味着你的ip在无限制地向bing发出请求。要是哪天bing不高兴了封了你的ip就…或许是想多了。即使没有这种问题,这种做法也不够友好,相当于每次访问这个页面都是一次图片的强制刷新。于是我想还是把图片保存下来访问静态的好吧。

有这样一个思路:在php文件里直接保存这张图片到网站某个目录下并且以’YMD’这种形式命名,毕竟每天一张名字不会重复。然后在需要引用图片的地方引用这个地址。但是问题又来了,怎么获取到当天的图片呢?
好吧,博主是这样解决的:
比如在根目录下创建了个ima的文件夹,然后把这个php文件放在里面。然后通过下面的函数可以获取到当天的图片路径,
$imgurl=str_replace('$url',end(scandir('ima/bing')),'ima/bing/$url');
scandir()得到一个按照升序列出文件名的数组,end()获取到这个数组最后一个,因为文件是按照年月日(比如:20170422 20170425)这样命名的,所以用end获取的就是最新的一张图片。str_replace()替换得到最新图片路径。这样不就可以调用到最新的一张静态图片且不用每次发一个请求了嘛。

这样做还有一个问题,图片怎么自动获取到这个目录呢?博主想到了用Linux的crontab命令设置一个定时任务,也不知道bing每天啥时候更新图片呀o(╯□╰)o,要么就每隔一段时间去执行…想来想去觉得这种方式也不靠谱,索性还是弄成个插件算了。
如果你不想这么去折腾,可以在附件中下载这个插件,需要就丢到你的插件目录去吧。

wordpress使用说明(可以无视上面内容):

  • 把附件Bing.php放到你的插件目录,后台启用插件
  • 在需要调用图片的页面引入变量:$imgurl=str_replace('$url',end(scandir('bingima')),'bingima/$url');
    图片的src="<?php echo $imgurl; ?>
  • 如果你还需要bing每日故事则:还需另外引入变量$bingimg= bingImgFetch();
    然后:
  • <?php echo $bingimg['title'];  #为图片标题
  • <?php echo $bingimg['story'];  #为图片故事

这样觉得比较好了。


定制开发

接受各种定制开发,微信咨询:

前往查看

赞助支持

转载原创文章请注明,转载自: LYLARES BLOG » PHP获取Bing每日壁纸与故事

Not Comment Found