米贴 Meetab

每日一图壁纸自动换,实现思路其实就三层

发布于 2026-09-05

每天换一张壁纸,听起来是个挺花哨的需求。真要做起来,思路反而很朴素:一个稳定的图源,加一个定时拉取的动作,再加一个把它铺到屏幕上的出口。

图源几乎不用自己找。微软的 Bing 每日一图已经连续多年每天更新一张高清风景图,而且它开放了一个可以直接调用的接口。我们从这个接口讲起。

图源:Bing 每日一图接口

核心地址就一行:

https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN

它返回一段 JSON,里面 images[0] 就是当天的图。关键字段有两个:url 是已经拼好可直接打开的图片地址,urlbase 是图片的基础路径,可以自己拼出不同分辨率。

几个参数值得记住:

  • idx:从今天往前数第几天。0 是今天,1 是昨天,最大能到 7。
  • n:一次要几天的图,最多 8 张。
  • mkt:地区,影响图片下方的文案语言。国内用 zh-CN,接口偶尔不通时换 en-US 往往能救回来。

默认返回的图是 1920×1080。想要更清晰的,拿 urlbase 拼 _UHD.jpg 就能拿到 4K 原图。很多桌面项目就是这么干的,比如 macOS 上用 Hammerspoon 定时拉当天 UHD 图,再调系统接口设成壁纸。

嫌麻烦可以用现成封装接口

如果你不想自己解析 JSON,社区有人做了更省事的接口,比如 bing.biturl.top。它支持直接返回图片本身,或者返回带 url 字段的 JSON,还能指定分辨率(1366 / 1920 / 3840 / UHD)和地区。

https://bing.biturl.top/?resolution=UHD&format=json&index=0&mkt=zh-CN

对前端或小工具来说,这种接口一行 fetch 就能拿到当天壁纸地址,省掉解析步骤。它的代价是要依赖第三方服务稳定性,自己搭的话还是直连 Bing 原接口更可控。

落地方式一:桌面端定时换

这是最「原汁原味」的玩法,把图真铺到系统桌面。

Windows 上用 PowerShell 加任务计划程序就能完成,不用装任何第三方软件。脚本逻辑就三步:调 Bing 接口拿当天 UHD 图的地址,下载到「图片」目录(文件名带日期防重复),再调用 user32.dll 的 SystemParametersInfo 把那张图设为桌面。最后在任务计划程序里建一个每天触发的任务,勾上「使用最高权限运行」就行。

macOS 的思路类似,用 Hammerspoon 写一段 Lua,定时请求接口、下载、设置桌面,多显示器还能逐个屏幕应用同一张图。

这种方式的优点是「开机即新图」,完全不用打开浏览器。缺点是每台机器都要单独部署脚本。

落地方式二:新标签页 / 网页版直接当背景

不想动系统设置的人,可以把当天壁纸直接铺在浏览器新标签页上。

做法很简单:页面加载时前端去拉一次 Bing 接口(或封装接口),把返回的图片地址设为背景。每天打开新标签页都是新图,配合搜索框、常用网站一起用,顺手就完成了「每日一图」。

米贴(Meetab)的每日壁纸就是这条路线。它把 Bing 每日一图接进新标签页背景,网页版和 Chrome / Edge / Firefox 扩展都能用,国内直连,免费无广告、本地优先。不想折腾脚本的人,一个扩展就顶上了:meetab.cn。

落地方式三:自动化流水线

如果你想沉淀一个「壁纸库」,让网站或博客每天自动展示新图,可以用 GitHub Actions 这类定时任务。

流程是:一个每天(比如 UTC 01:00)触发的定时任务,跑一段脚本去拉 Bing 接口,把图片地址写成一个静态 JS 文件提交回仓库。前端只要读那个文件就能拿到最新图。好处是零服务器、纯静态、可归档历史。不少个人主页的每日背景就是这么实现的。

几个容易踩的坑

分辨率别贪高。4K 图在 1080P 屏幕上加载更慢、更费流量,普通场景 1920 足够。

国内访问不稳定时,先换 mkt=en-US 再考虑其它方案,接口本身没坏。

下载要做防重复。用「日期 + 标题」命名文件,当天已存在就跳过,不然每天定时任务会刷一堆重复图。

多显示器要单独处理。系统级设置壁纸时,得遍历所有屏幕逐个应用,否则只有主屏会换。

收个尾

每日一图壁纸自动换,本质就是「稳定图源 + 定时拉取 + 铺屏出口」三件事。桌面端走系统接口最彻底,网页版最省事,自动化流水线适合做归档。按自己的使用场景挑一种,半天就能跑起来。