基于python的终端天气查询
时间:2022-05-15
本文章向大家介绍基于python的终端天气查询,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、 天气接口
网上搜了一个,最开始准备使用中国天气网的数据接口,但是需要注册,也行,注册就注册吧。
注册好了,又提示信息不完整,好吧,填写姓名、身份证...
最后,还要上传身份证信息,看到这我不想用它了,紧接着发现,还要填写使用该接口的服务器ip。
顿时,心中十万个那个啥呼啸而过...
这时想起百度的产品里有个API store,搜索了下,果然找到了合适的接口。
城市接口
http://apistore.baidu.com/microservice/cityinfo?cityname=城市名
{"errNum":0,"retMsg":"success","retData":{"cityName":"u5317u4eac","provinceName":"u5317u4eac","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)
- WordPress 网站基于REST API 开发“微信小程序”实战
- 摩拜共享汽车亮相 首批新能源电动汽车试运行
- 基于SQL Server 2008 Service Broker构建企业级消息系统
- Windows主机管理系统Websitepanel
- 自定义Appfabric Cache 配置提供程序
- 2017年发生在上海的科技大新闻
- REST当中为什么要使用HTTP PUT
- 推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器--Jexus
- 人工智能与工业融合:没有你,对我很重要……
- DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学
- 提升用户体验,微信小程序“授权失败”场景的优雅处理
- extjs 基础部分
- WordPress 网站开发“微信小程序”实战(二)
- Extjs form 组件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Consul 服务发现和配置
- Consul 启动命令,Web UI
- Thrift 跨服务开发框架
- Java并发之BlockingQueue 阻塞队列(ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue、PriorityBlockingQueue、Sy
- Java并发之CountDownLatch 多功能同步工具类
- Java并发之CyclicBarrier 可重用同步工具类
- Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)
- Java并发之Condition 并发同步控制
- Java并发工具类Semaphore应用实例
- Java并发之死锁实例
- Java并发之ThreadPoolExecutor 线程执行服务
- Java并发之工具类 ForkJoin 任务分解
- 简单的 http 服务器
- 动态代理:cgib、jdk、java javassist
- JAVA NIO Channel