文档章节

python制作天气数据api

GIS土匪
 GIS土匪
发布于 2018/09/24 12:02
字数 1385
阅读 116
收藏 0

精选30+云产品,助力企业轻松上云!>>>

偶然工作中用到了天气状况数据,后来就不需要了,但还是想做一个天气的,因为想给自己的女票做个天气短信提醒。说搞就搞,第一想法就是apistore,上去了之后,好贵。。。,百度一了一下,全都不好用,决定自己写一个,自己动手丰衣足食嘛。再百度天气,中国天气网是第一条,还是官方的,说明应该不错,点进去之后,看了数据,需求基本满足了,那么,走起。

百度搜索引擎(本人声明,不是百度员工)百度搜索引擎(本人声明,不是百度员工)

第一步:查询数据源。google打开天气网,搜了下北京天气,alt+cmd+i打开调试模式(mac快快捷键),network查看数据来源。经过分析,基本可以确定数据主要来源于2个接口:http://d1.weather.com.cn/dingzhi/101010100.html?_=1537709265753(地之一)和http://d1.weather.com.cn/sk_2d/101010100.html?_=1537709265752(地址二),多打开了几个别的城市进行查看,最后结论:101010100参数一城市的id值,1537709265753参数二时间戳(毫秒级)。

调试&&分析调试&&分析

 

第二步:获取城市id。在官网反反复复尝试获取城市的数据,发个城市id有几个规律:

  1. 城市id由9位数字组成(可能大家觉得感觉有点废话了,别急往后看),例如:北京101010100;
  2. 城市id的第三位,第四位是表示省份(免费普及一下:中国34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区),01-北京,02-上海,03-天津,04-重庆。。。34-台湾;
  3. 后三位尾数,针对于直辖市,尾数从000开始计数,非直辖市尾数从001开始计数;
  4. 天气网数据细到乡镇,街道。乡镇的id:101080503(cityid) + xxx(数字,001开始),12位组成;街道数据过于细致,没必要获取,而且本人能力有限,只初始化了到城市级别的的数据。
  5. 额外赠送:中国每个省份的城市最大值位21,代码中会用到

知道规律,也了解了request url,response,就可以搞定城市id的数据源了。解决方法如下:

语言:python

思想:依据id的范围生成范围id,requests去get请求,获取结果

要点:

  • 省份的标志位01~04位直辖市,05~34非直辖市,城市的标志位01~23即可
  • header必须含有Referer值,应该用来做一个访问标识
  • response返回值类型是string,但是weatherinfo的信息为json,需转化

不多说,直接上代码:

城市id值生成城市id值生成

第三步:数据入库。数据库决定直接用sqlite,主要考虑到数据库的可移植性,git项目直接运行就可以,不用额外配置数据库,而且单张表,数据量不会很大,性能没有太高要求。python + requests + sqlalchemy + db,玩py的不知道sqlalchemy&&requests,自己赶快恶补一下吧。。。废话也不多说,git项目看db.py文件,创建表以及数据库见下图:

数据库创建&&表查询数据库创建&&表查询

城市id获取的整理流程设计ok,执行python citys.py就可以见证奇迹。不过,这个奇迹有点慢而已,我的本大概执行了30个小时左右,后来想的是python配合多进程(GIL机制,不要使用多线程)来提速,搞了个pool在那,不过我把多进程注释了,有兴趣的人可以去试下多进程。

第四步:api接口服务。做web服务,flask是不错的选择,简单易用,性能也不差。用blueprint做了个weather的接口,但是信息由地址一与地址二组成,地址一主要用来获取最高/最低温度,地址二获取实时的天气相关信息,请求的地址参数均由第三步回去的城市id以及时间戳。

requests基础:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

请求的时候,我把浏览器正常访问的header都记录,请求成功,把结果封装json返回。在controller那,我对请求方式,请求参数做了限制,加强接口的严谨性。详细自己看代码,post请求的参数那块,args,form,json,get_json分不清的,请自行百度,我做了个小技巧:

获取post请求参数获取post请求参数

