查天气api

原来觉得查天气的api很简单,结果做了一天,发现这个事情没有想象的那么容易,所以写下来:

 

主要有几个事情包括几个坑一起记下来:

1. 通用的服务框架,通用协议访问后端c服务器、redis、mysql,这个没啥好讲的

2. 第一个坑,本来想试试python的服务器,结果共享内存死活搞不来,静态成员变量一到回调函数就失败,搞了1-2个小时没搞定,就放弃了,用c来解决;

3. 第二个坑,发了1天等open.weather.com.cn,结果发现数据根本就不能用

4. 第三个坑,下m.weather.com.cn,发现丢包率太高

5. 决定用这种方案,一周的天气预报每天更新一次,每天凌晨合并数据,用c服务器reload,提供kv服务,前端获取请求后,将地域换成地域id,对实时的直接获取其他网站的json包,然后对数据进行缓存redis(1个小时有效期),超过一个小时,就再次进行查询操作

6.第四个坑,尼玛,之所以一直访问失败,错误率这么高的最重要原因,是refer没有设置为http://mobile.weather.com.cn/,o(╯□╰)o

7.做的时候,觉得做天气有啥子好做的,一堆的网站做基础数据的,而且数据格式都基本一样的,弱弱的想,我直接套个壳是不是就是最快的做法,

8.今天最后的做法,就是每天8点半,开始从weather.com.cn下数据,然后更新源数据,php直接访问我们的后端服务器,实时天气,实时查询接口,然后缓存redis,每次查询先去看redis有没有数据,

9.给个链接:http://www.zhihu.com/question/20521716

10. 查实时天气的,只有地级市的查询,地级市以下的需要先回溯到地级市,然后再查询;

11.拼音查询会重名,宿州和苏州是一个拼音;

12.strpos 判断是不是一致的,用!==,这样还会判断类型,不然会把0也会算进去

 

流程图

  • 获取ID

–精确匹配(id/拼音/中文名)

–模糊匹配(精确匹配不了的情况,可以通过包含关系进行查询)

  • 获取一周天气预报

–访问后端c服务器,数据每天早上8点开始抓取

  • 获取实时天气预报

–实时抓取数据,抓取后存放在redis一个小时

发表评论

电子邮件地址不会被公开。 必填项已用*标注