-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
83 lines (66 loc) · 2.56 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
78
79
80
81
82
83
import os
import requests
from flask import Flask, render_template, jsonify, request
from dotenv import load_dotenv
load_dotenv()
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
app = Flask(__name__)
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
headers = {
'Authorization': f'token {GITHUB_TOKEN}'
}
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/stats', methods=['GET'])
def get_github_stats():
username = request.args.get('username')
if not username:
return jsonify({"error": "No username provided"}), 400
user_data = requests.get(f'https://api.github.com/users/{username}', headers=headers)
if user_data.status_code != 200:
return jsonify({"error": user_data.json().get('message', 'User not found')}), user_data.status_code
user_data = user_data.json()
repos_data = requests.get(f'https://api.github.com/users/{username}/repos', headers=headers)
if repos_data.status_code != 200:
return jsonify({"error": repos_data.json().get('message', 'Repos not found')}), repos_data.status_code
repos_data = repos_data.json()
languages_count = {}
repos_info = []
stars_count = []
forks_count = []
for repo in repos_data:
repos_info.append({
"name": repo["name"],
"description": repo["description"] or "Sin descripción",
"stars": repo["stargazers_count"],
"forks": repo["forks_count"],
"issues": repo["open_issues_count"],
"url": repo["html_url"]
})
stars_count.append(repo["stargazers_count"])
forks_count.append(repo["forks_count"])
languages_data = requests.get(repo["languages_url"], headers=headers)
if languages_data.status_code == 200:
languages = languages_data.json()
for language in languages.keys():
if language in languages_count:
languages_count[language] += 1
else:
languages_count[language] = 1
return jsonify({
"user": {
"name": user_data["name"] or user_data["login"],
"avatar_url": user_data["avatar_url"],
"bio": user_data["bio"] or "Sin biografía disponible",
"followers": user_data["followers"],
"following": user_data["following"],
"public_repos": user_data["public_repos"]
},
"repos": repos_info,
"languages": languages_count,
"stars_count": stars_count,
"forks_count": forks_count
})
if __name__ == '__main__':
app.run(debug=True)