Skip to content

Instantly share code, notes, and snippets.

@yue4u
Created July 24, 2018 12:55
Show Gist options
  • Save yue4u/169b635f8148680e35d0e85a73372b66 to your computer and use it in GitHub Desktop.
Save yue4u/169b635f8148680e35d0e85a73372b66 to your computer and use it in GitHub Desktop.
use github api to get org member's repos info
import requests
import json
class Getter(object):
def __init__(self):
self.org = ''
self.members = []
self.all_info = {}
def get(self, org):
self.org = org
self.get_members()
self.get_member_repos()
with open('front.json', 'w') as us:
json.dump(self.all_info, us, ensure_ascii=False, indent=4)
def get_members(self):
members = requests.get(f'https://api.github.com/orgs/{self.org}/members',
auth=(USER_NAME, TOKEN)).json()
self.members = [member.get('login') for member in members]
print('members : ', self.members, '\n')
def get_member_repos(self):
[self.get_repo(member_name) for member_name in self.members]
def get_repo(self, member_name):
member = Member(member_name)
repos = requests.get(f'https://api.github.com/users/{member_name}/repos', auth=(USER_NAME, TOKEN)).json()
for repo in repos:
if not repo['fork']:
member.repo_full_names.append(repo.get('full_name'))
print(member_name, ' : ', member.repo_full_names)
member.repos = len(member.repo_full_names)
languages_list = [self.get_language(repo_name) for repo_name in member.repo_full_names]
[self.count_language(member, langs) for langs in languages_list]
self.all_info[member_name] = member.json()
@staticmethod
def count_language(member, languages):
for language in languages:
# print(language)
if language in member.languages:
member.languages[language] += languages[language]
else:
member.languages[language] = languages[language]
@staticmethod
def get_language(repo_full_name):
return requests.get(f'https://api.github.com/repos/{repo_full_name}/languages',
auth=(USER_NAME, TOKEN)).json()
class Member(object):
def __init__(self, name):
self.name = name
self.repo_full_names = []
self.repos = 0
self.languages = {}
def json(self):
return {
'repos': self.repos,
'languages': self.languages
}
if __name__ == '__main__':
USER_NAME = 'YOUR_USERNAME'
TOKEN = 'YOUR_GITHUB_API_TOKEN'
g = Getter()
g.get('YOUR_ORG')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment