目前天气api有不少,能提供历史天气的api不多,易客云是其中之一,历史天气提供了气压、降雨量、湿度等其他历史天气api里少有的数据。
以下以python语言为例,调取易客云历史天气api。
请求方式及url:
-
请求方式:
GET
-
接口地址:(请将线路地址设置在服务端, 为动态可修改的, 请勿在C端直连接口, 防止遇到网络问题导致程序异常。)
- 线路1(推荐):
http://v0.yiketianqi.com/api
- 线路2:
http://v1.yiketianqi.com/api
请求示例 (该请求账号为测试账号, 不定期失效, 请使用自己的账号appid和appsecret)
http://v1.yiketianqi.com/free/history?appid=&appsecret=&cityid=101120101&year=2023&month=1&date=
import requests
import json
import pandas as pd
import time
# 中国 293 个地级城市列表
cities = [
"北京", "上海", "天津", "重庆",
"石家庄", "太原", "呼和浩特", "沈阳", "长春", "哈尔滨",
"南京", "杭州", "合肥", "福州", "南昌", "济南", "郑州",
"武汉", "长沙", "广州", "南宁", "海口", "成都", "贵阳",
"昆明", "拉萨", "西安", "兰州", "西宁", "银川", "乌鲁木齐",
"大连", "青岛", "宁波", "厦门", "深圳",
# 此处省略其余城市名称
]
# 月份列表
months = [5, 6]
years = [2023, 2024]
data_list = []
for year in years:
for month in months:
for city in cities:
url = f"http://v1.yiketianqi.com/api?version=history&appid=&appsecret=&city={city}&year={year}&month={month}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
if 'data' in data and 'days' in data['data']:
for day_data in data['data']['days']:
date = day_data['date']
tem_day = day_data['tem_day']
tem_night = day_data['tem_night']
precipPct = day_data['precipPct']
data_list.append([date, city, tem_day, tem_night, precipPct])
else:
print(f"获取 {city} {year} 年 {month} 月天气数据失败,状态码:{response.status_code}")
time.sleep(1) # 为了避免频繁请求,添加一秒的延迟
# 将数据转换为 DataFrame
df = pd.DataFrame(data_list, columns=['日期', '地级城市', '最高温', '最低温', '降雨量'])
# 保存为 Excel
df.to_excel('weather_data.xlsx', index=False)
将请求获取的数据填入excel表格。