Skip to content

Instantly share code, notes, and snippets.

@kitelife
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save kitelife/c148ff2a9ec1bd7b091c to your computer and use it in GitHub Desktop.

Select an option

Save kitelife/c148ff2a9ec1bd7b091c to your computer and use it in GitHub Desktop.
import requests
class GithubWalker(object):
token = None
source_user = None
api_url_base = 'https://api.github.com'
user_has_walked = set()
user_id_wait_walk = []
user_wait_walk = {}
def __init__(self, token, file_name, source_user=None):
self.token = token
self.fh = open(file_name, 'w+')
self.source_user = source_user
self.session = requests.Session()
self.session.headers.update({'Authorization': 'token ' + self.token})
def __get_user_info(self, api_url):
req = self.session.get(api_url)
if req.status_code != 200:
print req.status_code
return None
json_res = req.json()
if 'blog' in json_res:
return json_res['blog']
def __get_following(self, api_url):
req = self.session.get(api_url)
if req.status_code != 200:
print req.status_code
return False
json_res = req.json()
for following in json_res:
self.user_id_wait_walk.append(following['id'])
self.user_wait_walk[following['id']] = following['url']
return True;
def __recursive_walk(self, entry):
self.__get_following(entry)
while len(self.user_id_wait_walk):
user_id = self.user_id_wait_walk.pop()
if user_id not in self.user_has_walked:
user_url = self.user_wait_walk[user_id]
self.__get_following(user_url + '/following')
user_blog = self.__get_user_info(user_url)
if user_blog:
print user_blog
self.fh.write(user_blog + '\n')
self.fh.flush()
self.user_has_walked.add(user_id)
if user_id in self.user_wait_walk:
del self.user_wait_walk[user_id]
def walk_now(self):
entry = self.api_url_base + '/users/' + self.source_user + '/following'
self.__recursive_walk(entry)
def main():
token = 'xxx'
file_as_db = 'blogs.txt'
source_user = 'youngsterxyf'
gw = GithubWalker(token, file_as_db, source_user)
gw.walk_now()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment