56 lines
1.3 KiB
V
56 lines
1.3 KiB
V
import json
|
|
import rand
|
|
import net.http
|
|
|
|
struct Weather {
|
|
status string [skip] // drop this field
|
|
api_version string [skip]
|
|
api_status string [skip]
|
|
lang string [skip]
|
|
unit string [skip]
|
|
tzshift int [skip]
|
|
timezone string [skip]
|
|
server_time u32 [skip]
|
|
location []f32 [skip]
|
|
result Result //[json: result] if the field name is different in JSON, it can be specified
|
|
}
|
|
|
|
struct Result {
|
|
realtime Realtime [skip]
|
|
minutely Minutely [skip]
|
|
hourly Hourly [skip]
|
|
daily Daily [skip]
|
|
primary int [skip]
|
|
forecast_keypoint string
|
|
}
|
|
|
|
struct Realtime {}
|
|
|
|
struct Minutely {}
|
|
|
|
struct Hourly {}
|
|
|
|
struct Daily {}
|
|
|
|
fn main() {
|
|
config := http.FetchConfig{
|
|
user_agent: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
|
|
}
|
|
|
|
rnd := rand.f32()
|
|
url := 'https://api.caiyunapp.com/v2.5/96Ly7wgKGq6FhllM/116.391912,40.010711/weather.jsonp?hourlysteps=120&random=$rnd'
|
|
// println(url)
|
|
|
|
resp := http.fetch(http.FetchConfig{ ...config, url: url }) or {
|
|
println('failed to fetch data from the server')
|
|
return
|
|
}
|
|
|
|
weather := json.decode(Weather, resp.body) or {
|
|
println('failed to decode weather json')
|
|
return
|
|
}
|
|
|
|
println('未来两小时天气:\n${weather.result.forecast_keypoint}.')
|
|
}
|