51Testing软件测试论坛

标题: Python小技能---下载壁纸并自动更换桌面 [打印本页]

作者: lsekfe    时间: 2023-2-8 11:39
标题: Python小技能---下载壁纸并自动更换桌面
壁纸 API
  我们这里使用一个开源在 GitHub 上的必应壁纸 API 作为壁纸的来源
  https://github.com/zenghongtu/bing-wallpaper

  从 readme 当中我们可以知道,在 web 应用中我只需要使用如下引用即可
  1.   <img src="https://bingw.jasonzeng.dev/?w=800"/>
复制代码


实在是太方便了
  接口使用
  下面我们来看下该 API 的具体调用规则
  1、传入 resolution 参数可以指定壁纸图像的分辨率。默认为1920x1080,可选值如下:
  1.  UHD
  2.   1920x1200
  3.   1920x1080
  4.   1366x768
  5.   1280x768
  6.   1024x768
  7.   800x600
  8.   800x480
  9.   768x1280
  10.   720x1280
  11.   640x480
  12.   480x800
  13.   400x240
  14.   320x240
  15.   240x320
复制代码


UHD 就是高清,图片比较大。
  2、传入 index 可以获取某一天的图片,0 表示今天,1 表示昨天,以此类推,index=random 表示随机一天。
  3、传入 date 可以获取从某一天到今天的图片,比如 data=20210401。
  4、传入 w 和 h 可以指定图片的宽度和高度。
  5、传入 qlt 可以指定图片的质量,取值范围是 0 到 100。
  举个例子
  我们直接在浏览器输入如下地址
  1.   http://bingw.jasonzeng.dev?resolutinotallow=UHD&index=random&w=1000&format=json
复制代码


Output:
  1. {
  2.    "startdate": "20220105",
  3.    "copyright": "Plate-billed mountain toucan in Bellavista Cloud Forest Reserve, Ecuador (? Tui De Roy/Minden Pictures)",
  4.    "urlbase": "/th?id=OHR.MountainToucan_EN-US7120632569",
  5.    "title": "A plate-billed mountain toucan",
  6.    "url": "https://www.bing.com/th?id=OHR.MountainToucan_EN-US7120632569_UHD.jpg&w=1000"
  7.   }
复制代码


可以说是相当方便了。
  也可以直接在 css 当中使用。
  1. background-image: url(https://bingw.jasonzeng.dev/?index=random);
  2.   height: 100%;
  3.   background-position: center;
  4.   background-repeat: no-repeat;
  5.   background-size: cover;
复制代码


Python 调用
  下面我们看一下如何通过 Python 进行调用,也很简单
  1.  import requests
  2.   def get_wallpaper():
  3.       for i in range(30):
  4.           url = "https://bingw.jasonzeng.dev?resolutinotallow=UHD&index=%s" % str(i)
  5.           print(url)
  6.           res = requests.get(url)
  7.           with open("wallpaper/" + "%s.jpg" % str(i),"wb") as w:
  8.               w.write(res.content)
  9.   if __name__ == "__main__":
  10.       get_wallpaper()
复制代码


上面代码就是获取前30张壁纸,我们可以修改range的参数,来获取不同数量的壁纸
  抓取效果如下:

  更换桌面
  壁纸有了,下面我们就来进行自动切换桌面壁纸,这里使用win32con和win32gui操作桌面壁纸
  1. def windows_img(paper_path):
  2.       k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control panel\\Desktop", 0, win32con.KEY_SET_VALUE) # 在注册表中写入属性值
  3.       win32api.RegSetValueEx(k, "wapaperStyle", 0, win32con.REG_SZ,"2")  # 0 代表桌面居中 2 代表拉伸桌面
  4.       win32api.RegSetValueEx(k, "Tilewallpaper", 0, win32con.REG_SZ,"0")
  5.       win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, paper_path, win32con.SPIF_SENDWININICHANGE) # 刷新桌面
复制代码


然后就是从已经下载的壁纸当中选择图片
  1. def change_wallpaper():
  2.       pic_list = os.listdir("wallpaper")  # 得到文件路径下的图片,列表类型
  3.       i=0
  4.       print(pic_list)
  5.       while True:
  6.           pic = "wallpaper"+'\{}'.format(pic_list[i])
  7.           abspath_pic = os.path.abspath(pic)
  8.           windows_img(abspath_pic)
  9.           print(abspath_pic)
  10.           time.sleep(1000)  # 设置壁纸更换间隔
  11.           i += 1
  12.           if i==len(pic_list):  # 如果是最后一张图片,则重新到第一张
  13.               i=0
  14.   if __name__ == '__main__':
  15.       change_wallpaper()
复制代码


这样一个简单的自动切换桌面壁纸的工具就完成了,快来尝试一下吧!











欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2