-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
77 lines (64 loc) · 2.33 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from dataclasses import dataclass
from dotenv import load_dotenv
from datetime import datetime
from github import Github
import pandas as pd
import os
load_dotenv(".env", override=True)
def file_path(date):
dir = "data/" + date.strftime("%Y/%m/")
if not os.path.exists(dir):
os.makedirs(dir)
return os.path.join(dir, formate_date(date)+".csv")
def formate_date(date):
return date.strftime("%Y%m%d")
def elapsted_time(start):
return str((datetime.now()-start).seconds) + "s"
@dataclass
class Repo:
name: str
ts: int
stars_count: int = 0
views_total: int = 0
views_uniques: int = 0
clones_total: int = 0
clones_uniques: int = 0
token = os.getenv('GITHUB_TOKEN')
g = Github(token)
days = dict()
start = datetime.now()
print("app.py started at:", start)
github_repos = g.get_user().get_repos()
print("[",elapsted_time(start=start),"][", g.get_user().login, "]", github_repos.totalCount, "repositories")
for repo in github_repos:
owner = repo.__dict__.get('_rawData')['owner']['login']
name = repo.name
print("[",elapsted_time(start=start),"][", owner, "][",name,"]")
views = repo.get_views_traffic()
print("[",elapsted_time(start=start),"][", owner, "][",name,"][ views ]",len(views["views"]))
for v in views["views"]:
ts = formate_date(v.timestamp)
if ts not in days:
days[ts] = dict()
if name not in days[ts]:
days[ts][name] = Repo(name=name, ts=v.timestamp, stars_count=repo.stargazers_count)
r = days[ts][name]
r.views_total = v.count
r.views_uniques = v.uniques
clones = repo.get_clones_traffic()
print("[",elapsted_time(start=start),"][", owner, "][",name,"][ clones ]",len(clones["clones"]))
for c in clones["clones"]:
ts = formate_date(c.timestamp)
if ts not in days:
days[ts] = dict()
if name not in days[ts]:
days[ts][name] = Repo(name=name, ts=c.timestamp, stars_count=repo.stargazers_count)
r = days[ts][name]
r.clones_total = c.count
r.clones_uniques = c.uniques
for d in days.keys():
df = pd.DataFrame(data = [r.__dict__ for r in days[d].values()])
ts = datetime.strptime(d, "%Y%m%d")
df.to_csv(file_path(ts))
print("app.py finish at:", datetime.now())
print("app.py elapsted time", elapsted_time(start=start))