自从换了 mac 之后,直观的感觉是桌面变的更空旷了(本来我就不喜欢在桌面放东西)。所以,壁纸成了装点桌面的唯一工具。正好 Bing 的背景图片每天都会换一张,并且几乎每张图片都让人感觉非常大气,所以就萌生了用 Bing 图片做壁纸的想法(话说让我知道 Bing 每天都会换背景图,还是因为之前做 Kratos 的时候有小伙伴提出网页的背景图能不能调用 Bing 的接口)。我先看了一下 Apple Store 里面有没有这种 App,果不其然还真有,但是这价格的话,emmmmm 算了还是自己整吧。
利弊分析
Bing 的图片有 4 种像素,分别是 1920x1200、1920x1080、800x480、400x240,而 mac 可以支持到 2880 x 1800,所以在视觉上看着壁纸不是非常的清晰的(系统自带的壁纸是 5120 × 3684)。
这里制作的自动化脚本是每次开机启动的,如果一天开机好几次的话,脚本会自带检测是否已经下载过图片,从而不会重复下载。
战前准备
MAC 中自带的 Automator
充满智慧的大脑
战斗开始
1、首先我们知道 Bing 图片是有一个接口的,也就是 https://cn.bing.com/HPImageArchive.aspx?format=js&n=1 ,他的主要内容如下,这里我们需要的是第 7 行 url,也就是图片的地址,所以在脚本中只要拉这个 url 地址即可实现需求。
{ images: [ { startdate: "20180315", fullstartdate: "201803151600", enddate: "20180316", url: "/az/hprichbg/rb/WolongPanda_ZH-CN10957042976_1920x1080.jpg", urlbase: "/az/hprichbg/rb/WolongPanda_ZH-CN10957042976", copyright: "卧龙国家级自然保护区的大熊猫,中国四川 (© Lynn M. Stone/Minden Pictures)", copyrightlink: "http://www.bing.com/search?q=%E5%A4%A7%E7%86%8A%E7%8C%AB&form=hpcapt&mkt=zh-cn", quiz: "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20180315_WolongPanda%22&FORM=HPQUIZ", wp: false, hsh: "6fa3921773323a6e7f0f45447e548f91", drk: 1, top: 1, bot: 1, hs: [ ] } ], tooltips: { loading: "正在加载...", previous: "上一个图像", next: "下一个图像", walle: "此图片不能下载用作壁纸。", walls: "下载今日美图。仅限用作桌面壁纸。" } }
2、bing-wallpaper 是一个可以从 Bing 下载当天最新图片并将其保存到目录的脚本。
#!/usr/bin/env bash # shellcheck disable=SC1117 readonly SCRIPT=$(basename "$0") readonly VERSION='0.4.0' readonly RESOLUTIONS=(1920x1200 1920x1080 800x480 400x240) usage() { cat <<EOF Usage: $SCRIPT [options] $SCRIPT -h | --help $SCRIPT --version Options: -f --force Force download of picture. This will overwrite the picture if the filename already exists. -s --ssl Communicate with bing.com over SSL. -q --quiet Do not display log messages. -n --filename <file name> The name of the downloaded picture. Defaults to the upstream name. -p --picturedir <picture dir> The full path to the picture download dir. Will be created if it does not exist. [default: $HOME/Pictures/bing-wallpapers/] -r --resolution <resolution> The resolution of the image to retrieve. Supported resolutions: ${RESOLUTIONS[*]} -w --set-wallpaper Set downloaded picture as wallpaper (Only mac support for now). -h --help Show this screen. --version Show version. EOF } print_message() { if [ ! "$QUIET" ]; then printf "%sn" "${1}" fi } # Defaults PICTURE_DIR="$HOME/Pictures/bing-wallpapers/" RESOLUTION="1920x1080" # Option parsing while [[ $# -gt 0 ]]; do key="$1" case $key in -r|--resolution) RESOLUTION="$2" shift ;; -p|--picturedir) PICTURE_DIR="$2" shift ;; -n|--filename) FILENAME="$2" shift ;; -f|--force) FORCE=true ;; -s|--ssl) SSL=true ;; -q|--quiet) QUIET=true ;; -h|--help) usage exit 0 ;; -w|--set-wallpaper) SET_WALLPAPER=true ;; --version) printf "%sn" $VERSION exit 0 ;; *) (>&2 printf "Unknown parameter: %sn" "$1") usage exit 1 ;; esac shift done # Set options [ $QUIET ] && CURL_QUIET='-s' [ $SSL ] && PROTO='https' || PROTO='http' # Create picture directory if it doesn't already exist mkdir -p "${PICTURE_DIR}" # Parse bing.com and acquire picture URL(s) read -ra urls < <(curl -sL $PROTO://www.bing.com | grep -Eo "url:'.*?'" | sed -e "s/url:'([^']*)'.*/$PROTO://bing.com1/" | sed -e "s/\//g" | sed -e "s/([[:digit:]]*x[[:digit:]]*)/$RESOLUTION/") for p in "${urls[@]}"; do if [ -z "$FILENAME" ]; then filename=$(echo "$p"|sed -e "s/.*/(.*)/1/") else filename="$FILENAME" fi if [ $FORCE ] || [ ! -f "$PICTURE_DIR/$filename" ]; then print_message "Downloading: $filename..." curl $CURL_QUIET -Lo "$PICTURE_DIR/$filename" "$p" else print_message "Skipping: $filename..." fi done if [ $SET_WALLPAPER ]; then /usr/bin/osascript<<END tell application "System Events" to set picture of every desktop to ("$PICTURE_DIR/$filename" as POSIX file as alias) END fi
3、在脚本的第 39-40 行,是设置图片的保存位置以及图片的像素。这里默认的是最高像素,保存的位置为 /Pictures/bing-wallpapers/ 这个文件夹中,下图是这段时间我电脑里拉到的一些图片。
4、将修改好的脚本添加到 Automator 的工作流程中,左边选择“运行 Shell 脚本”
5、将保存好的工作流程添加到“登录项”中,从而实现开机自动运行
6、最后,我们设置桌面背景,添加壁纸所在的文件夹,然后再勾选更改图片的频率为每天