必应美图每日壁纸 API
前言
众所周知,微软必应搜索的网页背景图每天都会更换,正如如此,常被调用作为网页/软件的背景图。实不相瞒,本网站首页的那张图就是必应每日图片。
最近自学了下 PHP,照着大佬的小改了一个,基本自己想要的功能都有了。效果还不错。分享出来吧!
功能
已实现:
★JSON 数据:输出易读 JSON 数据
★TXT 文本:输出纯文本信息
★ 图片 URL:自动重定向至图片 URL
★ 指定日期:指定某一天的图片
★ 图片下载:自动下载到服务器开关
★ 下载日志:详细显示图片下载时间
★ 测试模式:方便进行测试
暂未支持:
☆XML 数据
计划中:
◈ 随机图片:随机输出图片信息
示例
图片
HTML
JSON
TXT
<img src="https://hovthen.com/img_bing?date=20201218"/>
示例:https://hovthen.com/img_bing?format=json&date=20201218
{
"images": [
{
"startdate": "20201217",
"fullstartdate": "202012171600",
"enddate": "20201218",
"url": "\/th?id=OHR.TreCime_ZH-CN7609469681_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "\/th?id=OHR.TreCime_ZH-CN7609469681",
"copyright": "从环绕山峰的小径最高点看到的拉瓦莱多三峰山,意大利 (© AWL Images\/Danita Delimont)",
"copyrightlink": "https:\/\/www.bing.com\/search?q=%E6%8B%89%E7%93%A6%E8%8E%B1%E5%A4%9A%E4%B8%89%E5%B3%B0%E5%B1%B1&form=hpcapt&mkt=zh-cn",
"title": "",
"quiz": "\/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20201217_TreCime%22&FORM=HPQUIZ",
"wp": true,
"hsh": "6eb44f06c90c0ea7eaf67d3103459460",
"drk": 1,
"top": 1,
"bot": 1,
"hs": []
}
],
"tooltips": {
"loading": "正在加载...",
"previous": "上一个图像",
"next": "下一个图像",
"walle": "此图片不能下载用作壁纸。",
"walls": "下载今日美图。仅限用作桌面壁纸。"
}
}
示例:https://hovthen.com/img_bing?format=txt&date=20201218
startdate:20201217fullstartdate:202012171600
enddate:20201218
url:/th?id=OHR.TreCime_ZH-CN7609469681_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp
urlbase:/th?id=OHR.TreCime_ZH-CN7609469681copyright:从环绕山峰的小径最高点看到的拉瓦莱多三峰山,意大利 (© AWL Images/Danita Delimont)copyrightlink:https://www.bing.com/search?q=%E6%8B%89%E7%93%A6%E8%8E%B1%E5%A4%9A%E4%B8%89%E5%B3%B0%E5%B1%B1&form=hpcapt&mkt=zh-cn
title:quiz:/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20201217_TreCime%22&FORM=HPQUIZ
wp:1
hsh:6eb44f06c90c0ea7eaf67d3103459460
drk:1
top:1
bot:1
hotspots:[]
walle:此图片不能下载用作壁纸。
walls:下载今日美图。仅限用作桌面壁纸。
源码
@万里无云 修改版
使用时请手动在同目录下新建data和img两个文件夹。分别存放图片数据以及下载图片。
如果未创建可能会报错,注意文件夹权限777
<?php
/*
* Author : 万里无云
* Demo : https://hovthen.com/img_bing
* Description : 一个Bing今日美图API PHP版
* Time : 2020-12-16
* Other : 转载请注明出处 https://www.hovthen.com/ Thanks!
*/
if ( !file_exists("./data/.readme.txt") )
{
file_put_contents("./img/.readme.txt","//下载图片文件夹,可随意删除,可使用正则表达式删除时间,仅保留图片链接:([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} )");
file_put_contents("./data/.readme.txt","//图片数据文件夹,请勿删除");
//请手动在当前目录新建 data 和 img 两个文件夹
}
$down_img = true;//设置是否自动下载图片,true/false
$Get_date = $_GET['date'];//20201201
$Get_format = $_GET['format'];//json、xml、txt、url
if ( $Get_date==null||$Get_date==""||$Get_date=="null" ) {
//日期格式默认 今天
$datetime = date("Ymd");
}
if ( date('Ymd', strtotime($Get_date)) == $Get_date ) {
//日期格式判断 True
$datetime = $Get_date;
} else {
//日期格式判断 False
$datetime = date("Ymd");
}
$file_data = "./data//CN_". $datetime . ".json";
if ( file_exists($file_data) ) {
//当前目录中,JSON数据文件存在
$data = json_decode(file_get_contents($file_data), true);
} else {
//当前目录中,JSON数据文件不存在
$data = json_decode(file_get_contents("https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"), true);
$inset_data = json_encode($data);
$inset_file = "./data/CN_". $data['images'][0]['enddate']. ".json";
$url = "https://cn.bing.com/". $data['images'][0]['url'];
file_put_contents($inset_file, $inset_data);
if ( $down_img ) {
file_put_contents("./img/CN_". $data['images'][0]['enddate']. ".jpeg",file_get_contents($url));
$txt_data = file_get_contents("./img/.readme.txt");
$txt_data = $txt_data. "\n". date("Y-m-d H:i:s")." ".$url;
file_put_contents("./img/.readme.txt",$txt_data);
}
}
if ( $_GET['test']=="true" ) {
header('Content-type:text/html');
echo "<title>必应美图API测试</title>";
echo "测试模式:PHP ". PHP_VERSION. "<br/><br/>";
echo "最终数据:<br/>". json_encode($data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT). "<br/><br/>";
echo "传入数据_日期(date):<br/>". $Get_date. "<br/><br/>";
echo "传入数据_类型(format):<br/>". $Get_format. "<br/><br/>";
echo "传出图片_链接:<br/>". "https://cn.bing.com/". $data['images'][0]['url']. "<br/><br/>";
echo "传出图片_示例:<br/><img src='". "https://cn.bing.com/". $data['images'][0]['url']. "'/><br/><br/>";
exit('测试模式:PHP '.PHP_VERSION);
}
if ( $Get_format=="json" ) {
header('Content-type:text/json;charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
}
if ( $Get_format=="url"||$Get_format==""||$Get_format==null ) {
header("status: 302");
$headerurl = "https://cn.bing.com/". $data['images'][0]['url'];
header("Location:$headerurl");
}
if ( $Get_format=="xml" ) {
header('Content-type:text/xml;charset=utf-8');
echo "<error><title>暂不支持XML</title><text>请使用JSON或TXT</text></error>";
}
if ( $Get_format=="txt" ) {
header('Content-type:text/txt;charset=utf-8');
$headertxt = "\nstartdate:". $data['images'][0]['startdate']. "\nfullstartdate:". $data['images'][0]['fullstartdate']. "\nenddate:". $data['images'][0]['enddate']. "\nurl:". $data['images'][0]['url']. "\nurlbase:". $data['images'][0]['urlbase']. "\ncopyright:". $data['images'][0]['copyright']. "\ncopyrightlink:". $data['images'][0]['copyrightlink']. "\ntitle:". $data['images'][0]['title']. "\nquiz:". $data['images'][0]['quiz']. "\nwp:". $data['images'][0]['wp']. "\nhsh:". $data['images'][0]['hsh']. "\ndrk:". $data['images'][0]['drk']. "\ntop:". $data['images'][0]['top']. "\nbot:". $data['images'][0]['bot']. "\nhotspots:". json_encode($data['images'][0]['hs'], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT). "\nwalle:". $data['tooltips']['walle']. "\nwalls:". $data['tooltips']['walls']. "\n";
echo $headertxt;
}
?>
@刘明野 原版
这里分享刘明野大佬写的一段 PHP 代码,可以获取每日 BING 图,并将其信息缓存到本地 JSON,可以在减少服务器负担的同时提升访问速度。
实测在 PHP v7.4 会出错,v7.2 可正常使用!上传主机空间后直接访同即可!
<?php
/*
* 作者:刘明野
* 代码来自:https://www.liumingye.cn/archives/266.html
*/
$filename = "./cache.json";
if (file_exists($filename) === false) {
file_put_contents($filename, "");
}
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$contents = json_decode($contents, true);
if (filesize($filename) === 0) {
// echo "获取\r\n";
getBingImg();
} else {
if ($contents['time'] === date("Ymd")) {
// echo "缓存\r\n";
Header("Location: ".$contents['url']);
} else {
// echo "过期\r\n";
getBingImg();
}
}
function getBingImg() {
$str = file_get_contents('http://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) {
global $contents;
if($contents['url'] !== $imgurl){
global $filename;
$data = array(
"time" => date("Ymd") ,
"url" => $imgurl
);
$data = json_encode($data);
file_put_contents($filename, $data);
}
Header("Location: ".$imgurl);
exit();
} else {
exit('error');
}
}
后记
强烈建议 COPY 一下源码在自己服务器/虚拟空间使用,本站随时可能不稳定。如果大佬有之前的 bing 图官方的 json 数据压缩包麻烦发我一份,扩充下图库。