文档章节

python获取城市天气情况案例

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 920
阅读 16
收藏 0
点赞 2
评论 0

我主要是参考中国开源社区OSchina上的源码进行学习http://www.oschina.net/code/snippet_946290_45838

非常感谢原作者),我将每个步骤分别进行讲解,比原作者更加详细

源码如下:

__author__ = 'dyb'

import os
import urllib.request
import urllib.parse
import json


class weather(object):

    # 获取城市代码的uri
    citycode_uri = "http://apistore.baidu.com/microservice/cityinfo?cityname="

    # 获取天气信息的uri
    weather_uri = "http://apistore.baidu.com/microservice/weather?cityid="
    
    #主要业务逻辑处理
    def mainHandle(self):
        print("输入你要查询天气的城市:")
        city_name = input()
        uri = self.citycode_uri + urllib.parse.quote(city_name)
        ret = json.loads(urllib.request.urlopen(uri).read().decode("utf8"))
        if(ret['errNum']) != 0:
            print('网络或者服务器出错')
            return False
        else:
            weather_uri = self.weather_uri + ret['retData']['cityCode']
            data = json.loads(urllib.request.urlopen(weather_uri).read().decode("utf8"))
            if data['errNum'] == 0:
                ret_data = data['retData']
                output = "城市名:" + ret_data['city'] + "\r\n"
                output += "更新时间:" + ret_data["date"] + " " + ret_data["time"] + "\r\n"
                output += "城市编码:" + ret_data['citycode'] + "\r\n"
                output += "经度:" + str(ret_data['longitude']) + "\r\n"
                output += "维度:" + str(ret_data['latitude']) + "\r\n"
                output += "邮编:" + ret_data['postCode'] + "\r\n"
                output += "海拔:" + ret_data['altitude'] + "\r\n"
                output += "天气情况:" + ret_data["weather"] + "\r\n"
                output += "温度:" + ret_data["temp"] + "\r\n"
                output += "最低气温:" + ret_data['l_tmp'] + "\r\n"
                output += "最高气温:" + ret_data['h_tmp'] + "\r\n"
                output += "风向:" + ret_data['WD'] + "\r\n"
                output += "风力:" + ret_data['WS'] + "\r\n"
                output += "日出时间:" + ret_data['sunrise'] + "\r\n"
                output += "日落时间:" + ret_data['sunset'] + "\r\n"
                print(output)
                return True
            else:
                print('网络或者服务器出错')
                return False
        

if __name__ == "__main__":
    weather = weather()
    weather.mainHandle()

首先是程序入口:

__name__ == "__main__"

模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

在cmd 中直接运行.py文件,则__name__的值是'__main__';

而在import 一个.py文件后,__name__的值就不是'__main__'了;

从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

如:

#Test.py
class Test:
    def __init(self):pass
    def f(self):print 'Hello, World!'
if __name__ == '__main__':
    Test().f()
#End

你在cmd中输入:

C:>python Test.py

Hello, World!

说明:"__name__ == '__main__'"是成立的

你再在cmd中输入:

C:>python

>>>import Test

>>>Test.__name__                #Test模块的__name__

'Test'

>>>__name__                       #当前程序的__name__

'__main__'

以北京为例:

>>> 
输入你要查询天气的城市:
北京

上面的ret输出的结果是:

{'errNum': 0, 'retMsg': 'success', 'retData': {'zipCode': '100000', 'cityName': '北京', 'provinceName': '北京', 'telAreaCode': '010', 'cityCode': '101010100'}}

可以通过ret['errNum']这样的方式来获取json中各个对应的数据,如果这里不明白建议看下Python的元组、数组、映射(map)等相关知识

ret['errNum']  =0为成功=-1为失败

程序中变量data的输出值也是json格式,获取方式相同:

{'errNum': 0, 'errMsg': 'success', 'retData': {'temp': '-4', 'time': '18:00', 'citycode': '101010100', 'city': '北京', 'l_tmp': '', 'WD': '无持续风向', 'date': '15-02-11', 'postCode': '100000', 'pinyin': 'beijing', 'altitude': '33', 'sunrise': '07:12', 'weather': '晴', 'longitude': 116.391, 'WS': '微风(<10m/h)', 'sunset': '17:44', 'h_tmp': '-4', 'latitude': 39.904}}

JSON返回示例:
{
errNum: 0,
errMsg: "success",
retData: {
   city: "北京", //城市
   pinyin: "beijing", //城市拼音
   citycode: "101010100",  //城市编码
   date: "15-02-11", //日期
   time: "11:00", //发布时间
   postCode: "100000", //邮编
   longitude: 116.391, //经度
   latitude: 39.904, //维度
   altitude: "33", //海拔
   weather: "晴",  //天气情况
   temp: "10", //气温
   l_tmp: "-4", //最低气温
   h_tmp: "10", //最高气温
   WD: "无持续风向", //风向
   WS: "微风(<10m/h)", //风力
   sunrise: "07:12", //日出时间
   sunset: "17:44" //日落时间
  }    
}

output为输出语句,当输出经度和纬度的时候它们的格式是float类型,所以需要转换成str类型才能拼接在一起,使用str()函数

具体关于参数请参考天气的API介绍:http://apistore.baidu.com/astore/serviceinfo/1798.html

本文转载自:http://blog.csdn.net/bq1073100909/article/details/43742465

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
荐书丨确认过眼神,这份Python书单一定是你的菜

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 Python 是军刀型的开源工具,被广泛应用于Web 开发、爬虫、数据清洗、自然语言处理、机器学习和人工智能等方...

