You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用OpenWeatherMap空气污染预报API时提示无效密钥求助

问题排查与解决

核心问题1:URL构建错误

你在定义url时犯了两个关键错误:

  • 未使用字符串格式化语法替换{lat}、{lon}和{appid}占位符,导致API收到的是原始占位符文本,而非有效参数。
  • appid部分直接硬编码密钥到字符串中,未引用已定义的appid变量,格式错误会让API判定密钥无效。

核心问题2:经纬度变量错误

lon=df.Longitude和lat=df.Latitude获取的是整个DataFrame的列(Series对象),并非单个城市的经纬度值。直接将整个Series传入URL,会让API收到无效的坐标文本,触发错误。

修正后的代码示例

import requests
import pandas as pd

appid = 'b0gs3g26768234d11ss6jh722ff100r8e'
base_url = 'http://api.openweathermap.org/data/2.5/air_pollution/forecast?lat={}&lon={}&appid={}'

# 循环处理每个城市的经纬度
for idx, row in df.iterrows():
    lat = row['Latitude']
    lon = row['Longitude']
    # 格式化URL,替换占位符
    url = base_url.format(lat, lon, appid)
    r = requests.get(url)
    # 检查响应状态
    if r.status_code == 200:
        data = r.json()
        # 此处可处理返回数据,如存入列表或新DataFrame
        print(f"成功获取{idx}号城市数据")
    else:
        print(f"获取{idx}号城市数据失败,状态码:{r.status_code},响应内容:{r.text}")

额外注意事项

  • 确认API密钥权限:确保你的密钥已开通空气污染预报API的访问权限,部分免费密钥存在功能限制。
  • 控制调用频率:OpenWeatherMap有API调用频率限制,处理180个城市时建议添加延时(如time.sleep(1)),避免触发限流。

内容的提问来源于stack exchange,提问作者user20387029

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:10:57