Ultima attività 1772610543

doracoin's Avatar doracoin ha revisionato questo gist 1772610538. Vai alla revisione

1 file changed, 10 insertions

start-download.sh(file creato)

@@ -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 ha revisionato questo gist 1721181748. Vai alla revisione

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 ha revisionato questo gist 1699432588. Vai alla revisione

Nessuna modifica

doracoin ha revisionato questo gist 1699432347. Vai alla revisione

Nessuna modifica

doracoin ha revisionato questo gist 1699432328. Vai alla revisione

1 file changed, 115 insertions

download-bing-py3.py(file creato)

@@ -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()
Più nuovi Più vecchi