Bing每天都会发布每日壁纸,可以通过以下方式获取。
多语言适配:精准切换国内外市场文案
在 API 链接
https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN中,mkt=zh-CN是市场代码,根据地区的不同可能会显示不同的图片、文本。
1.区域市场代码
主要区域市场见下表
2. 国际版文案的结构差异
当你使用 en-US 这种国际版参数时,返回的 JSON 结构与 zh-CN 是一致的,但内容有以下特点:
copyright:内容会变成英文。例如:“Polar bear cubs on sea ice, Arctic National Wildlife Refuge, Alaska, U.S. (© Steven Kazlowski/naturepl.com)”。title:会变成对应的英文标题。文案深度:国际版(尤其是美国版)有时会在
copyrightlink指向的页面提供更长篇幅的科普文章。
3. 为什么有时候图片是一样的?
你会发现,有时候 zh-CN 和 en-US 抓取到的图片是同一张。这是因为:
全球同步图:对于某些极其精美的图片或重大节日,微软会在全球所有区域同步推送。
时差原因:由于时差(比如美国比中国晚十几个小时),当你请求
en-US时,美国可能还没到凌晨更新时间,所以显示的还是上一张。
快速通道:使用免配置的第三方代理 API
通过第三方的图片缓存,可以直接调用显示图像
https://bing.biturl.top/?resolution=1920&format=image&index=0&mkt=zh-CN(推荐,稳定且清晰)https://api.dujin.org/bing/1920.php(大厂接口,速度快)https://api.oioweb.cn/api/bing(可能无法访问)
调用示例
bing.biturl.top
api.dujin.org
api.oioweb.cn
稳健方案:搭建自己的 API 调用
想要绕过第三方“中间人”,直接从微软(Microsoft)官方获取每日壁纸,通常有三种主流的模拟方法。这不仅能让你掌握第一手资源,还能确保背景图片的清晰度和稳定性。
微软官方提供的原始 API 地址是:https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN
由于这个接口返回的是 JSON 数据而不是图片文件,你需要通过以下几种方式进行“模拟抓取”和“转换”。
接口数据示例:
{
"images": [
{
"startdate": "20260226",
"fullstartdate": "202602261600",
"enddate": "20260227",
"url": "/th?id=OHR.ArcitcCub_ZH-CN2725049760_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.ArcitcCub_ZH-CN2725049760",
"copyright": "北极熊幼崽走过浮冰, 北极国家野生动物保护区, 阿拉斯加州, 美国 (© Steven Kazlowski/naturepl.com)",
"copyrightlink": "https://www.bing.com/search?q=北极熊&form=hpcapt&mkt=zh-cn",
"title": "薄冰上的生活",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20260226_ArcitcCub%22&FORM=HPQUIZ",
"wp": true,
"hsh": "d25364b6b8a38d9291bad838e0c4abfe",
"drk": 1,
"top": 1,
"bot": 1,
"hs": []
}
],
"tooltips": {
"loading": "正在加载...",
"previous": "上一个图像",
"next": "下一个图像",
"walle": "此图片不能下载用作壁纸。",
"walls": "下载今日美图。仅限用作桌面壁纸。"
}
}1. 编写后端中转脚本(最稳妥的方法)
可以写一个简单的脚本。这个脚本的作用是:替你访问微软接口,解析出图片地址,然后把你的浏览器“重定向”过去。
实现原理: 你的博客背景指向
https://yourdomain.net/bing-api.php,这个脚本运行后,浏览器会自动跳转到当天的 4K 官方原图。代码示例 (以 PHP 为例): 很多 Halo 用户会配合 Nginx 使用简单的 PHP 环境。代码逻辑如下:
访问微软 API 获取 JSON。
使用
json_decode解析数据。提取
images[0].url字段。拼接官方前缀
https://www.bing.com。使用
header("Location: ...")进行跳转。
这种方法的优点是完全自主控制,且对浏览器非常友好,不会产生跨域问题。
2. 使用前端 JavaScript 动态获取(代码注入法)
操作步骤:
在页脚(Footer)注入一段脚本。
使用
fetch()函数请求微软接口。核心难点: 微软的官方接口通常禁止跨域请求 (CORS)。这意味着你直接在浏览器里用 JS 访问会报错。
解决方案: 你需要使用一个“跨域代理”或者在你的 Nginx 配置里加一个反向代理规则。
反向代理配置示例: 在你的 Nginx 配置文件里加入这段,把
bing-api路径映射到微软官方:
location /bing-api/ {
proxy_pass https://www.bing.com/HPImageArchive.aspx;
}这样你就可以在 JS 里安全地访问 /bing-api/?format=js&idx=0&n=1 而不会报错了。
3. 利用 Serverless 云函数(现代化的“白嫖”法)
如果你不想动服务器配置,也不想写复杂的代码,可以使用 Vercel 或 Cloudflare Workers。
Cloudflare Workers 方案: 这是一个非常流行的方案,因为它是免费的且速度极快。你可以写一个不到 10 行的 Worker 脚本:
监听请求。
发起对微软 API 的子请求。
解析 JSON 拿到图片链接。
直接返回该图片的内容(或者 302 跳转)。
优势: 这种方法相当于你自己搭建了一个私人的、全球加速的“第三方接口”,但数据来源完全由你控制。
4. 拆解官方 API 的参数含义
无论你用哪种方法模拟,都需要理解微软官方接口里的这些参数,以便你自定义背景:
format=js: 告诉微软返回 JSON 格式。如果不加这个,它会返回一个很难解析的 XML。
idx=0: 这里的数字代表日期。
0是今天,1是昨天,以此类推,最高可以支持到7(即获取过去一周的图)。你可以利用这个参数做一个“随机背景”功能。n=1: 请求图片的数量。
mkt=zh-CN: 地区代码。这非常重要!不同地区的 Bing 壁纸是不一样的。
zh-CN是中国区,通常很有诗意;en-US则经常会有一些好莱坞大片或壮丽的自然景观。uhd=1: 这是一个隐藏参数。在某些接口版本中,加上它可以确保返回的是 4K 高清分辨率 而不是普通的 1080P。
系统集成:利用 Power shell脚本 更换每日Bing壁纸
# 保存目录(可改)
$saveDir = 'D:\Wallpapers'
$latestFile = Join-Path $saveDir "bing.jpg"
# 确保目录存在
if (!(Test-Path $saveDir)) {
New-Item -ItemType Directory -Path $saveDir | Out-Null
}
# 1. 获取 Bing JSON 数据
try {
$bingJson = Invoke-RestMethod "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN"
} catch {
Clear-Host
Write-Output "获取 Bing 壁纸源信息失败:$_"
Start-Sleep -Seconds 3
exit
}
# 2. 拼接完整 URL
$imgUrl = "https://www.bing.com" + $bingJson.images[0].url
# 3. 日期命名的文件(yyyy-MM-dd.jpg)
$dateStr = Get-Date -Format "yyyy-MM-dd"
$archiveFile = Join-Path $saveDir "$dateStr.jpg"
# 4. 下载图片(如果不存在)
if (!(Test-Path $archiveFile)) {
try {
Invoke-WebRequest -Uri $imgUrl -OutFile $latestFile
Copy-Item $latestFile $archiveFile -Force
$finalMessage = "下载完成,保存了$latestFile的壁纸并归档了:$archiveFile`n壁纸!"
} catch {
Clear-Host
Write-Output "下载失败:$_"
Start-Sleep -Seconds 3
exit
}
} else {
Copy-Item $archiveFile $latestFile -Force
$finalMessage = "今日壁纸已存在,已使用现有壁纸`n壁纸设置成功!"
}
# 5. 设置为桌面壁纸
try {
Add-Type @"
using System.Runtime.InteropServices;
public class Wallpaper {
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
}
"@
[Wallpaper]::SystemParametersInfo(20, 0, $latestFile, 3)
} catch {
$finalMessage = "设置壁纸出错:$_"
}
# 6. 清屏并显示最终提示,3秒后退出
Clear-Host
Write-Output $finalMessage
Start-Sleep -Seconds 3
exit
保存在xxx.ps1文件内,使用PowerShell 运行
拆解一下这段代码的逻辑:
1. 基础环境准备
$saveDir = 'D:\Wallpapers'
$latestFile = Join-Path $saveDir "bing.jpg"变量定义:设置了图片存储的根目录。
路径合并:
Join-Path是比直接拼字符串更专业的做法,它能自动处理 Windows 路径里的斜杠问题。
2. 访问微软 API 并解析 JSON
$bingJson = Invoke-RestMethod "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN"核心动作:
Invoke-RestMethod类似于浏览器发出了一个请求,但它很聪明,会自动把返回的 JSON 字符串转换成 PowerShell 的对象(Object)。数据结构:执行完这行后,你可以直接通过
$bingJson.images[0].url拿到图片路径,这比自己解析字符串快得多。
3. 下载与归档策略
$dateStr = Get-Date -Format "yyyy-MM-dd"
$archiveFile = Join-Path $saveDir "$dateStr.jpg"
逻辑设计:脚本不仅下载一张名为
bing.jpg的临时文件,还根据当天的日期生成一个备份文件(如2026-02-24.jpg)。本地判断:它会先检查今天是不是已经下载过了(
Test-Path),如果下载过就直接从本地归档里拷贝,避免重复请求微软服务器,非常环保。
4. 调用底层系统 API
Add-Type @"
using System.Runtime.InteropServices;
public class Wallpaper {
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
}
"@
C# 注入:这是 PowerShell 的高级用法。因为 PowerShell 自身没有直接“修改桌面壁纸”的命令,所以它通过
Add-Type现场编写了一小段 C# 代码。底层调用:它调用了 Windows 操作系统的
user32.dll库中的SystemParametersInfo函数。参数含义:
20:代表SPI_SETDESKWALLPAPER(设置桌面壁纸的操作码)。$latestFile:图片的绝对路径。3:代表立即生效并更新注册表。
脚本特色
可全自动:配合 Windows 的“任务计划程序”,可以实现每天开机自动换背景。
附带归档:运行一年后,你就拥有了一个属于自己的精美壁纸库。
无需依赖:不需要安装任何第三方软件,纯系统原生支持。
温馨提示
运行权限:默认情况下 Windows 禁止运行脚本,需要先执行
Set-ExecutionPolicy RemoteSigned。路径权限:确保
D:\Wallpapers目录存在或者脚本有权创建它。
相关阅读