✨ add face recognition
This commit is contained in:
84
common/gao_map/amap.go
Normal file
84
common/gao_map/amap.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package gao_map
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/duke-git/lancet/v2/cryptor"
|
||||
"github.com/duke-git/lancet/v2/maputil"
|
||||
"github.com/duke-git/lancet/v2/netutil"
|
||||
"github.com/duke-git/lancet/v2/slice"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type AmapClient struct {
|
||||
key string
|
||||
secret string
|
||||
Location *Location
|
||||
Direction *Direction
|
||||
Place *Place
|
||||
Weather *Weather
|
||||
}
|
||||
|
||||
func NewAmapClient(key, secret string) *AmapClient {
|
||||
amap := &AmapClient{key: key, secret: secret}
|
||||
amap.Location = &Location{client: amap}
|
||||
amap.Direction = &Direction{client: amap}
|
||||
amap.Place = &Place{client: amap}
|
||||
amap.Weather = &Weather{client: amap}
|
||||
|
||||
return amap
|
||||
}
|
||||
|
||||
func (a *AmapClient) DoRequest(url, method string, params url.Values) (resp *http.Response, err error) {
|
||||
params.Set("key", a.key)
|
||||
if a.secret != "" {
|
||||
params.Set("sig", makeSign(a, ¶ms))
|
||||
}
|
||||
|
||||
switch strings.ToUpper(method) {
|
||||
case "GET":
|
||||
resp, err = netutil.HttpGet(url, map[string]string{}, params)
|
||||
case "POST":
|
||||
resp, err = netutil.HttpPost(url, map[string]string{}, params)
|
||||
default:
|
||||
err = errors.New("unknown request method")
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, errors.New("amap request error: " + resp.Status)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
Status string `json:"status"`
|
||||
Info string `json:"info"`
|
||||
Infocode string `json:"Infocode"`
|
||||
}
|
||||
|
||||
func makeSign(client *AmapClient, values *url.Values) string {
|
||||
keys := maputil.Keys(*values)
|
||||
slice.SortBy(keys, func(a, b string) bool {
|
||||
return a < b
|
||||
})
|
||||
|
||||
data := slice.Map(keys, func(index int, item string) string {
|
||||
return item + "=" + values.Get(item)
|
||||
})
|
||||
str := slice.Join(data, "&") + client.secret
|
||||
return cryptor.Md5String(str)
|
||||
}
|
||||
|
||||
func checkResponse(response Response) error {
|
||||
if response.Status != "1" || response.Infocode != "10000" {
|
||||
return errors.New("amap response error: " + response.Info)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user