python实现定时切换壁纸


1.前言

    利用python实现自动化切换壁纸的小程序。

2.功能

    2.1 通过api获取到壁纸。
    2.2 将壁纸下载到本地。
    2.3 定时自动切换壁纸。

3.实现

3.1 分析api

接口的网址:http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

其中的参数idx=0表示今天的图片 1 2 3 4 5...依次是昨日、前日... 数字是-1是明日的数据。

返回的是一个json文件

{
    "images": [{
        "startdate": "20181118",
        "fullstartdate": "201811181600",
        "enddate": "20181119",
        "url": "/az/hprichbg/rb/NarrowsZion_ZH-CN9686302838_1920x1080.jpg",
        "urlbase": "/az/hprichbg/rb/NarrowsZion_ZH-CN9686302838",
        "copyright": "锡安国家公园内的维尔京河,美国犹他州 (© Justinreznick/Getty Images)",
        "copyrightlink": "http://www.bing.com/search?q=%E9%94%A1%E5%AE%89%E5%9B%BD%E5%AE%B6%E5%85%AC%E5%9B%AD&form=hpcapt&mkt=zh-cn",
        "title": "",
        "quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20181118_NarrowsZion%22&FORM=HPQUIZ",
        "wp": true,
        "hsh": "a2d2b96a5c113e78bc7a0f8a508cbf73",
        "drk": 1,
        "top": 1,
        "bot": 1,
        "hs": []
    }],
    "tooltips": {
        "loading": "正在加载...",
        "previous": "上一个图像",
        "next": "下一个图像",
        "walle": "此图片不能下载用作壁纸。",
        "walls": "下载今日美图。仅限用作桌面壁纸。"
    }
}

            

3.2 解析json文件

  • 在python中,json文件就是字典,所以可以从返回的json文件中提取到图片的url。

实例代码:

# 获取json文件
def gain_json():
    # 壁纸接口 idx为0表示是今天的壁纸
    url = "http://cn.bing.com/HPImageArchive.aspx"

    params = {"format": "js", "idx": 0, "n": 1}

    res = requests.get(url=url, params=params)

    return res.json()

# 获取图片的url
def gain_url():

    json_text = gain_json()
    #print(json_text["images"][0]["url"])
    url = "https://cn.bing.com" + json_text["images"][0]["url"]
    r = requests.get(url)
    #print(r.content)
    return url

3.3 保存图片到本地

def download_img():

    img_url = gain_url()
    r = requests.get(img_url)
    print(r.status_code) # 返回状态码
    if r.status_code == 200:
        open('D:\\Image\\'+str(time.strftime("%Y-%m-%d", time.localtime(time.time())))+".jpg", 'wb').write(r.content) # 将内容写入图片
        print("done")
    del r

3.4 实现自动切换壁纸


 while True:
        file = os.listdir(path);  # 打开存储图片文件夹中的图片目录
        filepath = path + random.choice(file);  # 随机选取某张图片,建立绝对地址
        ctypes.windll.user32.SystemParametersInfoW(20, 0, filepath, 0)  # 设置桌面壁纸
        #print(filepath)
        print(filepath)
        time.sleep(30*60);  # 睡眠半个小时

3.5 完整代码


# -*- coding: utf-8 -*-
# @Author  : sumu
# @Date    : 2020/9/28 17:25 
# Software : PyCharm
# E-mail   : xvzhifeng@126.com
# @File    : wallpaper
import requests
import random
import ctypes
import time
import os


def gain_json():
    # 壁纸接口 idx为0表示是今天的壁纸
    url = "http://cn.bing.com/HPImageArchive.aspx"

    params = {"format": "js", "idx": 0, "n": 1}

    res = requests.get(url=url, params=params)

    return res.json()


def gain_url():

    json_text = gain_json()
    #print(json_text["images"][0]["url"])
    url = "https://cn.bing.com" + json_text["images"][0]["url"]
    r = requests.get(url)
    #print(r.content)
    return url


def download_img():

    img_url = gain_url()
    r = requests.get(img_url)
    print(r.status_code) # 返回状态码
    if r.status_code == 200:
        open('D:\\Image\\'+str(time.strftime("%Y-%m-%d", time.localtime(time.time())))+".jpg", 'wb').write(r.content) # 将内容写入图片
        print("done")
    del r

def shift():
    path = "D:\\Image\\";  # 存储图片的文件夹

    download_img()
    while True:
        file = os.listdir(path);  # 打开存储图片文件夹中的图片目录
        filepath = path + random.choice(file);  # 随机选取某张图片,建立绝对地址
        ctypes.windll.user32.SystemParametersInfoW(20, 0, filepath, 0)  # 设置桌面壁纸
        # print(filepath)
        print(filepath)
        time.sleep(5);  # 睡眠半个小时



if __name__ == '__main__':
    path = "D:\\Image\\";  # 存储图片的文件夹

    if not os.path.exists(path):
        os.makedirs(path)
    shift()

4.总结


    4.1 通过requests库get请求获取json文件
    4.2 解析json文件获取图片url
    4.3 下载壁纸
    4.4 利用 SystemParametersInfoW函数实现壁纸的切换

Q.E.D.