Last active
December 29, 2022 17:33
-
-
Save Ray-Eldath/08e9daf7eca64278c3c8e1b5bbdb8e59 to your computer and use it in GitHub Desktop.
List your programming languages
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pprint import pprint | |
from gql import Client, gql | |
from gql.transport.aiohttp import AIOHTTPTransport | |
personal_api_token = 'YOUR PERSONAL TOKEN' | |
username = 'YOUR USERNAME' | |
def main(): | |
transport = AIOHTTPTransport(url="https://api.github.com/graphql", | |
headers={ | |
'Authorization': f'Bearer {personal_api_token}' | |
}) | |
client = Client(transport=transport, fetch_schema_from_transport=True) | |
query = gql( | |
""" | |
query userInfo($login: String!) { | |
user(login: $login) { | |
# fetch only owner repos & not forks | |
repositories(ownerAffiliations: OWNER, isFork: false, first: 100) { | |
nodes { | |
name | |
languages(first: 10, orderBy: {field: SIZE, direction: DESC}) { | |
edges { | |
size | |
node { | |
color | |
name | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
""") | |
d = client.execute(query, variable_values={"login": username}) | |
pprint(d) | |
result = {} | |
exclude = ['HTML', 'Stylus', 'CSS'] | |
for repo in d['user']['repositories']['nodes']: | |
for lang in repo['languages']['edges']: | |
name = lang['node']['name'] | |
if name in exclude: | |
continue | |
size = lang['size'] | |
if result.get(name) is None: | |
result[name] = size | |
else: | |
result[name] += size | |
result = sorted(result.items(), key=lambda e: e[1], reverse=True) | |
s = sum(map(lambda e: e[1], result)) | |
for r in result: | |
print('{:<15} {:>6} - {:.1f}kB'.format(r[0], '{:.2f}'.format((r[1] / s) * 100) + '%', r[1] / 1000)) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
pip install aiohttp gql
user
permission is grantedpython main.py
and you'll get: