package biz import ( "encoding/json" "errors" "fmt" "github.com/go-kratos/kratos/v2/log" "io" "net/http" ) type MapServiceBiz struct { log *log.Helper } func NewMapServiceBiz(logger log.Logger) *MapServiceBiz { return &MapServiceBiz{log: log.NewHelper(logger)} } type DirectionDrivingResp struct { Status string `json:"status,omitempty"` Info string `json:"info,omitempty"` Infocode string `json:"infocode,omitempty"` Count string `json:"count,omitempty"` Route struct { Origin string `json:"origin,omitempty"` Destination string `json:"destination,omitempty"` Paths []Path `json:"paths,omitempty"` } `json:"route"` } type Path struct { Distance string `json:"distance,omitempty"` Duration string `json:"duration,omitempty"` Strategy string `json:"strategy,omitempty"` } func (msbiz *MapServiceBiz) GetDriverInfo(origin, destination string) (string, string, error) { key := "bf898b32c1748a2668684e4bcbe4c496" api := "https://restapi.amap.com/v3/direction/driving" parameters := fmt.Sprintf("origin=%s&destination=%s&extensions=base&output=json&key=%s", origin, destination, key) url := api + "?" + parameters resp, err := http.Get(url) if err != nil { return "", "", err } defer func() { _ = resp.Body.Close() }() body, err := io.ReadAll(resp.Body) if err != nil { return "", "", err } ddResp := DirectionDrivingResp{} if err := json.Unmarshal(body, &ddResp); err != nil { return "", "", err } if ddResp.Status == "0" { return "", "", errors.New(ddResp.Info) } path := ddResp.Route.Paths[0] return path.Distance, path.Duration, nil }