上周有人想给单位大屏做个气象展示,开口就说去爬南方一个城市的逐小时预报,页面一抓就跳登录验证,心态崩了。其实走正规渠道申请一个 key,一天也就十分钟的事。

地址直接记 weatherdata 这个域名下的用户管理页,新用户先注册企业邮箱,个人邮箱也行,但审核慢很多,工作日早上提交一般中午就过。

申请流程四步别跳过认证环节

登录后进控制台,点应用管理新建应用,填应用名称、用途说明、绑定的域名或包名。个人用户选体验版就行,实况加逐三小时预报够做小挂件了,企业用户再去选授权版。要调用之前,记得把账号实名认证做掉,没实名接口直接返回 401,这是被问爆的一条。

创建成功会给你 APPID 和 APPKEY,注意这两个一次只显示完整一次,复制下来存好。请求时拼在 URL 参数里,一般是 appid 加 appkey 再加城市编码加时间戳签名,签名算法在文档示例里有现成的,照搬就行。

城市编码表坑最多

它的城市编码是自己那一套,不是行政区划码,北京朝阳和北京是不同的两个码。控制台里有个编码下载入口,导出来是个表格,搜索城市名对着填。常见报错 204 就是城市码写错了,改对立马 200。

  • 小博客挂件:用实况接口,一小时缓存一次,别每次刷新都调
  • 大屏展示:逐小时接口配本地缓存,断网时还能撑半天
  • 告警推送:预警接口单独轮询,频率压到十分钟一次

免费版限量一般是每天几千次,个人博客够用了,超了就返回限流码,这时候加缓存或者升级套餐,别去多注册小号轮着刷,被封了申诉很麻烦。

再说接口返回结构,实况接口给的是温度、湿度、风向、风力、气压、能见度这几项,逐三小时接口是按时间点铺开的数组。解析时字段名对不上就取到空,先用打印把整段响应打出来,看清字段再写取值逻辑,少走一趟弯路。

免费版还有个容易忽略的限制,请求要走 https,某些老服务器系统时间不对会导致签名失效,表现是一律返回鉴权失败。先把机器时间对一下网络时间,再排查签名,这一步能省不少来回。

一句话:先实名,再建应用拿双 key,对准城市码,剩下的就是缓存和频率的活。