You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.3 KiB
69 lines
1.3 KiB
package service |
|
|
|
import ( |
|
"encoding/csv" |
|
"net/http" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
_bnjShieldCsvURL = "http://i0.hdslb.com/bfs/dm/bnj_shield.csv" |
|
) |
|
|
|
func (s *Service) shieldProc() { |
|
s.shieldFromCsv() |
|
ticker := time.NewTicker(time.Minute * 5) |
|
defer ticker.Stop() |
|
for range ticker.C { |
|
s.shieldFromCsv() |
|
} |
|
} |
|
|
|
func (s *Service) shieldFromCsv() { |
|
resp, err := http.Get(_bnjShieldCsvURL) |
|
if err != nil { |
|
log.Error("shieldFromCsv(url:%v) error(%v)", _bnjShieldCsvURL, err) |
|
return |
|
} |
|
defer resp.Body.Close() |
|
if resp.StatusCode != http.StatusOK { |
|
log.Error("shieldFromCsv(url:%v) status(%v)", _bnjShieldCsvURL, resp.StatusCode) |
|
return |
|
} |
|
r := csv.NewReader(resp.Body) |
|
// ignore first record |
|
r.Read() |
|
aids := make([]int64, 0, 100) |
|
mids := make([]int64, 0, 100) |
|
for { |
|
records, err := r.Read() |
|
if err != nil { |
|
break |
|
} |
|
if len(records) != 2 { |
|
continue |
|
} |
|
// ignore error |
|
aid, _ := strconv.ParseInt(records[0], 10, 64) |
|
mid, _ := strconv.ParseInt(records[1], 10, 64) |
|
if aid > 0 { |
|
aids = append(aids, aid) |
|
} |
|
if mid > 0 { |
|
mids = append(mids, mid) |
|
} |
|
} |
|
aidMap := make(map[int64]struct{}) |
|
midMap := make(map[int64]struct{}) |
|
for _, aid := range aids { |
|
aidMap[aid] = struct{}{} |
|
} |
|
for _, mid := range mids { |
|
midMap[mid] = struct{}{} |
|
} |
|
s.aidSheild = aidMap |
|
s.midsSheild = midMap |
|
}
|
|
|