{"id":3525,"date":"2017-08-12T20:27:04","date_gmt":"2017-08-12T12:27:04","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=3525"},"modified":"2017-08-12T20:27:04","modified_gmt":"2017-08-12T12:27:04","slug":"gists%e6%96%87%e7%ab%a0%e4%b8%8b%e8%bd%bd%e5%b7%a5%e5%85%b7","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/3525.html","title":{"rendered":"gists\u6587\u7ae0\u4e0b\u8f7d\u5de5\u5177"},"content":{"rendered":"<p>=Start=<\/p>\n<h4 id=\"id-\u6a21\u677f-\u7f18\u7531\uff1a\">\u7f18\u7531\uff1a<\/h4>\n<p>\u65e5\u5e38\u4f7f\u7528\u9700\u8981<\/p>\n<h4 id=\"id-\u6a21\u677f-\u6b63\u6587\uff1a\">\u6b63\u6587\uff1a<\/h4>\n<h5 id=\"id-\u6a21\u677f-\u53c2\u8003\u89e3\u7b54\uff1a\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n<pre class=\"lang:default decode:true\">#!\/usr\/bin\/env python\r\n# coding=utf-8\r\n# Date: 20170601\r\n\r\nimport sys, os, time, json\r\nimport errno\r\nimport argparse\r\nimport requests\r\nreload(sys)\r\nsys.setdefaultencoding('utf-8')\r\n\r\nclass bcolors:\r\n    HEADER = '\\033[95m'\r\n    OKBLUE = '\\033[94m'\r\n    OKGREEN = '\\033[92m'\r\n    WARNING = '\\033[93m'\r\n    FAIL = '\\033[91m'\r\n    ENDC = '\\033[0m'\r\n    BOLD = '\\033[1m'\r\n    UNDERLINE = '\\033[4m'\r\n\r\ndef make_sure_path_exists(path):\r\n    try:\r\n        os.makedirs(path)\r\n    except OSError as exception:\r\n        if exception.errno != errno.EEXIST:\r\n            raise\r\n\r\ncookie_dict = {}\r\ndef requests_get(url):\r\n    try:\r\n        if cookie_dict:\r\n            r = requests.get(url, cookies=cookie_dict)\r\n        else:\r\n            r = requests.get(url)\r\n    except requests.exceptions.RequestException as e:\r\n        return ''\r\n    return r.text\r\n\r\n\r\n# return a list contains all the username's gists\r\ndef gists_list(username):\r\n    result = []\r\n    url_user = 'https:\/\/api.github.com\/users\/{0}\/gists'.format(username)\r\n    url_text = requests_get(url_user)\r\n    user_gists_list = json.loads(url_text)\r\n    if isinstance(user_gists_list, dict):\r\n        return []\r\n    for item in user_gists_list:\r\n        # print item.get('id'), item.get('description', '')\r\n        result.append({item.get('id'): item.get('description', '')})\r\n    return result\r\n\r\n# download the specify gists id into file\r\n# PS: if file is too big(&gt;10M), just print file info and don't download\r\ndef gists_download(id):\r\n    url_gists = 'https:\/\/api.github.com\/gists\/{0}'.format(id)\r\n    url_text = requests_get(url_gists)\r\n    gists_info = json.loads(url_text)\r\n    if gists_info.get('message', ''):\r\n        print '{0}{1}{2}\\tNot Found'.format(bcolors.FAIL, url_gists, bcolors.ENDC)\r\n        return\r\n    files = gists_info.get('files')\r\n    print 'gists {0} has {1} files in total!'.format(id, len(files))\r\n    for item in files:\r\n        # print files[item].get('filename'), files[item].get('size'), files[item].get('raw_url')\r\n        if int(files[item].get('size')) &gt; 1024 * 1024 * 10:\r\n            print files[item].get('filename'), files[item].get('size'), files[item].get('raw_url')\r\n            continue\r\n        if not os.path.exists(id):\r\n            os.makedirs(id)\r\n        with open('.\/{0}\/{1}'.format(id, files[item].get('filename')), 'wb') as fp:\r\n            fp.write(requests_get(files[item].get('raw_url')))\r\n        print files[item].get('filename'), files[item].get('size'), files[item].get('raw_url')\r\n    return\r\n\r\ndef main():\r\n    parse = argparse.ArgumentParser()\r\n    parse.add_argument('-i', '--id', required=True, type=str, help='Specify the gists id')\r\n    parse.add_argument('-u', '--user', type=str, help='Specify the GitHub username')\r\n    args = parse.parse_args()\r\n\r\n    if len(sys.argv) &lt;= 1:\r\n        parse.print_help()\r\n        sys.exit(0)\r\n\r\n    if args.id:\r\n        if args.user is not None:  #\u56e0\u4e3a\u4e3aargs.user\u8bbe\u7f6e\u4e86\u300ctype=str\u300d\uff0c\u6240\u4ee5\u300cargs.user\u7684\u503c\u4e3aNone\/\u8bbe\u5b9a\u7684\u5b57\u7b26\u4e32\u7684\u503c\u300d\r\n            for item in gists_list(args.user):\r\n                if args.id in item:\r\n                    print '{0}{1}{2}'.format(bcolors.OKGREEN, item, bcolors.ENDC)\r\n                else:\r\n                    print item\r\n            gists_download(args.id)\r\n        else:\r\n            gists_download(args.id)\r\n\r\nif __name__ == '__main__':\r\n    time_start = time.time()\r\n    try:\r\n        main()\r\n    except KeyboardInterrupt:\r\n        print 'Killed by user'\r\n        sys.exit(0)\r\n    print \"\\nSpend {0} seconds.\\n\".format(time.time() - time_start)<\/pre>\n<h5 id=\"id-\u6a21\u677f-\u53c2\u8003\u94fe\u63a5\uff1a\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<ul>\n<li><a href=\"https:\/\/ixyzero.com\/blog\/archives\/2221.html\">\u5982\u4f55\u4e0b\u8f7dgists\u7684\u6587\u4ef6\uff1f<\/a><\/li>\n<\/ul>\n<h5>\u66f4\u591a\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<ul>\n<li><a href=\"https:\/\/github.com\/mazen160\/GithubCloner\">\u4e0b\u8f7dGitHub\u4e0a\u300c\u7528\u6237\u300d\u6216\u300c\u7ec4\u7ec7\u300d\u7684\u4ee3\u7801\u4ed3\u5e93<\/a><\/li>\n<\/ul>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u65e5\u5e38\u4f7f\u7528\u9700\u8981 \u6b63\u6587\uff1a \u53c2\u8003\u89e3\u7b54\uff1a #!\/usr\/bin\/env python # co [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,7,12],"tags":[522,365,8],"class_list":["post-3525","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-programing","category-tools","tag-gists","tag-github","tag-python"],"views":2328,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=3525"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3525\/revisions"}],"predecessor-version":[{"id":3526,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3525\/revisions\/3526"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=3525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=3525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=3525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}