Utoljára aktív 1772610543

Revízió 5ec7821597275a14b9406dae6689256bb8bc3d7a

download-bing-py3.py Eredeti
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# Create By Doracoin
4# Github: https://github.com/doracoin
5
6import json
7import os
8import sys
9import urllib.error
10import urllib.request
11
12# 要查询的天数(尽量写大点, 反正最多只能查询到当天和过去7天的)
13days = 1
14# 超时时间
15time_out = 10
16# 是否下载全部可能支持的分辨率(大部分图片都有三个分辨率, 1920x1200, 1920x1080, 1366x768, 其中只有1920x1200有水印)
17all_px = True
18# 默认保存路径
19down_dir = "." + os.path.sep + "bing_wallpaper"
20# 接口地址
21data_url = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n='
22bingUrl = "".join([data_url, str(days)])
23
24for i in range(0, len(sys.argv)):
25 if i == len(sys.argv) - 1:
26 key = sys.argv[i]
27 value = ""
28 else:
29 key = sys.argv[i]
30 value = sys.argv[i + 1]
31 # print "key: %s, value: %s" % (key, value)
32 if "-d" == key:
33 days = value
34 bingUrl = "".join([data_url, str(days)])
35 if "-t" == key:
36 ime_out = int(value)
37 if "-a" == key:
38 if "yes" == str(value).lower() or "y" == str(value).lower():
39 all_px = True
40 else:
41 all_px = False
42 if "-p" == key:
43 down_dir = value
44 if i < 2 and ("-h" == key or "-help" == key or "--help" == key):
45 print(" -d (number) 指定查询的天数, 最多只能查询到当天和过去7天的")
46 print(" -t (number) 请求超时时间, 单位:秒")
47 print(" -a (y/n, Y/N) 是否尝试下载所有分辨率的图片, 默认 yes")
48 print(" -p (string) 指定图片保存路径, 注意你的系统的分隔符 '\\' or '/'")
49 print(" -h 显示帮助")
50 exit(0)
51
52
53def download_img(url):
54 try:
55 target_file_path = down_dir + os.path.sep + check_base_url(os.path.basename(url))
56 if not os.path.exists(target_file_path):
57 img_data = urllib.request.urlopen(url).read()
58 fp = open(target_file_path, 'wb')
59 fp.write(img_data)
60 fp.close()
61 print(url, "图片下载成功")
62 else:
63 print(url, "该图片已存在,跳过")
64
65 except urllib.error.HTTPError as err:
66 print(url, "该图片无法下载:", err.code, "" if err.reason is None else err.reason)
67 except OSError:
68 print("发生异常")
69
70
71def get_bing_wallpaper():
72 global res_data
73 if not os.path.exists(down_dir):
74 os.makedirs(down_dir)
75 req = urllib.request.urlopen(url=bingUrl, timeout=time_out)
76 try:
77 res_data = req.read()
78 print("请求壁纸信息成功,正在解析\n")
79 except urllib.error.URLError as err:
80 print("查询接口失败,有可能是网络问题,或是Bing官方关闭了这个接口,请稍后重试", "" if err.reason is None else err.reason)
81 exit()
82 s = json.loads(res_data)
83 img_counts = len(s["images"])
84 for index in range(0, img_counts):
85 # item_url = s["images"][index]["url"] # 默认1920x1080分辨率: 2019-5-6:接口数据变动,该字段不便直接使用
86 item_url_base = s["images"][index]["urlbase"] # 图片baseurl,可以拼接分辨率
87 # 1920x1080
88 download_img("http://www.bing.com" + item_url_base + "_1920x1080.jpg")
89 if all_px:
90 # 1366x768
91 download_img("http://www.bing.com" + item_url_base + "_1366x768.jpg")
92 # 1920x1200 (有水印)
93 download_img("http://www.bing.com" + item_url_base + "_1920x1200.jpg")
94 print("\n")
95
96
97# 该接口返回BaseUrl格式曾经有过变动,
98# 为了防止以后再次遇到变动,
99# 所以此处单独写一个函数方便扩展
100def check_base_url(base_url):
101 base_url = str.replace(base_url, 'th?id=OHR.', '')
102 return base_url
103
104
105if __name__ == '__main__':
106 print("\nWelcome to use <Bing Wallpaper Downloader v1.6>\n")
107 if down_dir.startswith('.'):
108 print("文件将会被下载到: ", os.path.dirname(sys.argv[0]) + down_dir[1:])
109 else:
110 print("文件将会被下载到: ", down_dir)
111 print("是否尝试多分辨率: ", "" if all_px is True else "")
112 print("尝试查询天数: ", days, "\n")
113
114 # 开始下载
115 get_bing_wallpaper()