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