OSX 每天自动获取 Bing 壁纸

来自:互联网
时间:2018-07-26
阅读:
免费资源网 - https://freexyz.cn/

自从换了 mac 之后,直观的感觉是桌面变的更空旷了(本来我就不喜欢在桌面放东西)。所以,壁纸成了装点桌面的唯一工具。正好 Bing 的背景图片每天都会换一张,并且几乎每张图片都让人感觉非常大气,所以就萌生了用 Bing 图片做壁纸的想法(话说让我知道 Bing 每天都会换背景图,还是因为之前做 Kratos 的时候有小伙伴提出网页的背景图能不能调用 Bing 的接口)。我先看了一下 Apple Store 里面有没有这种 App,果不其然还真有,但是这价格的话,emmmmm 算了还是自己整吧。

利弊分析

Bing 的图片有 4 种像素,分别是 1920x1200、1920x1080、800x480、400x240,而 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 "%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/ 这个文件夹中,下图是这段时间我电脑里拉到的一些图片。

5aef1c704a5fb.png

4、将修改好的脚本添加到 Automator 的工作流程中,左边选择“运行 Shell 脚本”

5aef1c70a8b1f.png

5、将保存好的工作流程添加到“登录项”中,从而实现开机自动运行

5aef1c70e8a26.png

6、最后,我们设置桌面背景,添加壁纸所在的文件夹,然后再勾选更改图片的频率为每天

5aef1c712b4ec.png

免费资源网 - https://freexyz.cn/
返回顶部
顶部