Última atividade 1701134026

Revisão 803f2e5d0d8669b68bb9c09df578742aae9eb0a5

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