Última atividade 1772610543

doracoin's Avatar doracoin revisou este gist 1772610538. Ir para a revisão

1 file changed, 10 insertions

start-download.sh(arquivo criado)

@@ -0,0 +1,10 @@
1 + #!/bin/bash
2 +
3 + # You can make this script run by crontab
4 + # 1 8 * * * /path/to/start-download.sh
5 +
6 + cd `dirname $0`
7 +
8 + python download-bing.py
9 +
10 + cp --preserve=timestamps ./bing_wallpaper/*_1920* ./1080P

doracoin revisou este gist 1721181748. Ir para a revisão

1 file changed, 52 insertions, 60 deletions

download-bing-py3.py

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

doracoin revisou este gist 1699432588. Ir para a revisão

Sem alterações

doracoin revisou este gist 1699432347. Ir para a revisão

Sem alterações

doracoin revisou este gist 1699432328. Ir para a revisão

1 file changed, 115 insertions

download-bing-py3.py(arquivo criado)

@@ -0,0 +1,115 @@
1 + #!/usr/bin/env python
2 + # -*- coding: utf-8 -*-
3 + # Create By Doracoin
4 + # Github: https://github.com/doracoin
5 +
6 + import json
7 + import os
8 + import sys
9 + import urllib.error
10 + import urllib.request
11 +
12 + # 要查询的天数(尽量写大点, 反正最多只能查询到当天和过去7天的)
13 + days = 1
14 + # 超时时间
15 + time_out = 10
16 + # 是否下载全部可能支持的分辨率(大部分图片都有三个分辨率, 1920x1200, 1920x1080, 1366x768, 其中只有1920x1200有水印)
17 + all_px = True
18 + # 默认保存路径
19 + down_dir = "." + os.path.sep + "bing_wallpaper"
20 + # 接口地址
21 + data_url = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n='
22 + bingUrl = "".join([data_url, str(days)])
23 +
24 + for 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 +
53 + def 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 +
71 + def 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 + # 所以此处单独写一个函数方便扩展
100 + def check_base_url(base_url):
101 + base_url = str.replace(base_url, 'th?id=OHR.', '')
102 + return base_url
103 +
104 +
105 + if __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()
Próximo Anterior