Skip to content

Instantly share code, notes, and snippets.

@sourcepirate
Created April 11, 2017 13:13
Show Gist options
  • Save sourcepirate/6e35acfd6bc41f48c0559851c8e6b782 to your computer and use it in GitHub Desktop.
Save sourcepirate/6e35acfd6bc41f48c0559851c8e6b782 to your computer and use it in GitHub Desktop.
import requests
from multiprocessing import Queue, Process, Pool
from peewee import *
db = SqliteDatabase('github.db')
class Github(Model):
name = CharField(unique=True)
no_repos = IntegerField()
no_follower = IntegerField()
class Meta:
database = db
try:
db.create_tables([Github])
except:
pass
p = Queue()
start_url = "https://api.github.com/users/{}".format("sourcepirate")
p.put(start_url)
def get_req(url):
try:
return requests.get(url).json()
except:
return None
def parse_data(request_dict):
followers = request_dict.get("followers_url")
no_followers = request_dict.get("followers")
no_repos = request_dict.get("public_repos")
name = request_dict.get('login')
data = get_req(followers)
return data, no_followers, no_repos, name
def process_worker(q):
while True:
url = q.get()
res = get_req(url)
print(res)
followers, nfollow, norepo, name = parse_data(res)
print(name, nfollow)
try:
entity = Github.create(name=name, no_repos=norepo, no_follower=nfollow)
for follower in followers:
q.put(follower.get('url'))
except IntegrityError as e:
print(str(e))
processes = [Process(target=process_worker, args=(p,)) for _ in range(5)]
for proc in processes:
proc.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment