用Python下载壁纸并自动更换桌面

简介: 用Python下载壁纸并自动更换桌面

今天我们继续用Python写一个小工具,一方面实现壁纸自由,另一方面实现桌面更换自由!

壁纸 API

我们这里使用一个开源在 GitHub 上的必应壁纸 API 作为壁纸的来源

https://github.com/zenghongtu/bing-wallpaper

从 readme 当中我们可以知道,在 web 应用中我只需要使用如下引用即可

<img src="https://bingw.jasonzeng.dev/?w=800"/>

实在是太方便了

接口使用

下面我们来看下该 API 的具体调用规则

  • 1、传入 resolution 参数可以指定壁纸图像的分辨率。默认为1920x1080,可选值如下:
UHD
1920x1200
1920x1080
1366x768
1280x768
1024x768
800x600
800x480
768x1280
720x1280
640x480
480x800
400x240
320x240
240x320

UHD 就是高清,图片比较大。

  • 2、传入 index 可以获取某一天的图片,0 表示今天,1 表示昨天,以此类推,index=random 表示随机一天。
  • 3、传入 date 可以获取从某一天到今天的图片,比如 data=20210401。
  • 4、传入 w 和 h 可以指定图片的宽度和高度。
  • 5、传入 qlt 可以指定图片的质量,取值范围是 0 到 100。

举个例子

我们直接在浏览器输入如下地址

http://bingw.jasonzeng.dev?resolution=UHD&index=random&w=1000&format=json

Output:

{
 "startdate": "20220105",
 "copyright": "Plate-billed mountain toucan in Bellavista Cloud Forest Reserve, Ecuador (© Tui De Roy/Minden Pictures)",
 "urlbase": "/th?id=OHR.MountainToucan_EN-US7120632569",
 "title": "A plate-billed mountain toucan",
 "url": "https://www.bing.com/th?id=OHR.MountainToucan_EN-US7120632569_UHD.jpg&w=1000"
}

可以说是相当方便了

也可以直接在 css 当中使用

background-image: url(https://bingw.jasonzeng.dev/?index=random);
height: 100%;
background-position: center;
background-repeat: no-repeat;
background-size: cover;

Python 调用

下面我们看一下如何通过 Python 进行调用,也很简单

import requests
def get_wallpaper():
    for i in range(30):
        url = "https://bingw.jasonzeng.dev?resolution=UHD&index=%s" % str(i)
        print(url)
        res = requests.get(url)
        with open("wallpaper/" + "%s.jpg" % str(i),"wb") as w:
            w.write(res.content)
if __name__ == "__main__":
    get_wallpaper()

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

抓取效果如下

更换桌面

壁纸有了,下面我们就来进行自动切换桌面壁纸,这里使用win32conwin32gui操作桌面壁纸

def windows_img(paper_path):
    k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control panel\\Desktop", 0, win32con.KEY_SET_VALUE) # 在注册表中写入属性值
    win32api.RegSetValueEx(k, "wapaperStyle", 0, win32con.REG_SZ,"2")  # 0 代表桌面居中 2 代表拉伸桌面
    win32api.RegSetValueEx(k, "Tilewallpaper", 0, win32con.REG_SZ,"0")
    win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, paper_path, win32con.SPIF_SENDWININICHANGE) # 刷新桌面

然后就是从已经下载的壁纸当中选择图片

def change_wallpaper():
    pic_list = os.listdir("wallpaper")  # 得到文件路径下的图片,列表类型
    i=0
    print(pic_list)
    while True:
        pic = "wallpaper"+'\{}'.format(pic_list[i])
        abspath_pic = os.path.abspath(pic)
        windows_img(abspath_pic)
        print(abspath_pic)
        time.sleep(1000)  # 设置壁纸更换间隔
        i += 1
        if i==len(pic_list):  # 如果是最后一张图片,则重新到第一张
            i=0
if __name__ == '__main__':
    change_wallpaper()

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

好了,今天的分享就到这里,喜欢就点个赞吧~

相关文章
|
10天前
|
Python
下载python所有的包 国内地址
下载python所有的包 国内地址
|
2天前
|
网络协议 Python
|
8天前
|
API Python
使用Python requests库下载文件并设置超时重试机制
使用Python的 `requests`库下载文件时,设置超时参数和实现超时重试机制是确保下载稳定性的有效方法。通过这种方式,可以在面对网络波动或服务器响应延迟的情况下,提高下载任务的成功率。
28 1
|
26天前
|
存储 缓存 安全
Python案例分享:如何实现文件的上传下载
Python案例分享:如何实现文件的上传下载
96 6
|
7天前
|
UED Python
Python requests库下载文件时展示进度条的实现方法
以上就是使用Python `requests`库下载文件时展示进度条的一种实现方法,它不仅简洁易懂,而且在实际应用中非常实用。
20 0
|
2月前
|
JSON JavaScript API
用Python编写小工具下载OSM路网数据
用Python编写小工具下载OSM路网数据
|
2月前
|
前端开发 数据库 Python
用Python轻松开发数据库取数下载工具
用Python轻松开发数据库取数下载工具
|
2月前
|
Python
Python 下载 html 中的 图片
Python 下载 html 中的 图片
25 2
|
2月前
|
API 网络安全 开发工具
【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)
【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)
|
2月前
|
数据处理 Python
解锁Python多线程编程魔法,告别漫长等待!让数据下载如飞,感受科技带来的速度与激情!
【8月更文挑战第22天】Python以简洁的语法和强大的库支持在多个领域大放异彩。尽管存在全局解释器锁(GIL),Python仍提供多线程支持,尤其适用于I/O密集型任务。通过一个多线程下载数据的例子,展示了如何使用`threading`模块创建多线程程序,并与单线程版本进行了性能对比。实验表明,多线程能显著减少总等待时间,但在CPU密集型任务上GIL可能会限制其性能提升。此案例帮助理解Python多线程的优势及其适用场景。
28 0
下一篇
无影云桌面