调用彩云API获取实时天气
使用彩云API的基本准备
- 免费账号总是访问失败,因此需要申请公益项目账号(至少提交个人姓名和电话),这需要大约一天的时间。申请成功以后,就获得了一个个人token。
- 需要将示例地址中的token换成个人token。例如:https://api.caiyunapp.com/v2/TAkhjf8d1nlSlspN/121.6544,25.1552/realtime.json中的TAkhjf8d1nlSlspN是测试公用的token,我测试了一天基本没有访问成功过。将这个换成个人账户中的token,访问网址,就可得到json格式的返回结果,说明访问成功。
使用彩云API的步骤分析
1.下载城市与经纬度的对应表; 2.通过经纬度构造URL; 3.通过包含城市信息的URL,(requests)获得天气情况; 4.(json)解析结果并取出合适的数据。
探索过程
爬取数据BeautifulSoup
从彩云wiki中获得城市与经纬度的对照表,需要下载表格,选择“城市”和“经纬度”两列数据,保存到字典中。这可通过Beautiful Soup模块实现。首先,安装模块,和其他的第三方模块一样,可以下载最新版源代码bs4.1.0到python3的目录中,(旧版本不支持Python3,使用中会报错。)
接着,使用bs模块中的方法提取html标签中符合要求的数据项。这个过程中,需考虑不同数据的数据类型,才能正确处理。其次,html标签和内容是不同的概念。提取内容的时候,需专门获取tag中字符串。在CLI中print显示出来的内容与实际的内容不是一回事。
调用心知API
改成调用心知API,问题大大简化了。这是因为,心知API支持的URL格式更广泛:不局限于经纬度,还可以支持中文、英文或拼音等多种形式,这就让url的构建更容易。
CLI查询实时天气
在chap1的CLI基础上修改,只需要构建实时查询的函数,通过requests和json模块,提取需要的天气数据即可。
GUI查询试试天气
在chap2的GUI基础上修改,需要从entry获得输入的字符,然后通过entry.get(),可以得到文本字符,并构建url,即可完成查询天气。