细心的朋友可能发现,我的博客首页图片其实就是Bing壁纸,为了这个壁纸我琢磨了好久,阅遍全网的Bing壁纸API,结果不是不能用就是不符合我的需求(不过说实话我的需求挺怪的),我实在忍不了,干脆自己写(改)了一个,顺便在这里分享给大家。
效果:
主要特性
- 最好的语言PHP编写
- 保存当天壁纸到本地
- 随机返回近10天的壁纸
- 若壁纸不存在则返回当天壁纸
一些说明
- 此项目部分代码参考了网上的一些实现方式,但是由于年代久远且相互抄袭严重,找不到真正的作者,因此此部分代码不注明出处(主要是我也不知道),当然如果作者能联系我的话,我也很乐意注明出处的
- 每天的壁纸都会以日期.jpg 保存
- 壁纸保存在/bing/ 目录下
代码
<?php
$path = 'bing'; //设置图片缓存文件夹
$filename = date("Ymd") . '.jpg'; //用年月日来命名新的文件名
if (!file_exists($path.'/'. $filename)) //如果文件不存在,则说明今天还没有进行缓存
{
if(!file_exists($path)) //如果目录不存在
{
mkdir($path, 0777); //创建缓存目录
}
$str = file_get_contents('http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'); //读取必应api,获得相应数据
$str = json_decode($str,true);
$imgurl = 'http://cn.bing.com'.$str['images'][0]['url']; //获取图片url
$img = grabImage($imgurl, $path.'/'.$filename); //读取并保存图片
}
$cutday='-'.rand(0, 9).' '.'day'; //随机往前推的天数
$imgurl = './bing/'.date("Ymd",strtotime($cutday)) . '.jpg'; //生成随机的图片地址
if(file_exists($imgurl))
{
header("Location: $imgurl"); //如果图片存在则跳转随机图片
}
else{
$imgurl = './bing/'.date("Ymd") . '.jpg';
header("Location: $imgurl"); //否则跳转当天图片
}
/**
* 远程抓取图片并保存
* @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; //返回新的文件名
}
GitHub地址(可以的话赏个Star呗):https://github.com/kakkk/PHP-BingWallpaper
Demo
https://bing.kakkk.cc/bing.php
End.
Comments | NOTHING