基于 Python 调用 Bing 壁纸 API 自动更换桌面背景
引言
在个人电脑使用过程中,经常更换桌面壁纸可以带来新鲜感。本教程将介绍如何使用 Python 编写一个自动化脚本,通过调用必应(Bing)每日壁纸 API 获取高清图片,并结合 Windows 系统接口实现桌面壁纸的自动下载与切换。
如何使用 Python 调用必应壁纸 API 下载高清图片,并结合 Windows 系统接口实现桌面壁纸的自动切换。内容涵盖 API 参数解析、Python 脚本编写、依赖库安装及注册表配置方法,提供完整的自动化脚本示例。文章详细说明了环境准备、下载逻辑、系统 API 调用细节以及常见问题解决方案,帮助用户快速构建桌面壁纸自动化工具。

在个人电脑使用过程中,经常更换桌面壁纸可以带来新鲜感。本教程将介绍如何使用 Python 编写一个自动化脚本,通过调用必应(Bing)每日壁纸 API 获取高清图片,并结合 Windows 系统接口实现桌面壁纸的自动下载与切换。
该工具适用于 Windows 操作系统,主要涉及网络请求、文件操作以及 Windows API 调用三个部分。
在开始之前,请确保您的开发环境满足以下要求:
requests:用于发送 HTTP 请求获取壁纸数据。pywin32:用于调用 Windows 系统 API 修改注册表和刷新桌面。使用 pip 安装依赖:
pip install requests pywin32
本方案使用开源的必应壁纸 API 作为图片来源。该 API 提供了丰富的参数来控制返回的图片质量、分辨率及日期。
0 表示今天,1 表示昨天,以此类推。设置为 random 可获取随机日期的图片。YYYYMMDD。直接在浏览器访问以下地址可测试 API 功能:
http://bingw.jasonzeng.dev?resolution=UHD&index=random&w=1000&format=json
返回的 JSON 数据结构如下:
{
"startdate": "20220105",
"copyright": "Plate-billed mountain toucan in Bellavista Cloud Forest Reserve, Ecuador (© Tui De Roy/Minden Pictures)",
"urlbase": "/th?id=OHR.MountainToucan_EN-US7120632569",
"title": "A plate-billed mountain toucan",
"url": "https://www.bing.com/th?id=OHR.MountainToucan_EN-US7120632569_UHD.jpg&w=1000"
}
首先,我们需要编写一个脚本来批量下载壁纸并保存到本地目录。为了程序的健壮性,我们增加了异常处理和目录创建逻辑。
import os
import requests
def download_wallpapers(count=30):
# 创建保存壁纸的目录
save_dir = "wallpaper"
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"已创建目录:{save_dir}")
for i in range(count):
try:
# 构建请求 URL
url = f"https://bingw.jasonzeng.dev?resolution=UHD&index={i}"
print(f"正在下载第 {i+1} 张壁纸...")
# 发送请求
res = requests.get(url, timeout=10)
res.raise_for_status() # 检查请求是否成功
# 写入文件
filename = os.path.join(save_dir, f"{i}.jpg")
with open(filename, "wb") as w:
w.write(res.content)
print(f"下载完成:{filename}")
except Exception as e:
print(f"下载第 {i+1} 张壁纸时出错:{e}")
if __name__ == "__main__":
# 设置下载数量,可根据需要调整
download_wallpapers(30)
代码说明:
os.makedirs 确保存储目录存在。timeout 防止网络请求无限挂起。try-except 捕获网络异常,避免单个失败导致整个程序中断。下载完壁纸后,接下来需要编写脚本自动切换它们。这里使用 pywin32 库操作 Windows 注册表和系统接口。
import os
import time
import win32api
import win32con
import win32gui
def set_wallpaper_style():
"""设置壁纸样式:居中或拉伸"""
try:
k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,
"Control panel\\Desktop", 0, win32con.KEY_SET_VALUE)
# 0 代表居中,2 代表拉伸
win32api.RegSetValueEx(k, "WallpaperStyle", 0, win32con.REG_SZ, "2")
win32api.RegSetValueEx(k, "Tilewallpaper", 0, win32con.REG_SZ, "0")
win32api.RegCloseKey(k)
except Exception as e:
print(f"设置壁纸样式失败:{e}")
def change_wallpaper(paper_path):
"""应用壁纸路径"""
try:
# 刷新桌面壁纸
win32gui.SystemParametersInfo(
win32con.SPI_SETDESKWALLPAPER,
paper_path,
win32con.SPIF_SENDWININICHANGE | win32con.SPIF_UPDATEINIFILE
)
print(f"壁纸已切换至:{paper_path}")
except Exception as e:
print(f"切换壁纸失败:{e}")
def auto_switch_wallpapers():
"""自动循环切换壁纸"""
pic_list = []
save_dir = "wallpaper"
if not os.path.exists(save_dir):
print("未找到壁纸目录,请先运行下载脚本")
return
# 获取所有图片文件
for file in os.listdir(save_dir):
if file.lower().endswith((".jpg", ".jpeg", ".png", ".bmp")):
pic_list.append(file)
if not pic_list:
print("目录下没有可用的图片")
return
# 设置壁纸样式
set_wallpaper_style()
index = 0
interval = 60 * 60 # 每小时切换一次,单位秒
print("开始自动切换壁纸...")
while True:
pic_name = pic_list[index]
abs_path = os.path.abspath(os.path.join(save_dir, pic_name))
change_wallpaper(abs_path)
index += 1
if index >= len(pic_list):
index = 0
time.sleep(interval)
if __name__ == "__main__":
# 注意:此脚本可能需要管理员权限才能修改注册表
auto_switch_wallpapers()
注意事项:
SPIF_SENDWININICHANGE 标志用于通知其他应用程序设置已更改。如果运行切换脚本时提示权限错误,请尝试以管理员身份运行 Python 解释器。
上述代码仅处理常见的图片格式。如果需要支持更多格式(如 WebP),可在文件过滤条件中添加扩展名。
当前脚本针对 Windows 设计。若在 macOS 或 Linux 上运行,需替换 win32gui 相关代码,使用对应系统的命令(如 macOS 的 osascript)来修改壁纸。
API 来源为第三方托管服务,建议在生产环境中自行搭建镜像或使用官方 Bing 接口。同时,定期清理不再需要的壁纸文件以节省磁盘空间。
本文详细介绍了如何利用 Python 结合必应壁纸 API 和 Windows 系统接口,实现桌面壁纸的自动下载与定时切换。通过合理的异常处理和模块化设计,该脚本具有较高的稳定性和可扩展性。用户可以根据实际需求调整下载数量、切换频率以及壁纸样式,打造个性化的桌面体验。
如需进一步优化,可以考虑增加配置文件功能,允许用户自定义 API 地址、切换间隔和壁纸目录。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online