用python实现下载必应壁纸并自动更换壁纸的功能
来源:互联网 发布:电台 知乎 编辑:程序博客网 时间:2024/05/04 10:34
用python实现下载必应壁纸并自动更换壁纸的功能
动机
Windows下的必应桌面(Bing Desktop)提供了质量非常高的壁纸,但是集成了太多无用的功能,同时还有一些让人恼火的bug。鉴于这种情况,我决定自己动手实现一个纯净版的必应桌面,只有自动下载和更换壁纸的功能,包括GUI等等在内烦人的东西一概没有。
数据包分析
首先要搞清楚必应这些图片是从哪里下载的,有没有身份验证等等。于是我用wireshark对必应桌面客户端的网络通信进行了分析。
观察之后,我发现在我进行统计的时间内,我的电脑总共跟15个服务器进行了通信。结合对必应桌面的了解,下载的内容应该包括两部分:图片和对应的xml文件。我的电脑上xml文件的总大小为150k左右,找到通信数据量为150k左右的服务器,这就是必应下载图片信息的服务器。用同样的方法可以找到下载图片的服务器。
简单观察一下通信内容就可以发现,必应桌面的逻辑非常简单:首先从记录图片信息的服务器A查询可供下载的图片信息,在电脑上保存为xml格式的文件;随后根据每个xml提供的信息从图片服务器B上下载对应的图片。
查询图片信息的url为:http://az517271.vo.msecnd.net/TodayImageService.svc/HPImageArchive?mkt=zh-cn&idx=0,其中mkt是代表国家的参数,除了中国之外其他的参数我没有试出来;idx是从0到8的整数,分别对应一张图片。
xml文件解析
前面提到我们从服务器A上首先得到的是xml文件,这个xml文件中包含了图片的名称、下载链接、文字介绍等等等等信息,不过我们只需要链接就可以下载了。这里提供的文件是jpg格式。
将下载图片设为桌面壁纸
将图片保存之后还需要将其设为壁纸。在Ubuntu及其衍生发行版中,将图片设为壁纸的命令是:
gsettings set org.gnome.desktop.background picture-uri "/home/myname/bing.jpg"
而在Windows中,设置壁纸需要修改注册表,比较麻烦。我一开始使用的是python内置的_winreg模块,发现其十分不给力,换成pywin32扩展包之后轻松解决问题。这里的命令是:
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, "C:\bing.jpg", 1+2)
设置自动运行
必应桌面方便的地方就在于自动更新壁纸,因此我们也要实现这个功能,我们可以利用操作系统的计划任务来实现。
在Linux下,计划任务是通过守护进程cron实现的。假设我们已经写好的脚本是change_wallpaper.py,编辑crontab,输入
crontab -e
在crontab中加一行
0 */2 * * * python /<some absolute path>/change_wallpaper.py
前面的5个数字分别表示分钟、小时、一月中的日期、月、一周中的日期,*表示不重要,*/2表示每2小时(分钟/月)执行一次;最后一个选项是我们要执行的命令。
保存退出之后重启cron进程
sudo restart cron
这样系统就会在我们指定的时间自动下载并更换壁纸。
在Windows下计划任务的配置相对简单,可以通过GUI完成。值得一提的是命令的写法。我一开始在计划任务中执行的命令是
python C:\change_wallpaper.py
然后发现每次执行计划任务都会弹出一个命令行窗口,很是烦人。求助Google之后我创建了一个run.bat脚本,里面的内容为
start /min python %~dp0change_wallpaper.py
其中start /min
表示让程序在后台(最小化)运行,%~dp0
在bat脚本中表示脚本文件所处的目录。将run.bat与change_wallpaper.py放在同一目录中,就可以避免脚本中出现绝对路径。这时只需在计划任务中执行run.bat即可。
C:\run.bat
到这里,我们就实现了自动必应桌面自动运行、下载和更换壁纸的功能。
项目代码
代码托管在github,地址为https://github.com/rorschachhb/cleanBingDesktop。需要注意的是,在Windows上运行之前要先安装pywin32扩展包。
- 用python实现下载必应壁纸并自动更换壁纸的功能
- Ubuntu16.04自动更换必应壁纸
- Python_必应每日壁纸更换
- service实现自动更换壁纸
- Python抓取每日必应壁纸
- SyncWall-带有多种强大功能的壁纸自动更换软件
- Python_必应每日壁纸更换(Python2.7)
- 项目:自动更换壁纸
- ubuntu自动更换壁纸
- 爬虫下载壁纸,并设置壁纸自动切换
- 关于自动更换xp桌面的壁纸。
- 简易的壁纸更换
- 实现壁纸更换的示范代码
- 自动更换壁纸vb代码
- linux自动更换壁纸脚本
- python实现自动保存windows聚焦壁纸
- python批量下载壁纸
- python爬虫之壁纸的下载
- SICP 习题 (2.19) 解题总结:重写零钱兑换程序
- 笑话故事---成人故事
- 9.4 Git 内部原理 - Packfiles
- nyoj 取石子(八)(威佐夫博弈,多种情况)
- cookie与session区别
- 用python实现下载必应壁纸并自动更换壁纸的功能
- 基于ibcurl的跨平台多线程断点续传下载库
- Linux下Nginx+Tomcat整合的安装与配置
- 9.5 Git 内部原理 - The Refspec
- Same Tree
- [Python02]-Python集合的使用
- 9.6 Git 内部原理 - 传输协议
- T4模板基础
- xapic , x2apic