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