使用PHP获取必应Bing每日图片

微软的必应搜索的每日图片不得不说,都是经典,美得一塌糊涂。
看到很多把必应壁纸做电脑壁纸的软件,今天闲的蛋疼,就折腾了一下。

接口

我们用到的接口是https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1
这里的idx=0表示是显示当天的时间,如果要显示昨天的就将idx=0改为idx=1,以此类推。
注意:bing支持查看历史图片15天以内的,数字就有范围限制了(0-15)。

获取当日图片

我们有了接口就可以直接利用正则表达式去匹配相关字符串了。
下面给出一个获取并输出当日美图的php代码

<?php
    $str=file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1');
if (preg_match("/<url>(.+?)<\/url>/ies", $str, $matches)) {
    $imgurl='https://cn.bing.com'.$matches[1];
}
if ($imgurl) {
    header('Content-Type: image/JPEG');
    @ob_end_clean();
    @readfile($imgurl);
    @flush();
    @ob_flush();
    exit();
} else {
    exit('error');
}
?>

保存为bingpic.php,上传到服务器直接访问即可。

获取图片版权介绍

有了图片,没有文字怎么能满足饥渴的我,还是利用正则提取出图片版权信息

<?php
$url=file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1');
 
if (preg_match("/<copyright>(.+?)<\/copyright>/ies", $url, $matches)) {
    $imgcopyright=$matches[1];
}
if ($imgcopyright) {
    header("Content-type: text/html; charset=utf-8");
    echo $imgcopyright;
} else {
    exit('error');
}
?>

tip:修改相关参数即可实现对应的文字说明

自动保存bing图片

自动在php文件同级目录下创建一个当前年月的文件夹,保存每天的bing美图并输出

<?php
error_reporting(0);
$path=date('Ym');
if (!file_exists($path)) {
    mkdir($path, 0777);
}
$pathurl = $path.'/'.date('d').'.jpg';
if (!is_file($pathurl)) {
    $str=file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1');
    if (preg_match("/<urlBase>(.+?)<\/urlBase>/ies", $str, $matches)) {
        $imgurl='https://s.cn.bing.com'.$matches[1].'_1920x1080.jpg';
        copy($imgurl, $pathurl);
    }
}
 header('Content-Type: image/JPEG');
  @ob_end_clean();
  @readfile($pathurl);
  @flush();
@ob_flush();
exit();
?>

转载请注明出处 AE博客|墨渊 » 使用PHP获取必应Bing每日图片

发表评论

路人甲

网友评论(10)

自动保存bing图片,那个php没反应呀,是每天自动保存吗?还是说每天要访问一下这个php
获取当时图片那个php可以,
雨下得大 5年前 (2019-09-20) 回复
不懂PHP,百度了没明白
官仁博客 7年前 (2018-05-09) 回复
@官仁博客:那我明天回复你把。一句话的事
墨渊 7年前 (2018-05-09) 回复
@墨渊:好的,先谢过
官仁博客 7年前 (2018-05-09) 回复
这个代码获取到的必应图片分辨率是1366-768的,怎样才能获取到1920-1080的图片呢,还望博主答疑
官仁博客 7年前 (2018-05-09) 回复
@官仁博客:将1366*768 替换成1920*1080 就可以了,直接文本替换!
墨渊 7年前 (2018-05-09) 回复
@墨渊:因为我是想用BING每日图做网站背景,需要手动去改的话岂不是每天都要去改一遍,感觉挺麻烦了
官仁博客 7年前 (2018-05-09) 回复
@官仁博客:为啥要手动,php代码里面加个替换就好了。百度一下更精彩。
墨渊 7年前 (2018-05-09)
获取当日图片怎么显示1920X1080分辨率的?
Jason 7年前 (2017-09-07) 回复
加一个参数 format=js就可以直接返回json格式了
幻の象 8年前 (2017-05-19) 回复