原创

通过shell脚本下载必应每日一图

最近部署了一个开源的静态html网址导航页面,想要把背景图片换成动态的,在网上搜了一下后发现必应的每日一图会每天更新一张精美的图片,所以决定通过shell脚本去请求接口下载图片,记录一下供各位参考。

一、必应每日一图接口

接口地址:

https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN

接口说明:

  • format:返回数据格式,js为返回json格式
  • idx:请求图片截止天数,0为当天
  • n:返回请求数量,1为1张
  • mkt:地区,zh-CN为中国

我们请求一下接口:

可以看到返回的数据,其中images下面的url就是图片的地址,我们在前面加上https://cn.bing.com就可以直接下载图片了,示例如下:

https://cn.bing.com/th?id=OHR.MeerkatManor_ZH-CN2486051161_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp

二、安装命令行json处理器jq工具

jq 是一个轻量级的命令行 JSON 解析器,请求上面接口我们发现返回的数据是json格式的,所以通过安装jq工具去处理json数据,因为我们是使用centos系统,可以直接使用yum安装:

yum install jq

或者直接去官方下载:

jq官网地址:https://jqlang.github.io/jq/

jq的GitHub地址:https://github.com/jqlang/jq

三、编写shell脚本

脚本中FILEPWD为图片保存地址,bg.jpg为背景图片名称:

#!/bin/bash
LOGNAME=/html/files/bing.log
FILEPWD=/html/files/
BAKNAME=$(date -d "yesterday" +"%Y%m%d").jpg
NOWTIME=$(date "+%Y-%m-%d %H:%M:%S")

echo "===================================================================================" >>$LOGNAME
mv ${FILEPWD}bg.jpg ${FILEPWD}${BAKNAME}
echo "${NOWTIME} 备份bg.jpg为${BAKNAME}"  >>$LOGNAME
bingjson=$(curl -s "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN")
echo "${NOWTIME} 请求必应每日一图接口:${bingjson}" >>$LOGNAME
bingurl=$(echo $bingjson|jq '.images'|jq '.[0].url'|sed 's/^"\(.*\)"$/\1/')
echo "${NOWTIME} 通过jq获取json中url值:${bingurl}" >>$LOGNAME
bingimgurl="https://cn.bing.com"$bingurl
echo "${NOWTIME} 拼接图片地址:${bingimgurl}" >>$LOGNAME
wget -O ${FILEPWD}bg.jpg $bingimgurl
echo "${NOWTIME} 下载图片到本地并保存为bg.jpg" >>$LOGNAME
echo "===================================================================================" >>$LOGNAME

四、设置定时任务

通过crontab -e编辑定时任务,增加一下任务:

1 3 * * * sh /html/files/bing.sh >>/html/files/bing.log 2>&1

到时间了我们看一下日志:

图片已经下载下来了,然后就可以访问网址导航,背景图片就会每天自动变化了。


扩展说明:

1.通过该接口请求的图片都是1920x1080大小的。

正文到此结束
温馨提示:
本文最后更新于 2024年07月03日,已超过 141 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
本文目录