简介

​ 必应搜索每日都会有一张精美的图片,我们可以

​ 1、保存下来搭建 api 用于图片展示

​ 2、放在博客当博客背景

​ 于是便有了本项目的诞生。本项目借助 python 实现:

​ 1、服务端获取 2018 - 至今的壁纸接口数据,并存储到 Mongodb

​ 2、提供 json 接口和图片接口

项目地址:https://github.com/flow2000/bing-wallpaper-api

API 接口说明

获取今日壁纸

shell
1
https://api.bimg.cc/today?w=1920&h=1080&mkt=zh-CN
参数名类型是否必要备注
wInt图片宽度,默认 1920
hInt图片高度,默认 1080
uhdBool是否 4k,默认 False
mktString地区,默认 zh-CN

获取随机壁纸

shell
1
https://api.bimg.cc/random?w=1920&h=1080&mkt=zh-CN
参数名类型是否必要备注
wInt图片宽度,默认 1920
hInt图片高度,默认 1080
uhdBool是否 4k,默认 False
mktString地区,默认 zh-CN

获取壁纸 JSON 数据

shell
1
https://api.bimg.cc/all?page=1&order=asc&limit=10&w=1920&h=1080&mkt=zh-CN
参数名类型是否必要备注
pageInt页数,默认 1
limitInt每页数据量,默认 10(1-20)
wInt图片宽度,默认 1920
hInt图片高度,默认 1080
orderstring排序,默认降序 desc,升序 asc
mktString地区,默认 zh-CN
markdown
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 已知分辨率
resolutions: [
'1920x1200',
'1920x1080',
'1366x768',
'1280x768',
'1024x768',
'800x600',
'800x480',
'768x1280',
'720x1280',
'640x480',
'480x800',
'400x240',
'320x240',
'240x320'
]
markdown
1
2
3
4
5
6
7
8
9
10
11
12
// 已知国家地区
locations: [
"de-DE",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"fr-FR",
"it-IT",
"ja-JP",
"zh-CN"
]

获取壁纸数量

shell
1
https://api.bimg.cc/total?mkt=zh-CN
参数名类型是否必要备注
mktString地区,默认 zh-CN

成果

markdown
1
https://api.bimg.cc/today

今日壁纸

markdown
1
https://api.bimg.cc/random

随机壁纸

部署

vercel 部署

1、在 MongoDB 申请 MongoDB 帐号,具体可查看我的博客教程:如何申请一个永久免费的 Mongodb 数据库 - 详细版

2、在 Vercel 申请 Vercel 帐号

3、创建数据库用户名和密码,在 IPAccess List 添加 0.0.0.0(代表允许所有 IP 地址的连接),在 Clusters 页面点击 CONNECT,选择第二个:Connect your application,并记录数据库连接字符串,请将连接字符串中的 user 修改为数据库用户,<password> 修改为数据库密码

3、点击部署vercel deploy

4、进入 Settings - Environment Variables,添加环境变量 MONGODB_URI,值为第 3 步的数据库连接字符串

5、进入 Overview,点击 Domains 下方的链接,添加一个子域名,并在域名解析添加一个 CNAME 解析:cname.vercel-dns.com.,等待刷新完成即可获得一个 https 的接口

docker 部署

plaintext
1
docker run -itd --name bimg --restart=always --env MONGODB_URI= -p 9127:8888 flow2000/bimg

MONGODB_URI:存储方式为 mongodb 时的环境变量

手动触发 Action

因为 Github Action 定时触发需要排队,可能会需要等待很长时间才会进行构建,但手动触发优先级会更高,等待时间会更短,所以我们需要调用 github 的 API 来手动触发。

yml
1
2
3
4
5
6
7
8
9
on:
push:
branches:
- master
schedule:
- cron: '30 0 * * *'
repository_dispatch:
types:
- webhook

https://github.com/settings/tokens 选择 Generate new token->Generate new token (classic),过期时间选择 No expiration,权限范围选择 repo 全部权限,复制生成的令牌

从 hiflow 复制我的模板流程:https://hiflow.tencent.com/share/um1H7Drd0uYfCNhpPzsY48hFS5lOJDWf

其中,为用户名,为仓库名,为上一步骤得到的令牌

例如:https://api.github.com/repos/flow2000/bing-wallpaper-api/dispatches

hiflow模板流程

时间定为每天 08:00,经测试,每个国家地区的壁纸都能更新到。

测试地址:https://github.com/flow2000/vercel-api/actions/runs/3474097895/jobs/5806877139

鸣谢

感谢 hexo-circle-of-friends 的自动化思路

感谢 Bing-Wallpaper-Action 的分地区思路以及仓库的初始化数据