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/qq/ip.go

60 lines
2.0 KiB

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 qq
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type IpResponse struct {
Status int `json:"status"` // 状态码0为正常其它为异常
Message string `json:"message"` // 对status的描述
RequestId string `json:"request_id"`
Result struct {
Ip string `json:"ip"` // 用于定位的IP地址
Location struct {
Lat float64 `json:"lat"` // 纬度
Lng float64 `json:"lng"` // 经度
} `json:"location"` // 定位坐标。注IP定位服务精确到市级该位置为IP地址所属的行政区划政府坐标
AdInfo struct {
Nation string `json:"nation"` // 国家
Province string `json:"province"` // 国家代码ISO3166标准3位数字码
City string `json:"city"` // 省
District string `json:"district"` // 市
Adcode int `json:"adcode"` // 区
NationCode int `json:"nation_code"` // 行政区划代码
} `json:"ad_info"` // 定位行政区划信息
} `json:"result"` // IP定位结果
}
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.qq.com/service/webService/webServiceGuide/webServiceIp
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)
params.Set("output", "JSON")
// 请求
request, err := c.request(ctx, apiUrl+"/ws/location/v1/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
}