使用 Python 获取必应每日背景图

 Programing  comment

获取必应背景图片的 Python 小程序。

源码

#!/usr/bin/env python3


def get_url():
    # 引入模块
    import requests
    # 原始地址
    short_url = "https://www.bing.com/HPImageArchive.aspx"
    # 内置变量
    idx = "0"      # 今日 0 昨天 1 前天 2 (最大值为 7)
    mkt = "en-US"  # 英文
    # 获取
    response = requests.get(
        url=short_url, params={
            'format': 'js',
            'idx': idx,
            'n': "1",
            'mkt': mkt
        })
    # 返回检查
    if response.status_code == requests.codes.ok:
        global data_title
        global data_copyright
        data = response.json()
        data_url = data["images"][0]["url"]
        data_copyright = data["images"][0]["copyright"]
        data_title = data["images"][0]["title"]
        data_time = data["images"][0]["startdate"]
        global dir_y
        global dir_m
        global dir_d
        dir_y = data_time[0:4]
        dir_m = data_time[4:6]
        dir_d = data_time[6:8]
        global real_url
        global pic_name
        # 返回值类型检查
        if data_url.startswith("/th?id"):
            pic_name = data_url.split('.')[1] + ".jpg"
        else:
            pic_name = data_url
        # 拼接真实链接
        real_url = "https://www.bing.com" + data_url
    else:
        response.raise_for_status()


def mk_dir(path):
    # 引入模块
    import os
    # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符号
    path = path.rstrip("\\")
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    is_exists = os.path.exists(path)
    # 判断结果
    if not is_exists:
        # 如果不存在则创建目录
        os.makedirs(path)
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print('"' + path + '"' + ' Already exists.')
        return False


def down_file(path):
    # 引入模块
    import urllib.request
    import os
    # 判断文件是否存在
    file_name = os.path.basename(pic_name)
    is_exists = os.path.exists(file_name)
    if not is_exists:
        # 如果不存在则下载
        print(file_name + ' Download Success!')
        # 下载传入路径
        f = urllib.request.urlopen(path)
        data = f.read()
        with open(pic_name, "wb") as code:
            code.write(data)
        return True
    else:
        # 如果存在则不下载,并提示已存在
        print('"' + file_name + '"' + ' Already exists.')
        return False


def readme_file(path):
    # 引入模块
    import os
    # 判断文件是否存在
    file_name = path
    is_exists = os.path.exists(file_name)
    if not is_exists:
        # 如果不存在则写入文件
        f = open(path, 'w')
        f.write("#" + " " + str(data_title) + "\n" + "##" + " " + str(data_copyright))
        f.close()
        print(file_name + ' Write Success!')
        return True
    else:
        # 如果存在则判断文件大小
        readme_size = os.path.getsize(path)
        if readme_size > 0 :
            # 如果不为空就报错
            print(file_name + ' Already exists.')
        else:
            # 如果为空就删除重新下载
            os.remove(path)
            f = open(path, 'w')
            f.write("#" + " " + str(data_title) + "\n" + "##" + " " + str(data_copyright))
            f.close()
            print(file_name + ' Error, Rewrite Success!')
        return False


def ch_dir(path):
    # 引入模块
    import os
    # 当前目录
    # current_path = os.getcwd()
    # 切换目录
    os.chdir(path)


# 获取JSON
get_url()
# 定义要创建的目录
target_dir = "Download/" + dir_y + "/" + dir_m + "/" + dir_d
# 创建工作目录
mk_dir(target_dir)
# 切换工作目录
ch_dir(target_dir)
# 下载壁纸
down_file(real_url)
# 写入文本
readme_file('README.md')

小贴士:mkt 参数表明获取的区域,由于必应存在大陆版和国际版,因此图片在部分传统节日时可能会不同。

多言

经过实际使用发现,获取的图片的区域和使用的IP地址有关,中国大陆、香港地址会获取中国市场图片,其他国家和地区的无影响。

回复