Skip to content

Commit 5d014cd

Browse files
authored
Merge pull request mouredev#7608 from raulG91/main
mouredev#45 - javascript
2 parents e25accf + 29297fa commit 5d014cd

File tree

1 file changed

+140
-0
lines changed
  • Roadmap/45 - GITHUB OCTOVERSE/javascript

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
2+
const https = require('node:https');
3+
const { hostname } = require('node:os');
4+
5+
const TOKEN = 'YOUR TOKEN';
6+
const HOSTNAME = 'api.github.com'
7+
const header = {
8+
9+
'Authorization': `Bearer ${TOKEN}`,
10+
"Accept": "application/vnd.github+json",
11+
'User-Agent': 'raulG91'
12+
}
13+
14+
async function getUserInfo(user) {
15+
return new Promise((resolve, reject) => {
16+
const options = {
17+
hostname: HOSTNAME,
18+
path: `/users/${user}`,
19+
method: 'GET',
20+
headers: header
21+
22+
};
23+
let userInfo = ''
24+
25+
https.get(options, (res) => {
26+
27+
res.on('data', (data) => {
28+
userInfo += data
29+
})
30+
31+
res.on('end', () => {
32+
let info = JSON.parse(userInfo)
33+
resolve(info)
34+
})
35+
36+
}).on('error', (error) => {
37+
reject('Error occurs')
38+
})
39+
40+
})
41+
42+
}
43+
44+
async function getReposInformation(user) {
45+
46+
return new Promise((resolve, reject) => {
47+
const options = {
48+
hostname: HOSTNAME,
49+
path: `/users/${user}/repos`,
50+
method: 'GET',
51+
headers: header
52+
53+
};
54+
let repo_info = '';
55+
56+
https.get(options, (res) => {
57+
58+
res.on('data', (data) => {
59+
repo_info += data
60+
})
61+
62+
res.on('end', () => {
63+
64+
let repos = []
65+
repo_list = JSON.parse(repo_info)
66+
67+
for (let repo of repo_list) {
68+
repos.push({
69+
"name": repo.name,
70+
"language": repo.language,
71+
"stars": repo.stargazers_count,
72+
"forks": repo.forks
73+
})
74+
75+
}
76+
resolve(repos)
77+
})
78+
}).on('error', (error) => {
79+
console.log("Error occurs " + error)
80+
reject(error)
81+
})
82+
83+
})
84+
}
85+
86+
87+
async function main() {
88+
89+
const USER = "mouredev"
90+
//Get user stats
91+
try {
92+
let userInfo = await getUserInfo(USER)
93+
console.log("Number of followers is: " + userInfo.followers)
94+
console.log("Number of following users: " + userInfo.following)
95+
console.log("Number of public repositories: " + userInfo.public_repos)
96+
} catch (error) {
97+
console.log("Error getting user data")
98+
}
99+
100+
101+
//Get user's repos
102+
try {
103+
let repos = await getReposInformation(USER)
104+
let languages = {}
105+
106+
for (let repo of repos) {
107+
108+
console.log("Repository name: " + repo.name)
109+
console.log("Repository main language: " + repo.language)
110+
console.log("Repository stars: " + repo.stars)
111+
console.log("Repository forks: " + repo.forks)
112+
113+
if ((repo.language != null) && !(repo.language in languages)) {
114+
115+
languages[repo.language] = 1
116+
117+
}
118+
else if (repo.language != null) {
119+
languages[repo.language] += 1
120+
}
121+
}
122+
// Get most used language
123+
let most_used_language = ""
124+
let max_used_times = 0
125+
for (let item in languages) {
126+
if (languages[item] > max_used_times) {
127+
max_used_times = languages[item]
128+
most_used_language = item
129+
}
130+
}
131+
console.log("Most used language is: " + most_used_language + " it has been used: " + max_used_times + " times")
132+
} catch (error) {
133+
134+
console.log("Error getting data for repositories")
135+
}
136+
137+
138+
}
139+
140+
main()

0 commit comments

Comments
 (0)