实现bing背景获取(php)
php获取bing背景图
测试链接: https://api.kquark.com/bing
https://api.kquark.com/bing/?idx=1&n=1&size=UHD
idx 取值0-8,代表前几天图片,n代表一次获取多少张图片url(暂无用),size代表图片质量部分可取参数如下 size参数:
resolutions: [
'UHD',
'1920x1200',
'1920x1080',
'1366x768',
'1280x768',
'1024x768',
'800x600',
'800x480',
'768x1280',
'720x1280',
'640x480',
'480x800',
'400x240',
'320x240',
'240x320'
]
设计原理依据bing api 获取
https://bing.com/HPImageArchive.aspx?idx=0&n=1
php代码:
<?php
$predate = $_GET['idx'];
$num = $_GET['n'];
$size = $_GET['size'];
if(strlen($predate)==0){
$predate=rand(0,8);
}
if(strlen($num)==0){
$num = 1;
}
if(strlen($size)==0){
$size = 'UHD';
}
echo 'predate:'.$predate.'<br>';
echo 'num:'.$num.'<br>';
echo 'size:'.$size.'<br>';
$bingurl='https://bing.com/HPImageArchive.aspx?idx='.$predate.'&n='.$num;
//'https://bing.com/HPImageArchive.aspx?idx=0&n=1'
echo $bingurl.'<br>';
$str = file_get_contents($bingurl); // 从bing获取数据
if(preg_match('/<url>([^<]+)<\/url>/isU', $str, $matches)) { // 正则匹配抓取图片url
$imgurl = 'http://bing.com'.$matches[1];
} else { // 如果由于某些原因,没抓取到图片地址
$imgurl = 'https://bing.com/th?id=OHR.GreaterFlamingosIndia_ZH-CN5655181892_UHD.jpg'; // 使用默认的图像(默认图像链接可修改为自己的)
}
$imgurl=str_replace("1920x1080",$size,$imgurl);
echo $imgurl.'<br>';
header("Location: {$imgurl}"); // 跳转至目标图像
nginx伪静态:
location /bing/ {
if (-f $request_filename) {
break;
}
rewrite ^/bing/(.*)$ /bing/bing.php?idx=$1&n=$2&size=$3 last;
}
php 保存图片:
<?php
//error_reporting(0);
//$predate = $_GET['idx'];
//$num= $_GET['n'];
$predate = $_GET['idx'];
$num = $_GET['n'];
$size = $_GET['size'];
$path = 'img'; //设置图片缓存文件夹
$filename = date("Ymd") . '.jpg'; //用年月日来命名新的文件名
if(strlen($predate)==0){
$predate=rand(0,8);
}
if(strlen($num)==0){
$num = 1;
}
if(strlen($size)==0){
$size = 'UHD';
}
echo 'predate:'.$predate.'<br>';
echo 'num:'.$num.'<br>';
echo 'size:'.$size.'<br>';
//https://api.kquark.com/bing
$bingurl='https://bing.com/HPImageArchive.aspx?idx='.$predate.'&n='.$num;
//'https://bing.com/HPImageArchive.aspx?idx=0&n=1'
echo $bingurl.'<br>';
$str = file_get_contents($bingurl); // 从bing获取数据
if(preg_match('/<url>([^<]+)<\/url>/isU', $str, $matches)) { // 正则匹配抓取图片url
$imgurl = 'http://bing.com'.$matches[1];
} else { // 如果由于某些原因,没抓取到图片地址
$imgurl = 'https://bing.com/th?id=OHR.BlossomsBC_ROW7514274008_UHD.jpg&rf=LaDigue_UHD.jpg&pid=hp'; // 使用默认的图像(默认图像链接可修改为自己的)
}
$imgurl=str_replace("1920x1080",$size,$imgurl);
echo $imgurl.'<br>';
saveImage($path,$filename);
header("Location: {$imgurl}"); // 跳转至目标图像
function saveImage($path= "",$filename = "")
{
if (!file_exists($path.'/'. $filename)) //如果文件不存在,则说明今天还没有进行缓存
{
if(!file_exists($path)) //如果目录不存在
{
echo 'create path'.'<br>';
mkdir($path, 0777); //创建缓存目录
}
echo 'try save'.$filename.'<br>';
$str = file_get_contents('http://bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
$str = json_decode($str,true);
$imgurl = 'http://bing.com'.$str['images'][0]['url']; //获取图片url
$imgurl=str_replace("1920x1080",'UHD',$imgurl);
$img = grabImage($imgurl, $path.'/'.$filename); //读取并保存图片
$handle = fopen("dat.txt", "a"); //用于存放图片信息,如果不需要保存图片的相关信息,可以把下面这些去掉。
if ($handle)
{
$copyright = $str['images'][0]['copyright']; //说明
$startdate = $str['images'][0]['startdate'];
$fullstartdate = $str['images'][0]['fullstartdate'];
$enddate = $str['images'][0]['enddate'];
$urlbase = $str['images'][0]['urlbase'];
$copyrightlink = $str['images'][0]['copyrightlink'];
$quiz = $str['images'][0]['quiz'];
$wp = $str['images'][0]['wp'];
$hsh = $str['images'][0]['hsh'];
$drk = $str['images'][0]['drk'];
$top = $str['images'][0]['top'];
$bot = $str['images'][0]['bot'];
$tempArr = array("imgurl"=>$imgurl,"copyright"=>$copyright, "startdate"=>$startdate,
"fullstartdate"=>$fullstartdate, "enddate"=> $enddate, "urlbase"=>$urlbase,
"copyrightlink"=> $copyrightlink, "quiz"=>$quiz, "wp"=> $wp,
"hsh"=>$hsh,"drk"=>$drk, "top"=> $top, "bot"=> $bot); //将相关信息放进数组中
fwrite($handle, json_encode($tempArr) ."\r\n"); //最终以json格式保存在文本文档中
fclose($handle);
}
$handle = fopen("url_dat.txt", "a"); //用于存放图片信息,如果不需要保存图片的相关信息,可以把下面这些去掉。
if ($handle)
{
fwrite($handle,date("Ymd").':'.$imgurl ."\r\n");
fclose($handle);
}
}
else
{
echo 'today saved:'.$path.'/'. $filename.'<br>';
}
}
/**
* 远程抓取图片并保存
* @param $url 图片url
* @param $filename 保存名称和路径
*/
function grabImage($url, $filename = "")
{
if($url == "") return false; //如果$url地址为空,直接退出
if ($filename == "") //如果没有指定新的文件名
{
$ext = strrchr($url, "."); //得到$url的图片格式
$filename = date("Ymd") . $ext; //用天月面时分秒来命名新的文件名
}
ob_start(); //打开输出
readfile($url); //输出图片文件
$img = ob_get_contents(); //得到浏览器输出
ob_end_clean(); //清除输出并关闭
$size = strlen($img); //得到图片大小
$fp2 = @fopen($filename, "a");
fwrite($fp2, $img); //向当前目录写入图片文件,并重新命名
fclose($fp2);
return $filename; //返回新的文件名
}