PHP获取Bing每日壁纸,可设置成API作为网站背景
时间:2020-2-25 2:23 热度:4649° 评论:0 条
必应的每日壁纸不得不说,都很经典,通过API每天还可以自动更新,作为网站背景非常不错
本站提供该API直接使用,地址为:http://57scs.com/api/bingapi.php (支持SSL)
接口
我们用到的接口是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'); } ?>
保存为bingAPI.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(); ?>
Curl版本获取bing图片
使用Curl版本获取,速度更快,更稳定
<?php $url = 'https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($curl); curl_close($curl); $array = json_decode($data); $imgurl = $array->{"images"}[0]->{"url"};//图片 URL $img = 'https://cn.bing.com'.$imgurl; $copyright = $array->{"images"}[0]->{"copyright"};//图片描述版权 if($img){ header('Location: '.$img); exit(); } else { exit('error'); } ?>
Curl版本获取bing图片并保存
使用Curl版本获取,速度更快,更稳定
<?php //ini_set("display_errors", "On");//打开错误提示 //ini_set("error_reporting",E_ALL);//显示所有错误 $path = date("Ym"); //设置图片缓存文件夹 $filename = date("d") . '.jpg'; //用年月日来命名新的文件名 if (!file_exists($path.'/'. $filename)) //如果文件不存在,则说明今天还没有进行缓存 { if(!file_exists($path)) //如果目录不存在 { mkdir($path, 0777); //创建缓存目录 } //获取图片地址 $url = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($curl); curl_close($curl); $str = json_decode($data,true); $copyright = $str->{"images"}[0]->{"copyright"};//图片描述版权 $imgurl = 'http://www.bing.com'.$str['images'][0]['url']; //获取图片url //抓取图片并写入 $fdl = curl_init(); //设置抓取的url curl_setopt($fdl, CURLOPT_URL, $imgurl);//打开文件描述符 $fp = fopen ($path.'/'. $filename, 'w+'); curl_setopt($fdl, CURLOPT_FILE, $fp);//这个选项是意思是跳转,如果你访问的页面跳转到另一个页面,也会模拟访问。 curl_setopt($fdl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($fdl, CURLOPT_TIMEOUT,30); //执行命令 curl_exec($fdl);//关闭URL请求 curl_close($fdl);//关闭文件描述符 fclose($fd); exit ("今天的图片已获取"); } else { exit ("今天的图片已获取"); } ?>
本站API版本(官方JSON版本)
<?php $url = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $headers = array( "Accept: application/json", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); //for debug only! curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); curl_close($curl); //var_dump($resp); $array = json_decode($resp); $imgurl = 'https://www.bing.com'.$array->{"images"}[0]->{"urlbase"}.'_1920x1080.jpg'; if($imgurl){ header('Location: '.$imgurl); exit(); } else { exit('error'); } ?>
需要的可以先测试下,不懂的可以交流~
正文到此结束
捐赠支持:如果觉得这篇文章对您有帮助,请“扫一扫”鼓励作者!
既然没有吐槽,那就赶紧抢沙发吧!