天气预报
基于国内外主流气象数值预报模型建立的气象预报数据查询接口。
逐小时预报
概览
| 项目 | 内容 |
|---|---|
| 方法 | GET |
| 路径 | https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly |
| 定价 | 每次成功调用 10 资源点 |
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
latitude |
float | 是 | — | 纬度 WGS84,范围 -90 ~ 90 |
longitude |
float | 是 | — | 经度 WGS84,范围 -180 ~ 180 |
dataset |
string | 否 | — | 数据集:surface / solar_radiation / soil_moisture |
elements |
string | 否 | 全部要素 | 要素名,逗号分隔 |
timezone |
string | 否 | Asia/Shanghai |
返回时间戳的 IANA 时区 |
forecast_hours |
int | 否 | 168 |
预报小时数,范围 1 ~ 240 |
响应示例
{
"code": 0,
"message": "ok",
"data": {
"meta": {
"dataset": "surface",
"elements": ["temperature", "humidity"]
},
"data": {
"time": [
"2025-01-15T09:00:00+08:00",
"2025-01-15T10:00:00+08:00"
],
"temperature": [12.5, 13.2],
"humidity": [68, 65]
}
},
"request_id": "req_a1b2c3d4e5f6"
}
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
data.meta.dataset |
string | 数据集标识 |
data.meta.elements |
array | 本次返回的要素名列表 |
data.data.time |
array | 预报时次数组,ISO 8601 格式 |
data.data.<element> |
array | 各气象要素的时间序列数组,与 time 一一对应 |
data.data中的具体要素名由请求参数elements决定,常见要素名如temperature(气温 °C)、humidity(相对湿度 %)、pressure(气压 hPa)、wind_speed(风速 m/s)等。不传elements时返回全部可用要素。
代码示例
# 更换为您的以 sk- 开头的 API Key 字符串
curl -s \
-H "Authorization: Bearer sk-d5d0542bef7e42e2b8909cb7f42af5fb" \
"https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly?latitude=39.9312&longitude=116.3852&forecast_hours=24"
import json, urllib.request
from urllib.parse import urlencode
API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb" # 更换为您的以 sk- 开头的 API Key 字符串
params = urlencode({
"latitude": 39.9312, "longitude": 116.3852,
"forecast_hours": 24,
"timezone": "Asia/Shanghai",
})
url = f"https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly?{params}"
req = urllib.request.Request(
url, headers={"Authorization": f"Bearer {API_KEY}"}
)
with urllib.request.urlopen(req, timeout=30) as resp:
result = json.loads(resp.read().decode())
fc = result["data"]["data"]
for t, temp in zip(fc["time"], fc.get("temperature", [])):
print(f"{t}: {temp}°C")
const API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
const params = new URLSearchParams({
latitude: 39.9312, longitude: 116.3852, forecast_hours: 24, timezone: "Asia/Shanghai",
});
const url = `https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly?${params}`;
const resp = await fetch(url, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const result = await resp.json();
const { time, temperature } = result.data.data;
time.forEach((t, i) => console.log(`${t}: ${temperature[i]}°C`));
const API_KEY: string = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
const params = new URLSearchParams({
latitude: "39.9312", longitude: "116.3852", forecast_hours: "24",
});
const url = `https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly?${params}`;
const resp = await fetch(url, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const result: any = await resp.json();
const { time, temperature } = result.data.data;
time.forEach((t: string, i: number) => {
console.log(`${t}: 气温 ${temperature[i]}°C`);
});
apiKey := "sk-d5d0542bef7e42e2b8909cb7f42af5fb" // 更换为您的以 sk- 开头的 API Key 字符串
params := url.Values{}
params.Set("latitude", "39.9312")
params.Set("longitude", "116.3852")
params.Set("forecast_hours", "24")
params.Set("timezone", "Asia/Shanghai")
apiUrl := "https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly?" + params.Encode()
req, _ := http.NewRequest("GET", apiUrl, nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var result map[string]interface{}
json.Unmarshal(body, &result)
fc := result["data"].(map[string]interface{})["data"].(map[string]interface{})
times := fc["time"].([]interface{})
temps := fc["temperature"].([]interface{})
for i, t := range times {
fmt.Printf("%v: %v°C\n", t, temps[i])
}
String API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
String query = String.format("latitude=%s&longitude=%s&forecast_hours=%s&timezone=%s",
URLEncoder.encode("39.9312", StandardCharsets.UTF_8),
URLEncoder.encode("116.3852", StandardCharsets.UTF_8),
URLEncoder.encode("24", StandardCharsets.UTF_8),
URLEncoder.encode("Asia/Shanghai", StandardCharsets.UTF_8));
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly?" + query))
.header("Authorization", "Bearer " + API_KEY)
.GET().build();
HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
using System.Net.Http;
using System.Text.Json;
var apiBase = "https://standard.data-api.skyviewor.host";
var apiKey = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var json = await client.GetStringAsync($"{apiBase}/v1/weather/forecast/point/hourly?latitude=39.9312&longitude=116.3852&forecast_hours=24");
using var doc = JsonDocument.Parse(json);
var data = doc.RootElement.GetProperty("data").GetProperty("data");
var times = data.GetProperty("time").EnumerateArray().ToArray();
var temps = data.GetProperty("temperature").EnumerateArray().ToArray();
for (int i = 0; i < times.Length; i++)
{
Console.WriteLine($"{times[i].GetString()}: 气温 {temps[i].GetDouble()}°C");
}
$API_BASE = "https://standard.data-api.skyviewor.host";
$API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
$ch = curl_init("{$API_BASE}/v1/weather/forecast/point/hourly?latitude=39.9312&longitude=116.3852&forecast_hours=24");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer {$API_KEY}"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
$data = $result['data']['data'];
foreach ($data['time'] as $i => $t) {
echo "{$t}: 气温 {$data['temperature'][$i]}°C\n";
}
library(httr)
library(jsonlite)
API_KEY <- "sk-d5d0542bef7e42e2b8909cb7f42af5fb" # 更换为您的以 sk- 开头的 API Key 字符串
resp <- GET(
"https://standard.data-api.skyviewor.host/v1/weather/forecast/point/hourly",
query = list(
latitude = 39.9312, longitude = 116.3852,
forecast_hours = 24, timezone = "Asia/Shanghai"
),
add_headers(Authorization = paste("Bearer", API_KEY))
)
result <- fromJSON(content(resp, "text", encoding = "UTF-8"))
fc <- result$data$data
for (i in seq_along(fc$time)) {
cat(sprintf("%s: %.1f°C\n", fc$time[i], fc$temperature[i]))
}
api_base = 'https://standard.data-api.skyviewor.host';
api_key = 'sk-d5d0542bef7e42e2b8909cb7f42af5fb'; % 更换为您的以 sk- 开头的 API Key 字符串
options = weboptions('HeaderFields', {'Authorization', ['Bearer ' api_key]}, 'Timeout', 30);
result = webread([api_base '/v1/weather/forecast/point/hourly?latitude=39.9312&longitude=116.3852&forecast_hours=24'], options);
fc = result.data.data;
for i = 1:length(fc.time)
fprintf('%s: 气温 %.1f°C\n', fc.time{i}, fc.temperature(i));
end
逐日预报
概览
| 项目 | 内容 |
|---|---|
| 方法 | GET |
| 路径 | https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily |
| 定价 | 每次成功调用 10 资源点 |
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
latitude |
float | 是 | — | 纬度 WGS84,范围 -90 ~ 90 |
longitude |
float | 是 | — | 经度 WGS84,范围 -180 ~ 180 |
dataset |
string | 否 | — | 数据集:surface / solar_radiation / soil_moisture |
elements |
string | 否 | 全部要素 | 要素名,逗号分隔 |
timezone |
string | 否 | Asia/Shanghai |
返回时间戳的 IANA 时区 |
forecast_days |
int | 否 | 7 |
预报天数,范围 0 ~ 16 |
参数含义与逐小时预报一致。返回的是逐日聚合数据(如日最高/最低温度)。
响应示例
{
"code": 0,
"message": "ok",
"data": {
"meta": {
"dataset": "surface",
"elements": ["temperature_max", "temperature_min"]
},
"data": {
"time": ["2025-01-15", "2025-01-16", "2025-01-17"],
"temperature_max": [15.2, 14.8, 13.5],
"temperature_min": [8.1, 7.3, 6.9]
}
},
"request_id": "req_a1b2c3d4e5f6"
}
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
data.meta.dataset |
string | 数据集标识 |
data.meta.elements |
array | 本次返回的要素名列表 |
data.data.time |
array | 预报日期数组,yyyy-mm-dd 格式 |
data.data.<element> |
array | 各气象要素的时间序列数组,与 time 一一对应 |
data.data中的具体要素名由请求参数elements决定。逐日预报常见要素名如temperature_max(日最高温 °C)、temperature_min(日最低温 °C)、humidity_max(日最大湿度 %)、precipitation(日降水量 mm)等。不传elements时返回全部可用要素。
代码示例
# 更换为您的以 sk- 开头的 API Key 字符串
curl -s \
-H "Authorization: Bearer sk-d5d0542bef7e42e2b8909cb7f42af5fb" \
"https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily?latitude=39.9312&longitude=116.3852&forecast_days=7"
import json, urllib.request
from urllib.parse import urlencode
API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb" # 更换为您的以 sk- 开头的 API Key 字符串
params = urlencode({
"latitude": 39.9312, "longitude": 116.3852,
"forecast_days": 7,
"timezone": "Asia/Shanghai",
})
url = f"https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily?{params}"
req = urllib.request.Request(
url, headers={"Authorization": f"Bearer {API_KEY}"}
)
with urllib.request.urlopen(req, timeout=30) as resp:
result = json.loads(resp.read().decode())
fc = result["data"]["data"]
for i, day in enumerate(fc["time"]):
tmax = fc.get("temperature_max", [])[i] if "temperature_max" in fc else "—"
tmin = fc.get("temperature_min", [])[i] if "temperature_min" in fc else "—"
print(f"{day}: {tmin}°C ~ {tmax}°C")
const API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
const params = new URLSearchParams({
latitude: 39.9312, longitude: 116.3852, forecast_days: 7, timezone: "Asia/Shanghai",
});
const url = `https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily?${params}`;
const resp = await fetch(url, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const result = await resp.json();
const { time, temperature_max, temperature_min } = result.data.data;
time.forEach((day, i) => {
console.log(`${day}: ${temperature_min?.[i] ?? "—"}°C ~ ${temperature_max?.[i] ?? "—"}°C`);
});
const API_KEY: string = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
const params = new URLSearchParams({
latitude: "39.9312", longitude: "116.3852", forecast_days: "7",
});
const url = `https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily?${params}`;
const resp = await fetch(url, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const result: any = await resp.json();
const { time, temperature_max, temperature_min } = result.data.data;
time.forEach((day: string, i: number) => {
console.log(`${day}: ${temperature_min?.[i] ?? "—"}°C ~ ${temperature_max?.[i] ?? "—"}°C`);
});
apiKey := "sk-d5d0542bef7e42e2b8909cb7f42af5fb" // 更换为您的以 sk- 开头的 API Key 字符串
params := url.Values{}
params.Set("latitude", "39.9312")
params.Set("longitude", "116.3852")
params.Set("forecast_days", "7")
params.Set("timezone", "Asia/Shanghai")
apiUrl := "https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily?" + params.Encode()
req, _ := http.NewRequest("GET", apiUrl, nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var result map[string]interface{}
json.Unmarshal(body, &result)
fc := result["data"].(map[string]interface{})["data"].(map[string]interface{})
days := fc["time"].([]interface{})
tmaxList, _ := fc["temperature_max"].([]interface{})
tminList, _ := fc["temperature_min"].([]interface{})
for i, d := range days {
fmt.Printf("%v: %v°C ~ %v°C\n", d, tminList[i], tmaxList[i])
}
String API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
String query = String.format("latitude=%s&longitude=%s&forecast_days=%s&timezone=%s",
URLEncoder.encode("39.9312", StandardCharsets.UTF_8),
URLEncoder.encode("116.3852", StandardCharsets.UTF_8),
URLEncoder.encode("7", StandardCharsets.UTF_8),
URLEncoder.encode("Asia/Shanghai", StandardCharsets.UTF_8));
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily?" + query))
.header("Authorization", "Bearer " + API_KEY)
.GET().build();
HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
using System.Net.Http;
using System.Text.Json;
var apiBase = "https://standard.data-api.skyviewor.host";
var apiKey = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var json = await client.GetStringAsync($"{apiBase}/v1/weather/forecast/point/daily?latitude=39.9312&longitude=116.3852&forecast_days=7");
using var doc = JsonDocument.Parse(json);
var data = doc.RootElement.GetProperty("data").GetProperty("data");
var times = data.GetProperty("time").EnumerateArray().ToArray();
var tmaxList = data.TryGetProperty("temperature_max", out var tmax) ? tmax.EnumerateArray().ToArray() : Array.Empty<JsonElement>();
var tminList = data.TryGetProperty("temperature_min", out var tmin) ? tmin.EnumerateArray().ToArray() : Array.Empty<JsonElement>();
for (int i = 0; i < times.Length; i++)
{
Console.WriteLine($"{times[i].GetString()}: {tminList[i].GetDouble()}°C ~ {tmaxList[i].GetDouble()}°C");
}
$API_BASE = "https://standard.data-api.skyviewor.host";
$API_KEY = "sk-d5d0542bef7e42e2b8909cb7f42af5fb"; // 更换为您的以 sk- 开头的 API Key 字符串
$ch = curl_init("{$API_BASE}/v1/weather/forecast/point/daily?latitude=39.9312&longitude=116.3852&forecast_days=7");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer {$API_KEY}"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
$data = $result['data']['data'];
foreach ($data['time'] as $i => $day) {
$tmax = $data['temperature_max'][$i] ?? '—';
$tmin = $data['temperature_min'][$i] ?? '—';
echo "{$day}: {$tmin}°C ~ {$tmax}°C\n";
}
library(httr)
library(jsonlite)
API_KEY <- "sk-d5d0542bef7e42e2b8909cb7f42af5fb" # 更换为您的以 sk- 开头的 API Key 字符串
resp <- GET(
"https://standard.data-api.skyviewor.host/v1/weather/forecast/point/daily",
query = list(
latitude = 39.9312, longitude = 116.3852,
forecast_days = 7, timezone = "Asia/Shanghai"
),
add_headers(Authorization = paste("Bearer", API_KEY))
)
result <- fromJSON(content(resp, "text", encoding = "UTF-8"))
fc <- result$data$data
for (i in seq_along(fc$time)) {
cat(sprintf("%s: %.1f°C ~ %.1f°C\n",
fc$time[i], fc$temperature_min[i], fc$temperature_max[i]))
}
api_base = 'https://standard.data-api.skyviewor.host';
api_key = 'sk-d5d0542bef7e42e2b8909cb7f42af5fb'; % 更换为您的以 sk- 开头的 API Key 字符串
options = weboptions('HeaderFields', {'Authorization', ['Bearer ' api_key]}, 'Timeout', 30);
result = webread([api_base '/v1/weather/forecast/point/daily?latitude=39.9312&longitude=116.3852&forecast_days=7'], options);
fc = result.data.data;
for i = 1:length(fc.time)
fprintf('%s: %.1f°C ~ %.1f°C\n', fc.time{i}, fc.temperature_min(i), fc.temperature_max(i));
end