当前位置: 首页 > news >正文

解决OpenWeatherMap API秘钥激活后仍无法使用

OpenWeatherMap的免费应用程序接口

OpenWeatherMap.org是一个提供许多免费和付费天气API的平台。你可以通过其API获取天气预报、地理信息等数据。
其所有API均在其官网价格页列出。至于免费API,则需要滚动到页面最底部才能查看。哦,多么愚蠢的设计。

使用免费API

如果想使用其免费API,必须先注册账号后获取API秘钥。完成注册后,我们可以在API秘钥页面创建和管理秘钥。
新账号默认只有一个默认秘钥。我们可以点击右边的生成创建一个新的秘钥。

之后,理论上,我们就能在自己的程序中使用新创建的秘钥访问免费API了。

违反直觉的错误

那么让我们尝试一下。例如,我们想通过其免费地理坐标(Geocoding)API获取北京市的坐标。我们可以先阅读其官方文档(https://openweathermap.org/api/geocoding-api?collection=other)。

阅读后得知,对于其中的q参数,调用时也可以只提供市名和国家代码,而州(省)名并非强制,例如像下面这样。

f'http://api.openweathermap.org/geo/1.0/direct?q={city_name},{country_code}&appid={api_key}'

既然如此,我们已对如何使用了然于心。我们可以编写一个简单的程序,获取北京市的经纬度。

importrequestsimportjson city_name='Beijing'country_code='CN'api_key='你的API秘钥'r=requests.get((f'http://api.openweathermap.org/geo/1.0/direct?'f'q={city_name},{country_code}&appid={api_key}'))print(json.dumps(r.json(),indent=2))

我们的程序将先导入必要的库——requests用于收发请求,json用于处理JSON格式的返回数据。

requests库可能需要额外安装。在Windows上,你可以使用命令pip install requests

我们紧接着定义了一些变量用于储存关键信息,例如此次查询的城市,其所属国家的双字母国际代码以及我们的API秘钥。紧接着,我们向API接口地址发送查询请求,并将响应对象储存在变量r中。
由于我们知道响应格式为JSON,我们调用响应对象的.json()方法来返回Python数据结构的JSON数据,并将它使用json.dumps()函数优美地打印在终端中,自动添加2个空格的缩进。

实际结果

然而我们却得到了一条丑陋的错误。

{"cod":401,"message":"Invalid API key. Please see https://openweathermap.org/faq#error401 for more info."}

怎么可能?!

解决

查阅其官方文档(https://openweathermap.org/faq#error401),发现API秘钥创建后要等待数个小时才能真正激活。

好吧,真是“贴心”呢。
等待约半小时后,问题自动解决。

PSE:\...> python geocode.py
[{"name":"Beijing","local_names":{"da":"Beijing","ps":"\u0628\u06d0\u062c\u0646\u06ab","ru":"\u041f\u0435\u043a\u0438\u043d","dv":"\u0784\u07a9\u0796\u07a8\u0782\u07b0\u078e","fo":"Beijing","gl":"Pequ\u00edn","ascii":"Beijing","pl":"Pekin","pa":"\u0a2c\u0a40\u0a1c\u0a3f\u0a70\u0a17","nn":"Beijing","ug":"\u0628\u06d0\u064a\u062c\u0649\u06ad \u0634\u06d5\u06be\u0649\u0631\u0649","kl":"Beijing","uz":"Pekin","sv":"Beijing","io":"Beijing","it":"Pechino","my":"\u1015\u1031\u1000\u103b\u1004\u103a\u1038\u1019\u103c\u102d\u102f\u1037","id":"Beijing","gd":"Beijing","eu":"Pekin","am":"\u1264\u12ea\u1302\u1295\u130d","gn":"Pek\u0129","ms":"Beijing","os":"\u041f\u0435\u043a\u0438\u043d","el":"\u03a0\u03b5\u03ba\u03af\u03bd\u03bf","kk":"\u0411\u0435\u0439\u0436\u0456\u04a3","jv":"Beijing","et":"Peking","af":"Beijing","tk":"Pekin","sk":"Peking","kv":"\u041f\u0435\u043a\u0438\u043d","fa":"\u067e\u06a9\u0646","la":"Pechinum","tl":"Beijing","zh":"\u5317\u4eac\u5e02","hi":"\u092c\u0940\u091c\u093f\u0902\u0917","te":"\u0c2c\u0c40\u0c1c\u0c3f\u0c02\u0c17\u0c4d","bn":"\u09ac\u09c7\u0987\u099c\u09bf\u0982","he":"\u05d1\u05d9\u05d9\u05d2'\u05d9\u05df","mi":"Beijing","vi":"B\u1eafc Kinh","hy":"\u054a\u0565\u056f\u056b\u0576","ne":"\u092c\u0947\u0907\u091c\u093f\u0919","mk":"\u041f\u0435\u043a\u0438\u043d\u0433","kw":"Beijing","ar":"\u0628\u0643\u064a\u0646","sr":"\u041f\u0435\u043a\u0438\u043d\u0433","ja":"\u5317\u4eac\u5e02","an":"Pequ\u00edn","si":"\u0db6\u0dd9\u0dba\u0dd2\u0da2\u0dd2\u0d82","gu":"\u0aac\u0ac7\u0a87\u0a9c\u0abf\u0a82\u0a97","az":"Pekin","ba":"\u041f\u0435\u043a\u0438\u043d","ko":"\ubca0\uc774\uc9d5 \uc2dc","sl":"Peking","be":"\u041f\u0435\u043a\u0456\u043d","ia":"Beijing","sq":"Pekini","de":"Peking","en":"Beijing","na":"Beijing","mn":"\u0411\u044d\u044d\u0436\u0438\u043d","ga":"B\u00e9ising","es":"Pek\u00edn","ta":"\u0baa\u0bc6\u0baf\u0bcd\u0b9c\u0bbf\u0b99\u0bcd","feature_name":"Beijing","th":"\u0e1b\u0e31\u0e01\u0e01\u0e34\u0e48\u0e07","ca":"Pequ\u00edn","cs":"Peking","ml":"\u0d2c\u0d46\u0d2f\u0d4d\u200c\u0d1c\u0d3f\u0d19\u0d4d\u0d19\u0d4d","qu":"Pikkin","tg":"\u041f\u0435\u043a\u0438\u043d","ku":"Pek\u00een","ay":"Pekin'","nl":"Peking","sw":"Beijing","is":"Beijing","br":"Beijing","km":"\u1794\u17c9\u17c1\u1780\u17b6\u17c6\u1784","lv":"Pekina","ka":"\u10de\u10d4\u10d9\u10d8\u10dc\u10d8","bo":"\u0f54\u0f7a\u0f0b\u0f45\u0f72\u0f44\u0f0b\u0f42\u0fb2\u0f7c\u0f44\u0f0b\u0f41\u0fb1\u0f7a\u0f62\u0f0d","mr":"\u0940\u091c\u093f\u0902\u0917","yi":"\u05d1\u05d9\u05d9\u05d6\u05e9\u05d9\u05e0\u05d2","ht":"Peken","mg":"Beijing","lt":"Pekinas","lo":"\u0e9b\u0eb1\u0e81\u0e81\u0eb4\u0ec8\u0e87","ur":"\u0628\u06cc\u062c\u0646\u06af","hr":"Peking","cv":"\u041f\u0435\u043a\u0438\u043d","tt":"\u041f\u0435\u043a\u0438\u043d","uk":"\u041f\u0435\u043a\u0456\u043d","fi":"Peking","ro":"Beijing","so":"Beijing","yo":"Beijing","bg":"\u041f\u0435\u043a\u0438\u043d","kn":"\u0cac\u0cc0\u0c9c\u0cbf\u0c82\u0c97\u0ccd","gv":"Beijing","pt":"Pequim","tr":"Pekin","eo":"Pekino","su":"Beijing","oc":"Pequin","sc":"Beijing","sa":"\u092c\u0940\u091c\u093f\u0919\u094d\u0917\u094d","cy":"Beijing","hu":"Peking","fr":"P\u00e9kin","no":"Beijing","za":"Baekging"},"lat":39.906217,"lon":116.3912757,"country":"CN","state":"Beijing"}]
http://www.jsqmd.com/news/473718/

相关文章:

  • 基于STM32的电机控制器:Keil与Proteus的嵌入式之旅
  • 鸿蒙中 应用的权限(一)
  • 心理聊天App 5款产品实测对比,哪个更适合情绪内耗的你?
  • 内存涨价、供应不稳?嵌入式工程师必看:适合轻量级项目ARM选型与存储避坑指南
  • GESP C++一级认证完全指南:考点解析与备考策略
  • SpringBoot3实战集成mzt-biz-log,一行代码搞定业务日志记录
  • 电网电压扰动下相光伏并网逆变器控制的Simulink仿真探索
  • 技术人思维看渠道品牌管理:如何让“多渠道不走样”成为可执行的工程化规则?
  • 基于Matlab的螺丝轮廓识别:数字图像处理流程
  • STM32串口双机模拟汽车电量里程项目:Protues仿真与源码解析
  • 无人零售/五金厂必看!边缘设备Java+YOLOv11推理稳定性全攻略:崩溃率从15%降到0.1%,断点续检1秒恢复
  • ThinkPHP反序列化漏洞深度解析:CacheStore组件为何成为攻击入口?
  • 探索Matlab在两相流动相场法与自适应网格中的应用
  • MATLAB代码:基于多能互补的热电联供型微网优化运行 关键词:多能互补 综合需求响应 热电联...
  • 微电网二次控制:下垂控制与基于数据采样二次控制的奇妙融合
  • 运用stata对CFPS数据库进行打开清洗和处理,以政府转移支付为例
  • 基于PDR算法的室内定位应用:运用行人轨迹推算算法实现连续定位,并优化轨迹采用卡尔曼滤波及无痕...
  • Screeps Arena 实战编程:从零构建你的RTS对战AI
  • 油藏数值模拟中的两相流动 IMPES 方法及 Matlab 实现
  • VSCODE离线环境也能玩转AI编程?手把手教你用CodeGPT插件本地跑大模型
  • 从实验室到开源社区:Scloud+后量子密码算法如何借力openHiTLS加速产业化
  • 提示词工程:这样跟AI说话,它才听你的!
  • 大模型(2):大模型推理文本分类
  • Passmark计算机系统测试工具全解析:从压力测试到性能评分
  • OAuth2.0中state参数的深度应用:业务数据的安全传输与防CSRF实践
  • 新年限定零食礼包推荐:生肖款与新品礼盒,哪一种更能代表节庆氛围? - Top品牌推荐官
  • 优化电动汽车充放电策略实现削峰填谷:一种面向多目标的Matlab调度算法
  • 如果 Canal 跑得比 MySQL 主从同步还快,脏数据怎么防?
  • CentOS7下DuckDB JDBC驱动兼容性构建实战:绕过GLIBC版本限制的三种方案
  • JavaDay07包机制及JavaDoc生成文档