码迷,mamicode.com
首页 > 编程语言 > 详细

python 查天气

时间:2014-10-19 14:23:37      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:python   查天气   天气接口   

这里我们借助中国天气网的三个接口,通过http get方式获取数据


获取省和直辖市的编号

http://m.weather.com.cn/data5/city.xml


例如

bubuko.com,布布扣



获取相应的二级城市编号

http://m.weather.com.cn/data5/city‘ + [省或直辖市编号] + ‘.xml


获取相应的地区编号 

http://m.weather.com.cn/data5/city‘ + [二级城市编号]+ ‘.xml


最后将‘ 101‘ + [地区编号] 得到的就是可供查询的地区编号


查询相应地区的天气

http://www.weather.com.cn/data/cityinfo/[可供查询的地区编号].html


例如

bubuko.com,布布扣



希望能够输入城市就查询该城市或地区的天气,那么首先要获取完整的地区编号,这里通过get_city.py将所有地名对应的地区编号获取并写入到一个city.py文件中,并设置地名为键,对应的编号为值的dictionary结构。之后查询天气的模块导入city模块,并执行查询,完整代码如下

# -*- coding: utf-8 -*-
import os
import urllib

#根据url得到html代码
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

#讲字符串分割后整理为编号和对应城市的dictionary
def getDictionary(str):
    str_split = str.split(',')
    dics = {}
    for each in str_split:
        tmp = each.split('|')
        dics[tmp[0]] = tmp[1]
    return dics

#得到编号和对应的省或直辖市dictionary
def getProvience(url):
    res = getHtml(url)
    pro_dic = getDictionary(res)
    return pro_dic

#得到编号和对应的二级城市的dictionary
def getCity(url):
    res = getHtml(url)
    city_dic = getDictionary(res)
    return city_dic

#得到编号和对应的区域的dictionary
def getField(url):
    res = getHtml(url)
    field_dic = getDictionary(res)
    return field_dic

if __name__ == '__main__':
    #打开文件
    city_code_file = open('city.py', 'w')
    city_code_file.write('# -*- coding: utf-8 -*-\n')
    city_code_file.write('city = {}\n')
    print '获取省以及直辖市编号'
    province_url = 'http://m.weather.com.cn/data5/city.xml'
    pro_dic = getProvience(province_url)
    #获取每个省的城市编号
    print '获取二级区域编号'
    for pro in pro_dic:
        city_url = 'http://m.weather.com.cn/data5/city' + pro + '.xml'
        city_dic = getCity(city_url)
        #获取每个城市的地区编号
        for city in city_dic:
            field_url = 'http://m.weather.com.cn/data5/city' + city + '.xml'
            field_dic = getField(field_url)
            #对于每一个编号和对应的地区存入dictionary
            for field in field_dic:
                city_code_file.write('city[\'' + field_dic[field] + '\'] = ' + '101' + str(field) + '\n') 
                print 'city[\'' + field_dic[field].decode('utf-8') + '\'] = ' + '101' + str(field)
    #关闭文件
    city_code_file.close()
    print '获取完成'

执行后将创建一个city.py文件,并按照python语法写入,使其查询时可直接作为模块导入,效果如下

bubuko.com,布布扣


查询天气

# -*- coding: utf-8 -*-
import get_city
import json
import city

field_name = raw_input('哪里的天气?')
field_no = city.city.get(field_name)
if field_no:
	url = 'http://www.weather.com.cn/data/cityinfo/%s.html' % field_no
	html = get_city.getHtml(url)
	weather_dic = json.loads(html)
	weather_info = weather_dic.get('weatherinfo')
	print weather_info['weather'] + ' ' + weather_info['temp2'] + '~' + weather_info['temp1'] 
else:
	print '没有这个地名的天气信息'


bubuko.com,布布扣

python 查天气

标签:python   查天气   天气接口   

原文地址:http://blog.csdn.net/aspnet_lyc/article/details/40261831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!