跳转至

天气预报

基于国内外主流气象数值预报模型建立的气象预报数据查询接口。

逐小时预报

概览

项目 内容
方法 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