获取Bing图片作为WordPress等网站首页背景图

必应搜索的图片是什么这里就不说了,昨天渣渣龙在群里艾特要我把Bing的每日一图作为网站背景图

我所使用的C7V5主题首页确实有一个大图,我经常换的图也是从Bing历史图中获取到好看的图片,保存得到的

这个功能还是很简单的,看一下CSS,直接在header中增加行内样式就可以替换首页背景图

那就写一下吧,最近Bing又换了图片链接格式

作死获取

每次有请求,就去获取一下Bing的接口,直接引用Bing的图片地址

虽然我有使用方糖每天推送一次 Bing 的图片,但是也就访问一次,影响不大

但是这样每次有访客就请求一次Bing的接口,这样感觉迟早会被banIP,所以不作死就不会死吧

function get_bing_img()
{
	// 从 bing 获取数据
	$res = file_get_contents('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
	// 转成数组
	$bingArr = json_decode($res, true);
	$src = "https://cn.bing.com{$bingArr['images'][0]['urlbase']}_1920x1080.jpg";
	return $src;
}

很简单就获取到了图片地址,想直接引用就这么干 :mrgreen:

素质获取

提高一下素质,不要写这种代码,增加一个缓存,或者保存文件到本地,引用自己本地图片地址

这里需要用到一个WordPress自带的函数wp_upload_dir()

返回WordPress上传目录的地址,是一个数组,包含一系列与上传地址相关的信息

$upload_dir = wp_upload_dir();

提供如下信息给你

‘path’ – 上传目录的服务器绝对路径,通常以反斜杠(/)开头
‘url’ – 上传目录的完整 URL
‘subdir’ – 子目录名称,通常是以年/月形式组织的目录地址,例如/2019/03
‘basedir’ – 上传目录的服务器绝对路径,不包含子目录
‘baseurl’ – 上传目录的完整 URL,不包含子目录
‘error’ – 报错信息

为了避免有些人修改了对应的路径,所以使用此函数获取,我这里选择保存文件到本地使用

function get_bing_img_cache()
{
	// 获取 wp 路径
	$imgDir = wp_upload_dir();
	$bingDir = $imgDir['basedir'].'/bing';
	if (!file_exists($bingDir)) {
		mkdir($bingDir, 0755);
	}
	$today = mktime(0,0,0,date('m'),date('d'),date('Y'));
	$yesterday = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
	// 是否存在今日图片
	if (!file_exists($bingDir.'/'.$today.'.jpg')) {
		// 从 bing 获取数据
		$res = file_get_contents('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
		// 转成数组
		$bingArr = json_decode($res, true);
		$bing_url = "https://cn.bing.com{$bingArr['images'][0]['urlbase']}_1920x1080.jpg";
		$content = file_get_contents($bing_url);
		file_put_contents($bingDir.'/'.$today.'.jpg', $content); // 写入今天的
		unlink($bingDir.'/'.$yesterday.'jpg'); //删除昨天的
		$src = $imgDir['baseurl'].'/bing/'.$yesterday.'.jpg';
	} else {
		// 存在
		$src = $imgDir['baseurl'].'/bing/'.$today.'.jpg';
	}
	return $src;
}

获取图片的任务完成了,怎么在页面获取呢

<?php if(!empty(get_bing_img())){echo "style='background-image: url(".get_bing_img().")'";} ?>

加在需要设置背景的地方就ok了,更多WordPress代码段见Github 仓库

6 条评论

发表评论

*