基于python的终端天气查询

一、 天气接口

网上搜了一个,最开始准备使用中国天气网的数据接口,但是需要注册,也行,注册就注册吧。

注册好了,又提示信息不完整,好吧,填写姓名、身份证...

最后,还要上传身份证信息,看到这我不想用它了,紧接着发现,还要填写使用该接口的服务器ip。

顿时,心中十万个那个啥呼啸而过...

这时想起百度的产品里有个API store,搜索了下,果然找到了合适的接口。

城市接口

http://apistore.baidu.com/microservice/cityinfo?cityname=城市名

{"errNum":0,"retMsg":"success","retData":{"cityName":"\u5317\u4eac","provinceName":"\u5317\u4eac","cityCode":"101010100","zipCode":"100000","telAreaCode":"010"}}

天气接口

http://apis.baidu.com/apistore/weatherservice/recentweathers?cityid=城市编码

该请求需要在header中添加apikey字段,该值可以在百度天气接口中获取。

二、 代码编写

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import urllib, urllib2
import json, sys, re
def getCityCode(cityname, hooker=re.compile(r'"cityCode":"(\d+)"')):
    city_url = 'http://apistore.baidu.com/microservice/cityinfo?cityname='
    city_url = city_url + urllib.quote(cityname)
    resp = urllib2.urlopen(city_url).read()
    return hooker.findall(resp)[0]
 
def getWeatherInfo(citycode, headers={'apikey':'7328474baf90532437b4becdc5f65706'}):
    weather_url = 'http://apis.baidu.com/apistore/weatherservice/recentweathers?cityid='
    weather_url = weather_url + citycode
    resp = urllib2.urlopen(urllib2.Request(weather_url, headers=headers))
    return json.loads(resp.read())['retData']
 
def parseData(data, info=''):
    for key in ('date', 'curTemp', 'type', 'lowtemp', 'hightemp', 'fengli'):
        info = info + data[key] + '\t'
    return info
 
if __name__ == '__main__':
    j = getWeatherInfo(getCityCode('上海'))
    for item in ([j['today']] + [dict(d,**{'curTemp':''}) for d in j['forecast']]):
        print parseData(item)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

你的密码被破解了?看看你的Apple ID、邮箱密码是不是这些!

今天小沃本来想买元旦的车票来着,结果发现密码忘了,在输入两次错误以后,为了防止账户冻结选择了重新设置密码。卖票的 App 还不让设置太简单的密码,本来还想吐槽整...

4816
来自专栏云计算D1net

如何使用PaaS作为安全控制的试验平台

美国商务部国家标准与技术研究所(NIST)在2014年12月发布了特别出版物800-53A修订版4,概述了高级信息系统安全官(ISSO)和信息系统所有者(ISO...

3366
来自专栏魏艾斯博客www.vpsss.net

Siteground注册购买图文教程

Siteground是美国有名的主机商家,经过魏艾斯博客和朋友们几个月的使用,感觉Siteground在稳定性、速度、操作上比较的方便易用,所以写下本文把这个好...

4662
来自专栏领域驱动设计DDD实战进阶

DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)

2312
来自专栏前端开发

不限容量的网盘---可作为电脑磁盘

1.5K6
来自专栏嵌入式程序猿

谁动了我的下载固件

之前的TWR-K64板子openSDA被同事刷成了jlink固件,估计这哥们喜欢用Jlink呵呵,如果想刷回PEmicro固件,我们该如何做呢,首先先了解下,O...

2998
来自专栏维恩的派VNPIE

spreadTrading模块事件触发机制

本文主要介绍了价差交易模块的事件触发机制。感谢‘次第花开’和‘用户名呀’在维恩的派论坛里的分享!

2042
来自专栏阮一峰的网络日志

进程与线程的一个简单解释

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清...

3096
来自专栏林德熙的博客

win10 uwp ping

有时需要进行 ping ,但是ms没有给一个类可以进行 ping 本文:如何使用 ping

951
来自专栏Debian社区

Ubuntu 16.10(Yakkety Yak)将于7月20日结束生命周期

Canonical的Adam Conrad今天向Ubuntu社区发布公告,表示Ubuntu 16.10(Yakkety Yak)操作系统将于2017年7月20日...

1213

扫码关注云+社区

领取腾讯云代金券