2019-04-05 的更新

意外的发现 Bing 主页的图片其实提供了 API 的。

这样就可以以更优雅的方法解析了 (本脚本现在还可以正常使用,就懒的更新了,等不能用时再说吧)。

https://bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

写了一份简要的 API 说明如下。

各部分 参数 含义
https://bing.com/HPImageArchive.aspx?
format=js js (也就是 json), xml 输出图片信息所用的数据格式
&idx=0 0 (默认), 1, 2, 3, 4, 5, 6 ,7 输出 x 天前 (0 表示今天) 的图片信息
&n=1 1 (默认), 2, 3, 4, 5, 6, 7, 8 输出 x 天内 (1 表示今天) 所有的图片信息

缘由

Bing 的主页每天都会更新一张图片, 拿来作壁纸不要太爽。

手动下载壁纸有一段时间 (主要是有时候壁纸太丑了,不想污染眼睛) ,不过手动下载实在麻烦的很。

那就写个脚本呗 (不会自动化的程序员不是好的潜水员)

具体实现

直接上代码。 (点击 此处 下载脚本)

#!/bin/bash

#
# 获取必应每日的主页图片作为壁纸
#
# @Author: 文正
# @E-Mail: ivlioioilvi@outlook.com

# 定义图片基本 URL
SET_URL_BASE="https://bing.com"
# 定义 API 地址
SET_API="https://bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"

# 准备工作
Preparation_Action() {
    # 判断存放壁纸的文件夹是否存在,如果不存在就创建
    if [[ -d "$HOME/.config/Wallpaper" ]]; then
        :
    else
        mkdir -p "$HOME/.config/Wallpaper/Backups"
    fi
}

# 开始执行 preparation_Action 函数
Preparation_Action

# 提取文件名
Set_Wallpaper() {
    # 复制图片到壁纸目录
    cp -rf "$HOME/.config/Wallpaper/Backups/$1.$2" "$HOME/.config/Wallpaper/Current.$2"

    # 通过 feh 程序设置壁纸
    # 如果你想使用其它壁纸设置工具的话,请注释掉下面这行
    feh --randomize --no-fehbg --bg-scale ~/.config/Wallpaper/Current.$2
}

# 获取图片
Get_Pictures() {
    # 获取图片具体 URL
    GET_URL=$(curl -sL "$SET_API" | awk -F '"' '{ print $18 }')
    # 获取图片名
    GET_NAME=$(echo -e "$GET_URL" | cut -d "_" -f 1 | cut -d "." -f 2)
    # 获取图片格式
    GET_TYPE=$(echo -e "$GET_URL" | cut -d "&" -f 2 | cut -d "." -f 2)

    # 下载图片
    curl -sL "$SET_URL_BASE$GET_URL" -o "$HOME/.config/Wallpaper/Backups/$GET_NAME.$GET_TYPE"

    # 设置壁纸
    Set_Wallpaper "$GET_NAME" "$GET_TYPE"
}

# 开始执行 get_Pictures 函数
Get_Pictures

观察过一段时间, Bing 主页的图片链接虽然变更过几次, 不过总的来说风格比较固定, 所以代码中很多地方都是写死了的 (或者说不灵活)。

此脚本我每天都会使用, 所以如果再次发生了变更也能及时发现并更新 (本篇博客中的代码也会同步更新) ,所以放心食用吧。

在其它系统上运行

上述代码使用 Bash Script 编写, 因此在 *nix 系统上运行应该是没问题的 (包括 Android)。

如果想在 Windows 上运行,有以下几种方法。

  • 安装 Git,使用其中的 git-bash 运行

  • 安装 MSYS2 或之类的工具,使用其中的 Mintty 运行

  • WSL 中运行