GitAutoupdater.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import requests
  4. from urllib.request import urlretrieve
  5. import os,sys
  6. from argparse import ArgumentParser
  7. import json
  8. g_config = None
  9. config_path = os.path.dirname(os.path.realpath(sys.argv[0]))+'\config.json'
  10. def reporthook(count, block_size, total_size):
  11. """
  12. 函数名可以自定义,参数 count 表示当前已经下载的数据块数目,
  13. block_size 表示每个数据块的大小,total_size 表示下载目标的总大小
  14. """
  15. percent = int(count * block_size * 100 / total_size)
  16. print('\r', f"正在下载:{count * block_size} / {total_size} bytes ({percent}%)", end='', flush=True)
  17. def http_down(project, down_list=[], proxy=""):
  18. git_api = "https://api.github.com/repos/{}/releases/latest".format(project)
  19. git_releases="{}/releases/download/".format(project)
  20. print("获取", git_api)
  21. requests.packages.urllib3.disable_warnings()
  22. r = requests.get(git_api, verify=False) #不检查证书
  23. # print(soup)
  24. latest_version = r.json()["tag_name"]
  25. print('Latest version:', latest_version)
  26. git_down_url=proxy+git_releases+latest_version+"/"
  27. print('git_down_url:', git_down_url)
  28. if len(down_list):
  29. if not os.path.exists(latest_version):
  30. os.makedirs(latest_version)
  31. for i in down_list:
  32. version_str = str(latest_version).replace("v", "").replace("V", "")
  33. i = str(i).replace("[version]", version_str)
  34. print('下载 {}...'.format(i))
  35. urlretrieve(git_down_url+i, latest_version+"/"+i, reporthook)
  36. print("\r")
  37. print("下载完成")
  38. if __name__ == "__main__":
  39. print(config_path)
  40. parser = ArgumentParser()
  41. parser.add_argument("n", help="项目,譬如 yisier/nps")
  42. parser.add_argument("l", help="下载列表,譬如 windows_amd64_client.tar.gz,windows_amd64_server.tar.gz, [version]可代替版本")
  43. parser.add_argument("-p", default=False, help="代理,譬如 https://ghproxy.com/https://github.com/")
  44. args = parser.parse_args()
  45. project = str(args.n)
  46. down_list = list_str = str(args.l).split(",")
  47. proxy = "https://github.com/"
  48. if args.p:
  49. proxy = str(args.p)
  50. g_config = {}
  51. if os.path.exists(config_path):
  52. with open(config_path) as file:
  53. g_config = json.load(file)
  54. if 'proxy' in g_config and not args.p: # args.p优先
  55. proxy = g_config['proxy']
  56. http_down(project, down_list, proxy)