aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/get_weather/get_weather.v
blob: 4de057207d28c5d8082740024b1304d561241ad0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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.text) or {
		println('failed to decode weather json')
		return
	}

	println('未来两小时天气:\n${weather.result.forecast_keypoint}.')
}