文档章节

python获取城市天气情况案例

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 920
阅读 17
收藏 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就业前景如何

写在前面的说明 这篇文章去年10月就发在了公众号里,代码是9月完成的。但后来忘了发在知乎专栏。所以数据的时效性是不行了,仅供参考,大家纯当做 爬虫+数据展示 的开发案例来看待吧。 在线演...

crossin
07/03
0
0
Python抓取并分析天气数据

导语 利用Python“简单地”抓取并分析一下天气数据。 T_T翻了翻公众号之前文章。。。 很少有把重点放在数据可视化分析上。。。 所以算是填补一下之前的空白吧~~~ Let's Go! 相关文件 文件下载...

W3Cschool小编
07/27
0
0
利用Python爬取房价信息并分析

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 导语 进入正题,利用Python爬取房价信息并进行简单的数据分析。好久没发爬虫相关的内容了,想想还是抽空过来发一篇吧~~~ Ok,让我们开始...

W3Cschool小编
07/27
0
0
荐书丨确认过眼神,这份Python书单一定是你的菜

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

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

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

tw6cy6ukydea86z
04/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HTTPS is easy

HTTPS is easy https://www.troyhunt.com/https-is-easy/ HTTPS is easy! In fact, it's so easy I decided to create 4 short videos around 5 minutes each to show people how to enable ......

openthings
16分钟前
0
0
bugList 2

用户端: 1. 上传文件时,当选择:彩色-A3-双面时,第二个图片有bug 应改为 和第一个图片的类型相同 2. 确认打印时,三个下拉选目前有bug 应改为:根据后台配置的商家,group by计算出不同城...

勇恒
18分钟前
2
0
keras cnn 网咯 mnist 分类

搭建貌似比tf是简单很多。。。。。 from keras.datasets import mnistfrom keras.utils import np_utilsfrom keras.models import Sequentialfrom keras.layers import Dense, Activat......

阿豪boy
21分钟前
0
0
解决 /var/run/nginx.pid failed

nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory) sudo nginx -c /etc/nginx/nginx.conf nginx -s reload...

驛路梨花醉美
22分钟前
0
0
nginx负载均衡-ssl原理-生成ssl密钥对-nginx配置ssl

nginx负载均衡: 1.创建配置文件 vim /usr/local/nginx/conf/vhost/load.conf #添加以下内容: upstream qq_com #名字自定义,借助此模块定义多个IP,后面...

ZHENG-JY
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部