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