infoGetter/api/public.go

102 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package api
//爬虫的参数组装,返回结构体解析,存入数据库的方法有关的包
import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"errors"
ctxLogger "github.com/luizsuper/ctxLoggers"
"github.com/spf13/cast"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"io"
"io/ioutil"
"net/http"
"strings"
"time"
)
//针对http访问checkSum计算的抽象
var (
M = make(map[string]string)
DB = new(gorm.DB)
)
const o = `$&*#$%YSGHsghdfg256456857ughdgfEYTHFDBNF5678hncg~!@#$%&$&Uxvcbdfget2577ifhnxgfart$%^&@#$%@%&ghsdft256WRETsgsr623$%TStw45`
//todo:配置文件
//初始化DB以及请求的
func init() {
err := errors.New("")
dsn := "root:123456qwe@tcp(127.0.0.1:3306)/mijuan?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
ctxLogger.Error(nil, "DB connect err", zap.String("reason", err.Error()))
}
M["Content-Type"] = "application/json"
M["version"] = "1.1.9"
//todo: nonce 提取出来
M["nonce"] = "0.5794467510454496"
M["curTime"] = cast.ToString(TimeToUnix(time.Now()))
M["clientVersion"] = "3.0.0"
M["userToken"] = ""
M["clientType"] = "2"
M["cityCode"] = "310000"
M["mobileType"] = "2"
}
// TimeToUnix 转化为13位时间戳
func TimeToUnix(e time.Time) int64 {
timeUnix, _ := time.Parse("2006-01-02 15:04:05", e.Format("2006-01-02 15:04:05"))
return timeUnix.UnixNano() / 1e6
}
func GetCheckSum(u string) string {
a := 0.5794467510454496
toString := cast.ToString(a)
s := toString + u + o
bytes := []byte(s)
h := md5.New()
h.Write(bytes)
k := hex.EncodeToString(h.Sum(nil))
return k
}
func Attach(url, getCheckSum string, sbody interface{}, headers map[string]string, marshalFunc func(req, body []byte) (interface{}, error)) (interface{}, error) {
M["checkSum"] = getCheckSum
body, err := PostHeader(url, sbody, headers, marshalFunc)
if err != nil {
return nil, err
}
return body, nil
}
func PostHeader(url string, sbody interface{}, headers map[string]string, marshalFunc func(req, body []byte) (resp interface{}, err error)) (interface{}, error) {
client := &http.Client{}
marshal, err := json.Marshal(sbody)
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", url, strings.NewReader(cast.ToString(marshal)))
if err != nil {
return nil, err
}
for key, header := range headers {
req.Header.Set(key, header)
}
resp, err := client.Do(req)
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
ctxLogger.Error(nil, "net body close error", zap.String("errReason", err.Error()))
}
}(resp.Body)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return marshalFunc(marshal, body)
}