PHP获取Bing每日壁纸
PHP 获取 Bing 每日壁纸,并部署到 Vercel。
前言
自建一个 API
获取随机图片可以用于博客 cover
,网上找到一篇文章,本文仅记录,所有代码都来自 这篇文章。
部署
新建一个名为 bing.php
的文件,写入下面代码:
1<?php
2// 判断是否随机调用
3$gettimebase = isset($_GET['day']) ? $_GET['day'] : '';
4if (isset($_GET['rand']) && $_GET['rand'] === 'false') {
5 $gettime = empty($gettimebase) ? 0 : $gettimebase;
6} else {
7 // 若不为随机调用则判断是否指定日期
8 $gettime = empty($gettimebase) ? rand(-1, 7) : $gettimebase;
9}
10
11// 获取 Bing Json 信息
12$mkt = isset($_GET['cn']) && $_GET['cn'] === 'true' ? 'zh-CN' : 'en-US';
13$json_string = file_get_contents("https://www.bing.com/HPImageArchive.aspx?format=js&idx=$gettime&n=1&mkt=$mkt");
14
15// 转换为 PHP 数组
16$data = json_decode($json_string);
17
18// 提取基础 URL
19$imgurlbase = "https://www4.bing.com{$data->images[0]->urlbase}";
20
21// 判断是否指定图片大小
22$imgsizebase = isset($_GET['size']) ? $_GET['size'] : '';
23$imgsize = empty($imgsizebase) ? "1920x1080" : $imgsizebase;
24
25// 建立完整 URL
26$imgurl = "{$imgurlbase}_{$imgsize}.jpg";
27
28// 获取其他信息
29$imgtime = $data->images[0]->startdate;
30$imgtitle = $data->images[0]->title;
31$imglink = $data->images[0]->copyrightlink;
32
33// 判断是否只获取图片信息
34if (isset($_GET['info']) && $_GET['info'] === 'true') {
35 echo "{title:$imgtitle,url:$imgurl,link:$imglink,time:$imgtime}";
36} else {
37 // 若不是则跳转 URL
38 ob_start();
39 header("Location: $imgurl");
40 ob_end_flush();
41}
42?>
新建一个网站,将 bing.php
放入网站目录下,访问 yourdomain.com/bing.php
即可,可选的参数如下:
参数代码 | 参数含义 | 可用参数 |
---|---|---|
rand | 是否随机显示最近 8 天内的图片 | true or false |
day | 显示指定的最近图片 | -1, 0, 1, 2, 3, 4, 5, 6 ,7 0 为今天,-1 为明天 |
size | 指定获取图片大小 | UHD 1920x1080 1366x768 1280x768 1024x768 800x600 800x480 768x1280 720x1280 640x480 480x800 400x240 320x240 240x320 注:中间的 “x” 为英文小写字母 “x” |
info | 获取图片基础信息(JSON 格式) | true or false |
cn | 是否获取国内版的图片 | true or false |
以上所有参数均非必要,默认为:
rand=true, day=0, size=1920x1080, info=false, cn=false
例如,随机获取大小 320x240 的图片则可以引用:
1yourdomain.com/bing.php?rand=true&size=320x240
部署到 Vercel
将 bing.php
存入 api
文件夹,并新建 vercel.json
,写入如下:
1{
2 "functions": {
3 "api/*.php": {
4 "runtime": "vercel-php@0.6.0"
5 }
6 },
7 "routes": [
8 { "src": "/bing/api(.*)","dest": "api/bing.php", "headers": { "Access-Control-Allow-Origin": "*" }}
9 ]
10}
整体目录如下:
1- 项目文件夹
2 - api
3 - bing.php
4 - vercel.json
5 - index.html //可选
访问 random.vercel.app/bing/api
即可,部署过程中如果出现错误,将 Nodejs
版本更改为 18.x
重新部署即可成功。
参考
最后修改于 2024-05-06