centos7获取必应每日壁纸自动更换桌面背景

环境:centos 7.2 gnome桌面  

一.获取图片地址

用火狐的firebug分析http请求,在首页仅找到首页图片的地址(如下图第一条),这并有什么用,图片是每日更新的。 在网上找到了这篇博客,它说这里 http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1  可以获取到图片.进去可以获得一个响应信息 大概是这样

{"images":[{"startdate":"20170421","fullstartdate":"201704211600","enddate":"20170422","url":"/az/hprichbg/rb/ZoomOut_ZH-CN4471982075_1920x1080.jpg",#这里就是所需图片的地址。 
"urlbase":"/az/hprichbg/rb/ZoomOut_ZH-CN4471982075","copyright":"从太空中拍摄到的地球 (© NOAA)","copyrightlink":
"http://www.bing.com/search?q=%E5%9C%B0%E7%90%83&form=hpcapt&mkt=zh-cn",
"quiz":"/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20170421_ZoomOut%22&

  可是为什么在首页没有发现这个地址,我选择首页右下角的下一张图这时候firebug里面可以看到第二张图片的地址 还是没什么用,但是我看到了上一个请求好像有点熟悉 把它复制过来 http://cn.bing.com/HPImageArchive.aspx?format=js&idx=1&n=1&nc=1492870901050&pid=hp&video=1,这就是刚才博客说到那个请求地址没错了,只是多了几个参数 ,猜了一下,那个video=1是代表首页的动态图片,pid=hp是控制copyrightlink的参数nc就不知道了…n可以控制返回图片信息的数量最大为8,idx应该是往回倒天数,format是返回响应信息的格式   现在把响应信息里面的图片地址提取出来,这里用到curl命令 1.先模拟发送请求获取响应的信息

curl 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=9&n=1‘

2.加上grep cut提取出图片链接

'http://www.bing.com/HPImageArchive.aspx?format=js&idx=9&n=1‘ | grep -o 'url\":\"[^\"]*' | cut -d'"' -f3

3.用wget 下载图片,另存为paper.jpg

img=$(curl 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=9&n=1‘ | grep -o 'url\":\"[^\"]*' | cut -d'"' -f3) wget -q "http://www.bing.com${img}" -O  paper.jpg

二.更换桌面背景

gnome桌面换壁纸我在网上找了很久,没有成功,我在文件夹里面右键设置壁纸后在 Picture/Wallpapers 文件夹里面发现了这张壁纸图片,现在只要把下载的图片用来替换掉这张图就可以了…(我没有更好的办法了 假定Picture/Wallpapers 里原图片名叫a.jpg   username为你的用户名

mv paper.jpg a.jpg test -e /home/username/Pictures/Wallpapers/a.jpg && rm /home/username/Picture/Wallpapers/a.jpg mv a.jpg  /home/username/Picture/Wallpapers

三.自动

把以上命令写进脚本changepaper.sh

#!/bin/bash
#This script use to change the wallpaper from internet
#2017/4/22 function bingpaper
{

  img=`curl -s 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=$0&n=1' | grep -o 'url\":\"[^\"]*' | cut -d'"' -f3`wget -q "http://www.bing.com${img}" -O /home/ggbond/shellscript/paper.jpg
}  #download the picture
bingpaper 

mv paper.jpg a.jpg test -e /home/username/Pictures/Wallpapers/a.jpg && rm /home/username/Picture/Wallpapers/a.jpg mv a.jpg  /home/username/Picture/Wallpapers

 

最后放入开机启动就可以了. 或者像这样写function函数

function bingpaper2
{
    RANDOM=$(date +%s)                                                                        
    num=$[$RANDOM%8+1]                                                                        
    img=`curl -s 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=$0&n=8' | grep -o 'url\":\"[^\"]*' | sed -n ${num}p | cut -d'"' -f3` wget -q "http://www.bing.com${img}" -O paper.jpg
}

会从最近八张图里面随机一张,用crontab加入定时任务,可以定时更换壁纸  

四.总结

这个思路是来自知乎上面的一篇文章,他还给图片加了天气水印,主要是拿来练习练习。好像也没什么意思。不过好像也有点意思。

2019/03/08

#!/bin/bash
#This script use to change the wallpaper from internet
#2017/4/2

PATH=/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin
export PATH

# 下载网络壁纸
function downpaper
{
    num=$[$RANDOM%200+1]
    loadUrl=http://www.topit.me/tag/电脑桌面/hot

    if [ "$num" != "1" ];then
        loadUrl=${loadUrl}?p=${num}
    fi
    img=`curl -s $loadUrl |grep -P "http:[^>]*?m.jpg" -o | sed -n $[$RANDOM%20+1]p | sed 's/m.jpg/o.jpg/'`

    if [ "$img" == "" ]; then
    return
    fi
    test -e /home/ggbond/shellscript/test.jpg && rm test.jpg
    wget -q $img -O /home/ggbond/shellscript/test.jpg

}

# 下载必应壁纸
function bingpaper
{
    #    RANDOM=$(date +%s)
    #num=$[$RANDOM%8+1]
    img=`curl -s 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=$0&n=1' | grep -o 'url\":\"[^\"]*' | cut -d '"' -f3`
    #| sed -n ${num}p
    wget -q "http://www.bing.com${img}" -O /Users/ggbond/app/pic/${dateString}.jpg
}

#添加天气水印
function widgify
{
    weather=`curl -s www.baidu.com/s\?wd\=weather`
    temp=$(echo $weather |  grep -oP "twoicon_shishi_title\">[^<]*?<" |grep -oP "\d+")
    status=$(echo $weather | grep -oP "twoicon_shishi_sub\">[^<]*?<" | grep -oE ">([^<])*\(")
    status=${status:1:-1}

    convert /Users/ggbond/app/pic/${dateString}.jpg -resize 1980x -fill skyblue  -pointsize 60 -font 文泉驿等宽正黑-Regular -fill white  -draw "text 1400,350 '$temp℃ /$status'"    -pointsize 40  -draw "text 1400,450    '`LANG=en_US.UTF-8; date "+%a %D"`'" User/ggbond/app/pictoday.jpg

}

# 添加每日故事水印
function info
{
    allinfo=`curl -s -L http://cn.bing.com/cnhp/coverstory/`
    title=`echo $allinfo | cut -d'"' -f8`
    attribute=`echo $allinfo | cut -d'"' -f12`
    para1=`echo $allinfo | cut -d'"' -f16`
    #echo $para1
    convert /Users/ggbond/app/pic/${dateString}.jpg -resize 1980x  -pointsize 35 -font "/Users/ggbond/Library/Fonts/SimHei.ttf" -fill \#E5E5E5 -draw "text 1400,150 '$title'" -pointsize 20  -draw "text 1400,190 '$attribute'"  -pointsize 15  -draw "text 400,980 '`echo $para1 | awk '{gsub("。","\n",$0); print $0}'`'" /Users/ggbond/app/pic/watermark-${dateString}.jpg

    #-fill \#2F4F4F -draw "fill-opacity 0.9 roundrectangle 300,1000 1710,470 10,10"
}

#download the picture
#downpaper

dateString=`date "+%Y-%m-%d"`
#获取必应壁纸
bingpaper
# 添加天气水印,未测
#widgify
# 打上每日故事
info
# mac使用m工具更换壁纸 brew安装
/usr/local/bin/m wallpaper /Users/ggbond/app/pic/watermark-${dateString}.jpg
#centos 更换壁纸
#test -e /home/ggbond/Pictures/Wallpapers/a.jpg && rm /home/ggbond/Pictures/Wallpapers/a.jpg > /dev/null
#mv /home/ggbond/shellscript/a.jpg /home/ggbond/Pictures/Wallpapers/
#cp /home/ggbond/shellscript/test.jpg usr/share/gnome-control-center/pixmaps/test.jpg
0

Powered by Jekyll and Theme by solid