124 lines
3.8 KiB
Go
124 lines
3.8 KiB
Go
package api
|
||
|
||
import (
|
||
"database/sql/driver"
|
||
"encoding/json"
|
||
"fmt"
|
||
ctxLogger "github.com/luizsuper/ctxLoggers"
|
||
"go.uber.org/zap"
|
||
"time"
|
||
)
|
||
|
||
type (
|
||
// ListBody 访问列表的结构体
|
||
ListBody struct {
|
||
TagType string `json:"tagType"`
|
||
Keyword string `json:"keyword"`
|
||
PageNum int `json:"pageNum"`
|
||
PageSize int `json:"pageSize"`
|
||
PersonType int `json:"personType"`
|
||
}
|
||
Item struct {
|
||
ScriptID string `json:"scriptId" gorm:"column:scriptId"`
|
||
ScriptScore string `json:"scriptScore" gorm:"column:scriptScore"`
|
||
RecommendUrl string `json:"recommendUrl" gorm:"column:recommendUrl"`
|
||
ScriptTextContent string `json:"scriptTextContent" gorm:"column:scriptTextContent"`
|
||
ScriptName string `json:"scriptName" gorm:"column:scriptName"`
|
||
ScriptTag string `json:"scriptTag" gorm:"column:scriptTag"`
|
||
ScriptPlayerLimit int `json:"scriptPlayerLimit" gorm:"column:scriptPlayerLimit"`
|
||
RecommendNum int `json:"recommendNum" gorm:"column:recommendNum"`
|
||
ScriptIntro string `json:"scriptIntro" gorm:"column:scriptIntro"`
|
||
ScriptCoverUrl string `json:"scriptCoverUrl" gorm:"column:scriptCoverUrl"`
|
||
ScriptCategory int `json:"scriptCategory" gorm:"column:scriptCategory"`
|
||
}
|
||
// ListResp 列表返回的结构体
|
||
ListResp struct {
|
||
Head struct {
|
||
Msg string `json:"msg"`
|
||
Code int `json:"code" gorm:"column:code"`
|
||
} `json:"head" gorm:"column:head"`
|
||
Data struct {
|
||
Pages int `json:"pages" gorm:"column:pages"`
|
||
TotalSize string `json:"totalSize" gorm:"column:totalSize"`
|
||
Items []Item `json:"items" gorm:"column:items"`
|
||
} `json:"data" gorm:"column:data"`
|
||
}
|
||
// BasicInfo 存入数据库-basic_info表
|
||
BasicInfo struct {
|
||
Resp ListResp `json:"resp" gorm:"column:resp;type:json"`
|
||
Page int `json:"page" gorm:"column:page;type int"`
|
||
}
|
||
)
|
||
|
||
const SearchUrl = "https://api.h5.helloaba.cn/script/v3/scriptSearchPage"
|
||
|
||
func (m *BasicInfo) TableName() string {
|
||
return "basic_info"
|
||
}
|
||
|
||
// Value 实现gorm针对json数据结构的interface
|
||
func (p ListResp) Value() (driver.Value, error) {
|
||
return json.Marshal(p)
|
||
}
|
||
|
||
func (p *ListResp) Scan(input interface{}) error {
|
||
return json.Unmarshal(input.([]byte), &p)
|
||
}
|
||
|
||
// ListMarshal 将http访问之后的[]byte 解析为listResp
|
||
func ListMarshal(req, body []byte) (resp interface{}, err error) {
|
||
r := new(ListResp)
|
||
err = json.Unmarshal(body, r)
|
||
if err != nil {
|
||
ctxLogger.Error(nil, "json UnmarshalError", zap.String("resp body", string(body)))
|
||
}
|
||
if r.Head.Code != 200 || r.Head.Msg != "成功" {
|
||
ctxLogger.Error(nil, "net wrok error", zap.String("resq body", string(req)), zap.String("resp body", string(body)))
|
||
}
|
||
return r, err
|
||
}
|
||
|
||
// GetKvStr todo:抽象
|
||
// GetKvStr 按照顺序对查询的key排序
|
||
func GetKvStr(body ListBody) string {
|
||
//strings := []string{"TagType", "Keyword", "PageNum", "PageSize", "PersonType"}
|
||
//sort.Strings(strings)
|
||
//Keyword PageNum PageSize PersonType TagType
|
||
var s = ""
|
||
s += fmt.Sprintf("%v=%v&", "keyword", body.Keyword)
|
||
s += fmt.Sprintf("%v=%v&", "pageNum", body.PageNum)
|
||
s += fmt.Sprintf("%v=%v&", "pageSize", body.PageSize)
|
||
s += fmt.Sprintf("%v=%v&", "personType", 0)
|
||
s += fmt.Sprintf("%v=%v", "tagType", body.TagType)
|
||
return s
|
||
}
|
||
|
||
//todo:页数抽离
|
||
func multiList() {
|
||
for i := 201; i <= 573; i++ {
|
||
body := ListBody{
|
||
TagType: "0",
|
||
Keyword: "",
|
||
PageNum: i,
|
||
PageSize: 10,
|
||
PersonType: 0,
|
||
}
|
||
list(body)
|
||
}
|
||
}
|
||
|
||
func list(body ListBody) {
|
||
dto, err := Attach(SearchUrl, GetCheckSum(GetKvStr(body)), body, M, ListMarshal)
|
||
if err != nil {
|
||
ctxLogger.Error(nil, "net error record", zap.Int("page", body.PageNum))
|
||
}
|
||
if s, ok := dto.(*ListResp); !ok {
|
||
ctxLogger.Error(nil, "assertion error", zap.Int("page", body.PageNum))
|
||
} else {
|
||
info := BasicInfo{Resp: *s, Page: body.PageNum}
|
||
DB.Create(&info)
|
||
time.Sleep(1500)
|
||
ctxLogger.Info(nil, "ok", zap.Int("page", body.PageNum))
|
||
}
|
||
}
|