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.
go-library/service/amap/ip.go

47 lines
1.8 KiB

1 year ago
package amap
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type IpResponse struct {
Status string `json:"status"` // 值为0或1,0表示失败1表示成功
Info string `json:"info"` // 返回状态说明status为0时info返回错误原因否则返回“OK”。
Infocode string `json:"infocode"` // 返回状态说明,10000代表正确,详情参阅info状态表
Province string `json:"province"` // 若为直辖市则显示直辖市名称; 如果在局域网 IP网段内则返回“局域网” 非法IP以及国外IP则返回空
City string `json:"city"` // 若为直辖市则显示直辖市名称; 如果为局域网网段内IP或者非法IP或国外IP则返回空
Adcode string `json:"adcode"` // 城市的adcode编码
Rectangle string `json:"rectangle"` // 所在城市矩形区域范围
}
type IpResult struct {
Result IpResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newIpResult(result IpResponse, body []byte, http gorequest.Response) *IpResult {
return &IpResult{Result: result, Body: body, Http: http}
}
// Ip IP定位
// https://lbs.amap.com/api/webservice/guide/api/ipconfig
func (c *Client) Ip(ctx context.Context, ip string, notMustParams ...gorequest.Params) (*IpResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("key", c.GetKey())
params.Set("ip", ip)
// 请求
request, err := c.request(ctx, apiUrl+"/ip", params, http.MethodGet)
if err != nil {
return newIpResult(IpResponse{}, request.ResponseBody, request), err
}
// 定义
var response IpResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newIpResult(response, request.ResponseBody, request), err
}