Python+Github Action 搭建必应壁纸 api
简介
必应搜索每日都会有一张精美的图片,我们可以
1、保存下来搭建 api 用于图片展示
2、放在博客当博客背景
于是便有了本项目的诞生。本项目借助 python 实现:
1、服务端获取 2018 - 至今的壁纸接口数据,并存储到 Mongodb
2、提供 json 接口和图片接口
项目地址:https://github.com/flow2000/bing-wallpaper-api
API 接口说明
获取今日壁纸
1 | https://api.bimg.cc/today?w=1920&h=1080&mkt=zh-CN |
参数名 | 类型 | 是否必要 | 备注 |
---|---|---|---|
w | Int | 否 | 图片宽度,默认 1920 |
h | Int | 否 | 图片高度,默认 1080 |
uhd | Bool | 否 | 是否 4k,默认 False |
mkt | String | 否 | 地区,默认 zh-CN |
获取随机壁纸
1 | https://api.bimg.cc/random?w=1920&h=1080&mkt=zh-CN |
参数名 | 类型 | 是否必要 | 备注 |
---|---|---|---|
w | Int | 否 | 图片宽度,默认 1920 |
h | Int | 否 | 图片高度,默认 1080 |
uhd | Bool | 否 | 是否 4k,默认 False |
mkt | String | 否 | 地区,默认 zh-CN |
获取壁纸 JSON 数据
1 | https://api.bimg.cc/all?page=1&order=asc&limit=10&w=1920&h=1080&mkt=zh-CN |
参数名 | 类型 | 是否必要 | 备注 |
---|---|---|---|
page | Int | 否 | 页数,默认 1 |
limit | Int | 否 | 每页数据量,默认 10(1-20) |
w | Int | 否 | 图片宽度,默认 1920 |
h | Int | 否 | 图片高度,默认 1080 |
order | string | 否 | 排序,默认降序 desc ,升序 asc |
mkt | String | 否 | 地区,默认 zh-CN |
1 | // 已知分辨率 |
1 | // 已知国家地区 |
获取壁纸数量
1 | https://api.bimg.cc/total?mkt=zh-CN |
参数名 | 类型 | 是否必要 | 备注 |
---|---|---|---|
mkt | String | 否 | 地区,默认 zh-CN |
成果
部署
vercel 部署
1、在 MongoDB 申请 MongoDB 帐号,具体可查看我的博客教程:如何申请一个永久免费的 Mongodb 数据库 - 详细版
2、在 Vercel 申请 Vercel 帐号
3、创建数据库用户名和密码,在 IPAccess List 添加 0.0.0.0
(代表允许所有 IP 地址的连接),在 Clusters 页面点击 CONNECT,选择第二个:Connect your application,并记录数据库连接字符串,请将连接字符串中的 user
修改为数据库用户,<password>
修改为数据库密码
4、进入 Settings - Environment Variables,添加环境变量 MONGODB_URI
,值为第 3 步的数据库连接字符串
5、进入 Overview,点击 Domains 下方的链接,添加一个子域名,并在域名解析添加一个 CNAME
解析:cname.vercel-dns.com.
,等待刷新完成即可获得一个 https
的接口
docker 部署
1 | docker run -itd --name bimg --restart=always --env MONGODB_URI= -p 9127:8888 flow2000/bimg |
MONGODB_URI
:存储方式为 mongodb 时的环境变量
手动触发 Action
因为 Github Action
定时触发需要排队,可能会需要等待很长时间才会进行构建,但手动触发优先级会更高,等待时间会更短,所以我们需要调用 github 的 API 来手动触发。
1 | on: |
在 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
时间定为每天 08:00
,经测试,每个国家地区的壁纸都能更新到。
测试地址:https://github.com/flow2000/vercel-api/actions/runs/3474097895/jobs/5806877139
鸣谢
感谢 hexo-circle-of-friends 的自动化思路
感谢 Bing-Wallpaper-Action 的分地区思路以及仓库的初始化数据
这样算是复刻成功了吗,GithubAction 手动触发好像报错不知道为啥
https://github.com/Ylanw/bing-wallpaper-api/actions/runs/6310006893/job/17131607918