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.
97 lines
2.1 KiB
97 lines
2.1 KiB
package qweather
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/coze-dev/coze-go"
|
|
)
|
|
|
|
func newSys(options Options) (sys *QWeather, err error) {
|
|
sys = &QWeather{
|
|
options: options,
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
type QWeather struct {
|
|
options Options
|
|
api coze.CozeAPI
|
|
}
|
|
|
|
// 城市查询
|
|
func (this *QWeather) GeoApi(location string) (result *WeatherLocationResponse, err error) {
|
|
var (
|
|
req *http.Request
|
|
resp *http.Response
|
|
body []byte
|
|
)
|
|
// 创建GET请求
|
|
req, err = http.NewRequest("GET", fmt.Sprintf("https://%s/geo/v2/city/lookup?location=%s", this.options.ApiHost, location), nil)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 设置请求头
|
|
req.Header.Set("X-QW-Api-Key", fmt.Sprintf("Bearer %s", this.options.ApiKey))
|
|
req.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd") // 模拟cURL的--compressed选项
|
|
|
|
// 发送请求
|
|
client := &http.Client{}
|
|
resp, err = client.Do(req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode != http.StatusOK {
|
|
err = fmt.Errorf("StatusCode:%d", resp.StatusCode)
|
|
return
|
|
}
|
|
// 读取并处理响应
|
|
body, err = io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
result = &WeatherLocationResponse{}
|
|
err = json.Unmarshal(body, result)
|
|
return
|
|
}
|
|
|
|
// 天气查询
|
|
func (this *QWeather) Weather(location string) (result *WeatherResponse, err error) {
|
|
var (
|
|
req *http.Request
|
|
resp *http.Response
|
|
body []byte
|
|
)
|
|
// 创建GET请求
|
|
req, err = http.NewRequest("GET", fmt.Sprintf("https://%s/v7/weather/now?location:%s", this.options.ApiHost, location), nil)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 设置请求头
|
|
req.Header.Set("X-QW-Api-Key", fmt.Sprintf("Bearer %s", this.options.ApiKey))
|
|
req.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd") // 模拟cURL的--compressed选项
|
|
|
|
// 发送请求
|
|
client := &http.Client{}
|
|
resp, err = client.Do(req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode != http.StatusOK {
|
|
err = fmt.Errorf("StatusCode:%d", resp.StatusCode)
|
|
return
|
|
}
|
|
// 读取并处理响应
|
|
body, err = io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
result = &WeatherResponse{}
|
|
err = json.Unmarshal(body, result)
|
|
return
|
|
}
|
|
|