MENU

必应美图 API

前言

众所周知,微软必应搜索的网页背景图每天都会更换,正如如此,常被调用作为网页/软件的背景图。实不相瞒,本网站首页的那张图就是必应每日图片。

最近自学了下 PHP,照着大佬的小改了一个,基本自己想要的功能都有了。效果还不错。分享出来吧!

功能

已实现:
★JSON 数据:输出易读 JSON 数据
★TXT 文本:输出纯文本信息
★ 图片 URL:自动重定向至图片 URL
★ 指定日期:指定某一天的图片
★ 图片下载:自动下载到服务器开关
★ 下载日志:详细显示图片下载时间
★ 测试模式:方便进行测试

暂未支持:
☆XML 数据

计划中:
◈ 随机图片:随机输出图片信息

示例

必应美日一图
<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:下载今日美图。仅限用作桌面壁纸。

源码

@万里无云 修改版

使用时请手动在同目录下新建dataimg两个文件夹。分别存放图片数据以及下载图片。

如果未创建可能会报错,注意文件夹权限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 数据压缩包麻烦发我一份,扩充下图库。


加入 QQ群 与小伙伴一起玩耍!

最后编辑于: 2021 年 10 月 08 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码