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 中運行