[Python 3.X] GitHub Download Counter Code by mmilidoni

tom_mai78101

The Helper Connoisseur / Ex-MineCraft Host
Staff member
Reaction score
1,632
This is a Python 3.X port of mmilidoni's GitHub Download Counter Python 2.X script.

I want to use a counter to check and see how many people have downloaded my releases at GitHub. Unfortunately, GitHub disabled this would-be-expected download stats feature since 3 years ago, due to "bandwidth hog issues, etc.", which is a really lame reason in my opinion.

To use the Python 3.X script, go read his README.md here. It's pretty straightforward and simple, which is something I personally liked.

Code:
#!/usr/bin/env python
 
import sys
 
if (len(sys.argv) < 2):
    print("Usage: " + sys.argv[0] + " github-user [github-project]")
    exit(1)
 
try:
  import requests
except ImportError:
    print("Error: requests is not installed")
    print("Installing Requests is simple with pip:\n  pip install requests")
    print("More info: http://docs.python-requests.org/en/latest/")
    exit(1)
import io
import json
 
 
def dict_to_object(d):
    if '__class__' in d:
        class_name = d.pop('__class__')
        module_name = d.pop('__module__')
        module = __import__(module_name)
        class_ = getattr(module, class_name)
        args = dict((key.encode('ascii'), value) for key, value in d.items())
        inst = class_(**args)
    else:
        inst = d
    return inst
 
 
def ensure_str(s):
    if isinstance(s, unicode):
        s = s.encode('utf-8')
    return s
 
full_names = []
 
if len(sys.argv) == 3:
    full_names.append(sys.argv[1] + "/" + sys.argv[2])
else:
    buf = io.StringIO()
    r = requests.get('https://api.github.com/users/' + sys.argv[1] + '/repos')
    myobj = r.json()
 
    for rep in myobj:
        full_names.insert(0, ensure_str(rep['full_name']))
 
 
for full_name in full_names:
    buf = io.StringIO()
    try:
        r = requests.get('https://api.github.com/repos/' + full_name + '/releases')
        myobj = r.json()
 
        for p in myobj:
            if "assets" in p:
                for asset in p['assets']:
                    print((asset['name'] + ": " + str(asset['download_count']) +
                          " downloads"))
            else:
                print("No data")
    except:
        pass

To use this Python 3.X script, copy the entire code onto Notepad++. Then "save as" a file with no file extension. (i.e., Image.png ---> Image) After that, if you have Python 3.4 binaries installed, execute the Python code.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top