第五步:测试。这里介绍2种测试方式,postman + curl。

curl:curl -X POST http://127.0.0.1:8888/weather/ -H 'Content-Type: application/json' -d '{"city": "昌平"}' | python -m json.tool

postman:图形化界面。。。自己点把

没有curl命令的,自己搞下,做开发的话,不知道curl,会很low的,看下结果,完美:

成果,给自己点个赞成果,给自己点个赞

 

总结:代码很简单,不过在获取数据源id上花费了一些时间,后来一想,城市id的表有个问题,表有:id,cityname,cityid 3个字段,没有记录省份,查询同名的城市可能会有问题,后续在改吧。。。就先到这里了,我是程序猿,python程序猿。

二期功能:定时任务 + 短信提醒 + 邮件报警

项目git地址https://github.com/GIS90/weathers

GIS土匪
粉丝 1
博文 16
码字总数 9630
作品 0
海淀
私信 提问
加载中
请先登录后再评论。
[Python实战]Python制作天气查询软件 - 知乎

以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件。 开发环境 Python3 PyQt5 requests 准备工作 首先要获取不同城市对应的天...

Python 实战
2019/10/21
0
0
四行Python代码就能知道你那的天气,你敢信? - 知乎

今天给大家带来的Python实战项目是四行Python代码获取所在城市的天气预报,我们隐隐听到唏嘘声,不信四行Python代码可以获取是吗?那我们一起来看看: 使用Python获取天气预报,想想是件很简单...

Python头条
2019/10/21
0
0
利用树莓派制作天气闹钟

前言 为了能让刚买的树莓派有效的利用起来(避免吃灰),今天分享一下如何用树莓派做天气闹钟。 环境及工具 树莓派3B+、IDE、XShell、FileZilla(FTP文件上传)、小音箱。 查询天气 准备 既然要...

张宁宁1998
2019/06/03
27
0
PythonGUI编程|使用Tkinter制作快递查询软件

前言 GUI(图形用户界面) 想必大家都不陌生,简单来说就是将代码变成可以交互式操作的界面。在Python中就提供了多个图形开发界面的库,比如 Tkinter 、 wxPython 、 Jython 等,本文将使用Tki...

osc_dg21zk4i
05/05
10
0
[视频教程]手把手教你用python“查天气” - 知乎

用python写一个查天气https://www.zhihu.com/video/1172522553284775936 “查天气”是编程教室课程里比较经典的一个开发案例。它的开发难度不算大,但作为对网络请求、文件读写、类型转换、循...

Crossin的编程教室
2019/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PG库实现 t+1 同步

需求:业务场景中有很多需要查询t+1的数据,但又不想影响生产实时的业务,是否可以搭建一个延时的灾备库就可以解决这个问题呢。 问题:如何实现延时? 解决方向:recovery_min_apply_delay ...

易野
45分钟前
17
0
jpgraph 实例文档

下载 在官方网站http://www.aditus.nu/jpgraph/ 下载jpgraph,其中1.X系列是用于PHP4的,2.X系列是用于PHP5的。 安装 将下载的得到的jpgraph压缩文件解压至相应的路径。 配置 首先需要注意的...

osc_2ch77h9m
46分钟前
9
0
画IDC状态趋势图

[背景]公司以前对IDC状态的测试都是通过perl+crond结合,向指定某IDC的IP发送icmp包,并将其结果保存到test.log下,对于后斯的分析,是采取手工的方式(格式化数据,结合excel),这样操作下...

osc_moibnxyj
46分钟前
13
0
整理性能计数器注释

[前话]收集性能计数器注释,以备使用! [内容] 1 % Processor Time (Processor _Total) 指处理器用来执行非闲置线程时间的百分比。计算方法是,度量处理器用来执行空闲线程的时间,然后用 10...

osc_5nscij7v
48分钟前
12
0
你想要的WinForm界面开发教程在这里 - 如何设置较厚的表格边框

下载DevExpress v20.1完整版 DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。想要体验?点击下载>> 应用程序的外观随时代发展不断变化,自厚...

FILA6666
48分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部