
自从换了 mac 之后,直观的感觉是桌面变的更空旷了(本来我就不喜欢在桌面放东西)。所以,壁纸成了装点桌面的唯一工具。正好 Bing 的背景图片每天都会换一张,并且几乎每张图片都让人感觉非常大气,所以就萌生了用 Bing 图片做壁纸的想法(话说让我知道 Bing 每天都会换背景图,还是因为之前做 Kratos 的时候有小伙伴提出网页的背景图能不能调用 Bing 的接口 )。我先看了一下 Apple Store 里面有没有这种 App,果不其然还真有,但是这价格的话,emmmmm 算了还是自己整吧。
利弊分析
Bing 的图片有 4 种像素,分别是 1920×1200、1920×1080、800×480、400×240,而 mac 可以支持到 2880 x 1800,所以在视觉上看着壁纸不是非常的清晰的(系统自带的壁纸是 5120 × 3684)。
这里制作的自动化脚本是每次开机启动的,如果一天开机好几次的话,脚本会自带检测是否已经下载过图片,从而不会重复下载。
战前准备
- MAC 中自带的 Automator
- bing-wallpaper 脚本
- 充满智慧的大脑
战斗开始
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 "%s\n" "${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 "%s\n" $VERSION
exit 0
;;
*)
(>&2 printf "Unknown parameter: %s\n" "$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.com\1/" | \
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、最后,我们设置桌面背景,添加壁纸所在的文件夹,然后再勾选更改图片的频率为每天
