7
7
package logic
8
8
9
9
import (
10
+ "net/http"
11
+ "strings"
12
+
10
13
"model"
11
14
12
15
"golang.org/x/net/context"
13
16
14
17
. "db"
15
18
19
+ "github.com/PuerkitoBio/goquery"
20
+ "github.com/polaris1119/goutils"
16
21
"github.com/polaris1119/logger"
17
22
)
18
23
@@ -35,3 +40,71 @@ func (DownloadLogic) RecordDLTimes(ctx context.Context, filename string) error {
35
40
36
41
return nil
37
42
}
43
+
44
+ func (DownloadLogic ) AddNewDownload (ctx context.Context , version , selector string ) error {
45
+ objLog := GetLogger (ctx )
46
+
47
+ resp , err := http .Get ("https://golang.google.cn/dl/" )
48
+ if err != nil {
49
+ return err
50
+ }
51
+ defer resp .Body .Close ()
52
+
53
+ doc , err := goquery .NewDocumentFromResponse (resp )
54
+ if err != nil {
55
+ return err
56
+ }
57
+
58
+ doc .Find (selector ).Each (func (i int , versionSel * goquery.Selection ) {
59
+ idVal , exists := versionSel .Attr ("id" )
60
+ if ! exists {
61
+ return
62
+ }
63
+
64
+ if idVal != version {
65
+ return
66
+ }
67
+
68
+ versionSel .Find ("table tbody tr" ).Each (func (j int , dlSel * goquery.Selection ) {
69
+ download := & model.Download {
70
+ Version : version ,
71
+ }
72
+
73
+ if dlSel .HasClass ("highlight" ) {
74
+ download .IsRecommend = true
75
+ }
76
+
77
+ dlSel .Find ("td" ).Each (func (k int , fieldSel * goquery.Selection ) {
78
+ val := fieldSel .Text ()
79
+ switch k {
80
+ case 0 :
81
+ download .Filename = val
82
+ case 1 :
83
+ download .Kind = val
84
+ case 2 :
85
+ download .OS = val
86
+ case 3 :
87
+ download .Arch = val
88
+ case 4 :
89
+ download .Size = goutils .MustInt (strings .TrimRight (val , "MB" ))
90
+ case 5 :
91
+ download .Checksum = val
92
+ }
93
+ })
94
+
95
+ has , err := MasterDB .Where ("filename=?" , download .Filename ).Exist (new (model.Download ))
96
+ if err != nil || has {
97
+ return
98
+ }
99
+
100
+ _ , err = MasterDB .Insert (download )
101
+ if err != nil {
102
+ objLog .Errorln ("insert download error:" , err , "version:" , version )
103
+ }
104
+ })
105
+
106
+ MasterDB .Exec ("UPDATE download SET seq=id WHERE seq=0" )
107
+ })
108
+
109
+ return nil
110
+ }
0 commit comments