200字
获取Bing每日壁纸的方法
2026-02-24
2026-03-08
部分AIGC.svg

Bing每天都会发布每日壁纸,可以通过以下方式获取。

多语言适配:精准切换国内外市场文案

在 API 链接 https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN 中,mkt=zh-CN 是市场代码,根据地区的不同可能会显示不同的图片、文本。

1.区域市场代码

主要区域市场见下表

国家/地区

mkt 参数

文案语言

特点

全球/国际

en-WW

英语

通用代码,通常显示与美国版类似的内容。

中国

zh-CN

简体中文

偏向中国风光、东方审美。

美国

en-US

英语

拥有最丰富、最深度的背景故事文案。

英国

en-GB

英语

有时会包含英国本土的自然风光。

日本

ja-JP

日语

文案风格通常比较细腻,经常推荐日本当地名胜。

德国

de-DE

德语

针对欧洲地区的自然景观较多。

法国

fr-FR

法语

具有浓郁的法式审美。

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-CNen-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": "下载今日美图。仅限用作桌面壁纸。"
  }
}

Key (键)

示例 Value (值)

详细含义说明

startdate

20260226

发布日期:图片开始在首页显示的日期 (YYYYMMDD)。

fullstartdate

202602261600

完整发布时间:包含具体小时和分钟的时间戳。

enddate

20260227

下架日期:图片在首页展示结束的日期。

url

/th?id=OHR.ArcitcCub...

图片相对地址:需要手动加上 https://cn.bing.com 前缀。

urlbase

/th?id=OHR.ArcitcCub

图片基础链接:不含分辨率后缀,可用于自定义拼接尺寸。

copyright

北极熊幼崽走过浮冰...

版权文案:包含拍摄内容、地点及摄影师。

copyrightlink

https://www.bing.com/search...

详情跳转链接:点击后进入该地点的 Bing 搜索结果页。

title

薄冰上的生活

感性标题:Bing 为这张图片起的艺术化名字,适合做文章标题。

quiz

/search?q=Bing+homepage...

测验链接:指向该图片相关的地理知识小知识问答。

wp

true

壁纸属性:布尔值,代表该图是否支持作为官方壁纸下载。

hsh

d25364b6b8...

哈希值:图片的唯一识别码,用于判断图片内容是否发生了更新。

drk/top/bot

1

布局参数:暗示前端文字层的位置和亮度,防止干扰图片主体。

tooltips

{loading: "正在加载...", ...}

界面提示:存放“正在加载”、“下一张”等 UI 按钮的文本。

1. 编写后端中转脚本(最稳妥的方法)

可以写一个简单的脚本。这个脚本的作用是:替你访问微软接口,解析出图片地址,然后把你的浏览器“重定向”过去。

  • 实现原理: 你的博客背景指向 https://yourdomain.net/bing-api.php,这个脚本运行后,浏览器会自动跳转到当天的 4K 官方原图。

  • 代码示例 (以 PHP 为例): 很多 Halo 用户会配合 Nginx 使用简单的 PHP 环境。代码逻辑如下:

    1. 访问微软 API 获取 JSON。

    2. 使用 json_decode 解析数据。

    3. 提取 images[0].url 字段。

    4. 拼接官方前缀 https://www.bing.com

    5. 使用 header("Location: ...") 进行跳转。

这种方法的优点是完全自主控制,且对浏览器非常友好,不会产生跨域问题。


2. 使用前端 JavaScript 动态获取(代码注入法)

  • 操作步骤:

    1. 在页脚(Footer)注入一段脚本。

    2. 使用 fetch() 函数请求微软接口。

    3. 核心难点: 微软的官方接口通常禁止跨域请求 (CORS)。这意味着你直接在浏览器里用 JS 访问会报错。

    4. 解决方案: 你需要使用一个“跨域代理”或者在你的 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 脚本:

    1. 监听请求。

    2. 发起对微软 API 的子请求。

    3. 解析 JSON 拿到图片链接。

    4. 直接返回该图片的内容(或者 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:代表立即生效并更新注册表。


脚本特色

  1. 可全自动:配合 Windows 的“任务计划程序”,可以实现每天开机自动换背景。

  2. 附带归档:运行一年后,你就拥有了一个属于自己的精美壁纸库。

  3. 无需依赖:不需要安装任何第三方软件,纯系统原生支持。

温馨提示

  • 运行权限:默认情况下 Windows 禁止运行脚本,需要先执行 Set-ExecutionPolicy RemoteSigned

  • 路径权限:确保 D:\Wallpapers 目录存在或者脚本有权创建它。

相关阅读

https://aeolusdev.cn/archives/1772153531681

获取Bing每日壁纸的方法
作者
Aeolus
发表于
2026-02-24
License
CC BY-NC-SA 4.0

评论