csdnsevenn ⋅ 05/05 ⋅ 0

别人Python都玩腻了,而你却连安装工具库都搞不清楚?

9:00 你打开电脑,双击各部门交上来的周报,轻车熟路地开始了crtlC,ctrlV工作,把表格统计在一起。 15:00 你发现投资部的表格里多了一个字段,导致你表格结构全错了,你很恼火…… 16:30 重新...

tw6cy6ukydea86z ⋅ 04/26 ⋅ 0

什么样的人学Python比别人快?Python的学习大纲有哪些?

什么样的人学Python比别人快? 为什么会是这些人?前两类大家应该都没什么意见,为什么最后两类会学得快?这两类说白了就一个关键词:转行!既然决定转行,有太多需要学习的东西,太多不适应...

帅帅程序员 ⋅ 04/28 ⋅ 0

一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者 ⋅ 04/25 ⋅ 0

7个实战案例、24个学习视频、12G干货资料...带你免费入门《Python数据分析》!...

相信许多做数据的都有这样的经历: 你花大半天整合了一张数据表,却因为其他部门的错误,导致表格结构全错了!于是你又要吭哧吭哧重新来过...... 每次数据都重复洗一遍,还这么慢,要是有一劳...

tw6cy6ukydea86z ⋅ 05/23 ⋅ 0

机器学习的最佳学习路线原来只有四步

AI这个词相信大家都非常熟悉,近几年来人工智能圈子格外热闹,光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。 在机器学习领域,Python已...

ufv59to8 ⋅ 05/12 ⋅ 0

Python3.6实现12306火车票自动抢票,附源码

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理...

猫咪编程 ⋅ 06/05 ⋅ 0

不懂Python,你将成为人工智能时代的新“文盲”

  每个阶段,大家对“文盲”的定义都是不相同的,以前不识汉字就是文盲,后来不会说英语就是文盲。在人工智能时代的今天,当然不懂Python语言,你就是“文盲”!现在你肯定在问Why?   众...

深度学习 ⋅ 06/12 ⋅ 0

Python获取全网电影,深夜有小电影看难道不是你学习的初衷吗?

你以为这是黑客?NO,这只是简单的Python爬虫。如今各种各样的影视Vip收费出现在我们的视野中,对于我们来说也许是一部期待已久的电影电视,可是对于网站,App开发人员来说只是一组数据,为了...

柯西带你学编程 ⋅ 06/05 ⋅ 0

5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫   网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据。 python写爬虫的优势   其实以上功能很多语言和工具都能做,但是用...

柯西带你学编程 ⋅ 06/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 32分钟前 ⋅ 0

从零手写 IOC容器

概述 IOC (Inversion of Control) 控制反转。熟悉Spring的应该都知道。那么具体是怎么实现的呢?下面我们通过一个例子说明。 1. Component注解定义 package cn.com.qunar.annotation;impo...

轨迹_ ⋅ 32分钟前 ⋅ 0

系统健康检查利器-Spring Boot-Actuator

前言 实例由于出现故障、部署或自动缩放的情况,会进行持续启动、重新启动或停止操作。它可能导致它们暂时或永久不可用。为避免问题,您的负载均衡器应该从路由中跳过不健康的实例,因为它们...

harries ⋅ 34分钟前 ⋅ 0

手把手教你搭建vue-cli脚手架-详细步骤图文解析[vue入门]

写在前面: 使用 vue-cli 可以快速创建 vue 项目,vue-cli很好用,但是在最初搭建环境安装vue-cli及相关内容的时候,对一些人来说是很头疼的一件事情,本人在搭建vue-cli的项目环境的时候也是...

韦姣敏 ⋅ 44分钟前 ⋅ 0

12c rman中输入sql命令

12c之前版本,要在rman中执行sql语句,必须使用sql "alter system switch logfile"; 而在12c版本中,可以支持大量的sql语句了: 比如: C:\Users\zhengquan>rman target / 恢复管理器: Release 1...

tututu_jiang ⋅ 58分钟前 ⋅ 0

Nginx的https配置记录以及http强制跳转到https的方法梳理

Nginx的https配置记录以及http强制跳转到https的方法梳理 一、Nginx安装(略) 安装的时候需要注意加上 --with-httpsslmodule,因为httpsslmodule不属于Nginx的基本模块。 Nginx安装方法: ...

Yomut ⋅ 今天 ⋅ 0

SpringCloud Feign 传递复杂参数对象需要注意的地方

1.传递复杂参数对象需要用Post,另外需要注意,Feign不支持使用GetMapping 和PostMapping @RequestMapping(value="user/save",method=RequestMethod.POST) 2.在传递的过程中,复杂对象使用...

@林文龙 ⋅ 今天 ⋅ 0

如何显示 word 左侧目录大纲

打开word说明文档,如下图,我们发现左侧根本就没有目录,给我们带来很大的阅读障碍 2 在word文档的头部菜单栏中,切换到”视图“选项卡 3 然后勾选“导航窗格”选项 4 我们会惊奇的发现左侧...

二营长意大利炮 ⋅ 今天 ⋅ 0

智能合约编程语言Solidity之线上开发工具

工具地址:https://ethereum.github.io/browser-solidity/ 实例实验: 1.创建hello.sol文件 2.调试输出结果

硅谷课堂 ⋅ 今天 ⋅ 0

ffmpeg 视频格式转换

转 Mp4 格式 #> ffmpeg -i input.avi -c:v libx264 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 -s 1......

Contac ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部