/
infoUser.go
95 lines (85 loc) · 2.23 KB
/
infoUser.go
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
84
85
86
87
88
89
90
91
92
93
94
95
package crawler
import (
"context"
"encoding/json"
"sync"
"time"
"github.com/EffDataAly/GithubTraveler/common/downloader"
"github.com/EffDataAly/GithubTraveler/common/resp"
"github.com/EffDataAly/GithubTraveler/models"
"github.com/jinzhu/gorm"
"github.com/tosone/logging"
)
// infoUser get user's detail info
func infoUser(ctx context.Context, wg *sync.WaitGroup) {
wg.Add(1)
defer wg.Done()
var body string
var err error
var num uint
for {
select {
case <-ctx.Done():
return
default:
}
num++
var user = new(models.User)
if user, err = new(models.User).FindByID(num); err != nil {
if err == gorm.ErrRecordNotFound && num == 1 {
time.Sleep(time.Second * 30)
}
num = 0
continue
}
if body, _, err = downloader.Get(0, user.Login); err != nil {
logging.Error(err)
continue
}
var owner resp.User
if err = json.Unmarshal([]byte(body), &owner); err != nil {
logging.Error(err)
continue
} else {
var u = new(models.User)
u.UserID = owner.UserID
u.Type = owner.Type
u.Login = owner.Login
u.Email = owner.Email
u.Location = owner.Location
if err = u.Create(); err != nil {
logging.Error(err)
continue
}
var historyUserFollowersNum = new(models.HistoryUserFollowersNum)
historyUserFollowersNum.FollowersNum = owner.Followers
historyUserFollowersNum.UserID = owner.UserID
if err = historyUserFollowersNum.Create(); err != nil {
logging.Error(err)
}
var historyUserFollowingNum = new(models.HistoryUserFollowingNum)
historyUserFollowingNum.FollowingNum = owner.Following
historyUserFollowingNum.UserID = owner.UserID
if err = historyUserFollowingNum.Create(); err != nil {
logging.Error(err)
}
var historyUserReposNum = new(models.HistoryUserReposNum)
historyUserReposNum.UserID = owner.UserID
historyUserReposNum.ReposNum = owner.PublicRepos
if err = historyUserReposNum.Create(); err != nil {
logging.Error(err)
}
var historyUserGistNum = new(models.HistoryUserGistNum)
historyUserGistNum.UserID = owner.UserID
historyUserGistNum.GistNum = owner.PublicGists
if err = historyUserGistNum.Create(); err != nil {
logging.Error(err)
}
select {
case <-ctx.Done():
return
default:
}
}
}
}