|
1 | 1 | import logging
|
| 2 | +from datetime import datetime as dt |
| 3 | +from dateutil import parser as dt_parser |
2 | 4 | #from cqlengine import BatchQuery
|
3 | 5 | from cqlengine.query import DoesNotExist
|
4 | 6 | from pyhackers.config import config
|
5 | 7 | from pyhackers.model.user import User, SocialUser
|
6 |
| -from pyhackers.model.cassandra.hierachy import (GithubProject, GithubUserList, GithubUser, |
7 |
| - User as CsUser, Post as CsPost, UserPost as CsUserPost, UserFollower as CsUserFollower, |
8 |
| - UserTimeLine) |
| 8 | +from pyhackers.model.cassandra.hierachy import (GithubProject, |
| 9 | + GithubUserList, |
| 10 | + GithubUser, |
| 11 | + GithubEvent, |
| 12 | + ) |
9 | 13 | from github import Github
|
| 14 | +import requests |
| 15 | + |
| 16 | +GITHUB_URL = "https://api.github.com/{}?client_id={}&client_secret={}" |
10 | 17 |
|
11 | 18 |
|
12 | 19 | class RegistrationGithubWorker():
|
@@ -137,14 +144,60 @@ def save_discovered_users(self):
|
137 | 144 |
|
138 | 145 | logging.warn("User[{}]created".format(nick))
|
139 | 146 |
|
| 147 | + def get_user_timeline(self): |
| 148 | + user = self.github_user.login |
| 149 | + |
| 150 | + url = GITHUB_URL.format("users/{}/received_events/public".format(user), |
| 151 | + self.client_id, self.client_secret) |
| 152 | + |
| 153 | + def get_json_request(endpoint): |
| 154 | + r = requests.get(endpoint) |
| 155 | + |
| 156 | + json_resp = r.json() |
| 157 | + logging.warn(r.headers) |
| 158 | + next_link = r.headers.get("link") |
| 159 | + next_request_url = None |
| 160 | + |
| 161 | + if next_link is not None and len(next_link) > 0: |
| 162 | + try: |
| 163 | + next_request_url = next_link.split(";")[0].replace("<", "").replace(">", "") |
| 164 | + except: |
| 165 | + next_request_url = None |
| 166 | + |
| 167 | + logging.warn("NextUp: {}".format(next_link)) |
| 168 | + |
| 169 | + for event in json_resp: |
| 170 | + id = int(event.get("id", None)) |
| 171 | + type = event.get("type", None) |
| 172 | + actor = event.get("actor", None) |
| 173 | + actor_str = "{},{}".format(actor.get("id", ""), actor.get("login")) |
| 174 | + repo = event.get("repo", None) |
| 175 | + repo_str = "{},{}".format(repo.get("id", ""), repo.get("login")) |
| 176 | + public = event.get("public", None) |
| 177 | + created_at = dt_parser.parse(event.get("created_at", dt.utcnow())) |
| 178 | + org = event.get("org", None) |
| 179 | + org_str = None |
| 180 | + if org is not None: |
| 181 | + org_str = "{},{}".format(org.get("id", ""), org.get("login")) |
| 182 | + |
| 183 | + GithubEvent.create(id=id, type=type, actor=actor_str,org=org_str, created_at=created_at) |
| 184 | + |
| 185 | + logging.warn("{}[{}] {}".format(type, actor, id)) |
| 186 | + |
| 187 | + if next_request_url is not None: |
| 188 | + get_json_request(next_request_url) |
| 189 | + |
| 190 | + |
| 191 | + get_json_request(url) |
140 | 192 |
|
141 | 193 | def run(self):
|
142 | 194 | self.get_user_details_from_db()
|
143 | 195 | self.init_github()
|
144 |
| - self.get_starred_projects() |
145 |
| - self.get_following_users() |
146 |
| - self.get_follower_users() |
147 |
| - self.save_discovered_users() |
| 196 | + #self.get_starred_projects() |
| 197 | + #self.get_following_users() |
| 198 | + #self.get_follower_users() |
| 199 | + #self.save_discovered_users() |
| 200 | + self.get_user_timeline() |
148 | 201 | pass
|
149 | 202 |
|
150 | 203 |
|
|
0 commit comments