doracoin gist felülvizsgálása . Revízióhoz ugrás
1 file changed, 10 insertions
start-download.sh(fájl létrehozva)
| @@ -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 gist felülvizsgálása . Revízióhoz ugrás
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 gist felülvizsgálása . Revízióhoz ugrás
Nincsenek változtatások
doracoin gist felülvizsgálása . Revízióhoz ugrás
Nincsenek változtatások
doracoin gist felülvizsgálása . Revízióhoz ugrás
1 file changed, 115 insertions
download-bing-py3.py(fájl létrehozva)
| @@ -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() | |