Python脚本获取城市天气

来源:互联网 时间:1970-01-01

一段Python实现的获取城市天气的代码,供大家娱乐参考。。

具体代码如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-# import requestsimport urllibimport jsonimport sysfrom datetime import datetime, timedeltabase_url = "http://api.worldweatheronline.com/free/v2/weather.ashx"codes = {'113': 'iconSunny', '116': 'iconPartlyCloudy', "119": 'iconCloudy', '122': 'iconVeryCloudy', '143': 'iconFog', '176': 'iconLightShowers', '179': 'iconLightSleetShowers', '182': 'iconLightSleet', '185': 'iconLightSleet', '200': 'iconThunderyShowers', '227': 'iconLightSnow', '230': 'iconHeavySnow', '248': 'iconFog', '260': 'iconFog', '263': 'iconLightShowers', '266': 'iconLightRain', '281': 'iconLightSleet', '284': 'iconLightSleet', '293': 'iconLightRain', '296': 'iconLightRain', '299': 'iconHeavyShowers', '302': 'iconHeavyRain', '305': 'iconHeavyShowers', '308': 'iconHeavyRain', '311': 'iconLightSleet', '314': 'iconLightSleet', '317': 'iconLightSleet', '320': 'iconLightSnow', '323': 'iconLightSnowShowers', '326': 'iconLightSnowShowers', '329': 'iconHeavySnow', '332': 'iconHeavySnow', '335': 'iconHeavySnowShowers', '338': 'iconHeavySnow', '350': 'iconLightSleet', '353': 'iconLightShowers', '356': 'iconHeavyShowers', '359': 'iconHeavyRain', '362': 'iconLightSleetShowers', '365': 'iconLightSleetShowers', '368': 'iconLightSnowShowers', '371': 'iconHeavySnowShowers', '374': 'iconLightSleetShowers', '377': 'iconLightSleet', '386': 'iconThunderyShowers', '389': 'iconThunderyHeavyRain', '392': 'iconThunderySnowShowers', '395': 'iconHeavySnowShowers' }icons = {'iconSunny': ['/033[38;5;226m// //033[0m','/033[38;5;226m .-. /033[0m','/033[38;5;226m ― ( ) ― /033[0m','/033[38;5;226m `-’ /033[0m','/033[38;5;226m/ ///033[0m'],'iconPartlyCloudy': ["/033[38;5;226m // //033[0m ","/033[38;5;226m _ //"/"/033[38;5;250m.-./033[0m","/033[38;5;226m //_/033[38;5;250m( ). /033[0m","/033[38;5;226m //033[38;5;250m(___(__) /033[0m"," "],'iconCloudy': [" ","/033[38;5;250m .--./033[0m","/033[38;5;250m .-(). /033[0m","/033[38;5;250m (___.__)__) /033[0m"," "],'iconVeryCloudy': [" ","/033[38;5;240;1m .--./033[0m","/033[38;5;240;1m .-(). /033[0m","/033[38;5;240;1m (___.__)__) /033[0m"," "],'iconLightShowers': ["/033[38;5;226m _`//"/"/033[38;5;250m.-./033[0m","/033[38;5;226m ,//_/033[38;5;250m( ). /033[0m","/033[38;5;226m //033[38;5;250m(___(__) /033[0m","/033[38;5;111m ‘ ‘ ‘ ‘ /033[0m","/033[38;5;111m‘ ‘ ‘ ‘ /033[0m"],'iconHeavyShowers': ["/033[38;5;226m _`//"/"/033[38;5;240;1m.-./033[0m","/033[38;5;226m ,//_/033[38;5;240;1m( ). /033[0m","/033[38;5;226m //033[38;5;240;1m(___(__) /033[0m","/033[38;5;21;1m ‚‘‚‘‚‘‚‘ /033[0m","/033[38;5;21;1m ‚’‚’‚’‚’ /033[0m"],'iconLightSnowShowers': ["/033[38;5;226m _`//"/"/033[38;5;250m.-./033[0m","/033[38;5;226m ,//_/033[38;5;250m( ). /033[0m","/033[38;5;226m //033[38;5;250m(___(__) /033[0m","/033[38;5;255m * * * /033[0m","/033[38;5;255m* * * /033[0m"],'iconHeavySnowShowers': ["/033[38;5;226m _`//"/"/033[38;5;240;1m.-./033[0m","/033[38;5;226m ,//_/033[38;5;240;1m( ). /033[0m","/033[38;5;226m //033[38;5;240;1m(___(__) /033[0m","/033[38;5;255;1m* * * * /033[0m","/033[38;5;255;1m * * * * /033[0m"],'iconLightSleetShowers': ["/033[38;5;226m _`//"/"/033[38;5;250m.-./033[0m","/033[38;5;226m ,//_/033[38;5;250m( ). /033[0m","/033[38;5;226m //033[38;5;250m(___(__) /033[0m","/033[38;5;111m ‘ /033[38;5;255m*/033[38;5;111m ‘ /033[38;5;255m* /033[0m","/033[38;5;255m*/033[38;5;111m ‘ /033[38;5;255m*/033[38;5;111m ‘ /033[0m"],'iconThunderyShowers': ["/033[38;5;226m _`//"/"/033[38;5;250m.-./033[0m","/033[38;5;226m ,//_/033[38;5;250m( ). /033[0m","/033[38;5;226m //033[38;5;250m(___(__) /033[0m","/033[38;5;228;5m⚡/033[38;5;111;25m‘ ‘/033[38;5;228;5m⚡/033[38;5;111;25m‘ ‘ /033[0m","/033[38;5;111m‘ ‘ ‘ ‘ /033[0m"],'iconThunderyHeavyRain': ["/033[38;5;240;1m .-. /033[0m","/033[38;5;240;1m( ). /033[0m","/033[38;5;240;1m (___(__) /033[0m","/033[38;5;21;1m ‚‘/033[38;5;228;5m⚡/033[38;5;21;25m‘‚/033[38;5;228;5m⚡/033[38;5;21;25m‚‘ /033[0m","/033[38;5;21;1m ‚’‚’/033[38;5;228;5m⚡/033[38;5;21;25m’‚’ /033[0m"],'iconThunderySnowShowers': ["/033[38;5;226m _`//"/"/033[38;5;250m.-./033[0m","/033[38;5;226m ,//_/033[38;5;250m( ). /033[0m","/033[38;5;226m //033[38;5;250m(___(__) /033[0m","/033[38;5;255m */033[38;5;228;5m⚡/033[38;5;255;25m */033[38;5;228;5m⚡/033[38;5;255;25m * /033[0m","/033[38;5;255m* * * /033[0m"],'iconLightRain': ["/033[38;5;250m .-. /033[0m","/033[38;5;250m( ). /033[0m","/033[38;5;250m (___(__) /033[0m","/033[38;5;111m‘ ‘ ‘ ‘ /033[0m","/033[38;5;111m ‘ ‘ ‘ ‘ /033[0m"],'iconHeavyRain': ["/033[38;5;240;1m .-. /033[0m","/033[38;5;240;1m( ). /033[0m","/033[38;5;240;1m (___(__) /033[0m","/033[38;5;21;1m ‚‘‚‘‚‘‚‘ /033[0m","/033[38;5;21;1m ‚’‚’‚’‚’ /033[0m"],'iconLightSnow': ["/033[38;5;250m .-. /033[0m","/033[38;5;250m( ). /033[0m","/033[38;5;250m (___(__) /033[0m","/033[38;5;255m* * * /033[0m","/033[38;5;255m * * * /033[0m"],'iconHeavySnow': ["/033[38;5;240;1m .-. /033[0m","/033[38;5;240;1m( ). /033[0m","/033[38;5;240;1m (___(__) /033[0m","/033[38;5;255;1m * * * * /033[0m","/033[38;5;255;1m * * * */033[0m"],'iconLightSleet': ["/033[38;5;250m .-. /033[0m","/033[38;5;250m( ). /033[0m","/033[38;5;250m (___(__) /033[0m","/033[38;5;111m‘ /033[38;5;255m*/033[38;5;111m ‘ /033[38;5;255m* /033[0m","/033[38;5;255m */033[38;5;111m ‘ /033[38;5;255m*/033[38;5;111m ‘ /033[0m"],'iconFog': [" ","/033[38;5;251m _ - _ - _ - /033[0m","/033[38;5;251m _ - _ - _ /033[0m","/033[38;5;251m _ - _ - _ - /033[0m"," "],'iconUnknown': [".-. "," __) ","("," `-’ "," • "]}windDir = {"N": "/033[1m↓/033[0m","NNE": "/033[1m↓/033[0m","NE": "/033[1m↙/033[0m","ENE": "/033[1m↙/033[0m","E": "/033[1m←/033[0m","ESE": "/033[1m←/033[0m","SE": "/033[1m↖/033[0m","SSE": "/033[1m↖/033[0m","S": "/033[1m↑/033[0m","SSW": "/033[1m↑/033[0m","SW": "/033[1m↗/033[0m","WSW": "/033[1m↗/033[0m","W": "/033[1m→/033[0m","WNW": "/033[1m→/033[0m","NW": "/033[1m↘/033[0m","NNW": "/033[1m↘/033[0m",}class Query(object):def __init__(self, day, city):self.day = dayself.time = [3,4,5,6]self.weatherCode = ''self.weather = ''self.date = ''self.hourly = ''self.tempC = 0self.winddir16Point = ''self.windspeedKmph = 0self.humidity = 0self.chanceofwater = 0self.city = citydef query(self):# 使用resquests# p={"q":"%s"%self.city, "num_of_days":3, "format":"json", "key":"55f1fdd05fba23be0a18043d0a017", "lang":"zh"}# response=requests.get(base_url,params=p)# json_string = response.text#使用urlliburl = base_url + "?key=55f1fdd05fba23be0a18043d0a017&q=%s#_of_days=3&format=json⟨=zh" % self.cityresponse = urllib.urlopen(url)json_string = response.read()parsed_json = json.loads(json_string)data = parsed_json['data'] # 获取所有数据try:self.weather = data['weather'][self.day]# 获取天气预报,[]内0代表当天,1代表明天,以此类推。except KeyError:print "/033[1;31;49m" + "请输入正确的城市或地区!" + "/033[0m"sys.exit()self.date = self.weather['date']def detail(self, time):self.hourly = self.weather['hourly'][time] # 获取小时数据,time:100-1500self.weatherCode = self.hourly['weatherCode']self.tempC = self.hourly['tempC']self.winddir16Point = self.hourly['winddir16Point']self.windspeedKmph = self.hourly['windspeedKmph']self.chanceofrain = self.hourly['chanceofrain']self.chanceofsnow = self.hourly['chanceofsnow']self.humidity = self.hourly['humidity']self.chanceofwater = int(self.chanceofrain) if int(self.chanceofrain) > int(self.chanceofsnow) else int(self.chanceofsnow)def printSingle(self):l1 = l2 = l3 = l4 = l5 = ''for time in self.time:self.detail(time)l1 += '│' + icons[codes[self.weatherCode]][0] + self.hourly['lang_zh'][0]['value'].encode("utf-8") + '/t/t' if len(self.hourly['lang_zh'][0]['value'].encode("utf-8")) <= 12 else '│' + icons[codes[self.weatherCode]][0] + self.hourly['lang_zh'][0]['value'].encode("utf-8") + '/t'l2 += '│' + icons[codes[self.weatherCode]][1] + temp_color(self.tempC) + "°C"+'/t/t'l3 += '│' + icons[codes[self.weatherCode]][2] + windDir[self.winddir16Point]+" "+ wind_color(self.windspeedKmph) + "km/h" + '/t/t'l4 += '│' + icons[codes[self.weatherCode]][3] + "降水概率:" + str(self.chanceofwater) + "%" + '/t'l5 += '│' + icons[codes[self.weatherCode]][4] + "湿度:" + str(self.humidity) + "%" + '/t/t'print l1+"│"print l2+"│"print l3+"│"print l4+"│"print l5+"│"def printDay(self, delta):date_time = datetime.strftime(datetime.today() + timedelta(days=delta),"%Y-%m-%d")line1 = " ┌─────────────┐ "line2 = "┌───────────────────────────────┬──────────────────────────%s───────────────────────────┬───────────────────────────────┐" % date_timeline3 = "│ Morning │ Noon └──────┬──────┘Evening │Night │"line4 = "├───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┤"endline= "└───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┘"print line1print line2print line3print line4self.printSingle()print endlinedef temp_color(temp):if temp >= 35 or temp <= -10:color = "/033[1;31;49m" + str(temp) + "/033[0m"elif (temp >= 25 and temp <35):color = "/033[1;33;49m" + str(temp) + "/033[0m"elif temp > 10 and temp < 25:color = "/033[1;32;49m" + str(temp) + "/033[0m"elif temp >-10 and temp <= 10:color = "/033[1;34;49m" + str(temp) + "/033[0m"return colordef wind_color(windspeed):if windspeed <= 5:color = "/033[1;32;49m" + str(windspeed) + "/033[0m"elif windspeed > 5 and windspeed <=10:color = "/033[1;33;49m" + str(windspeed) + "/033[0m"else:color = "/033[1;34;49m" + str(windspeed) + "/033[0m"return colordef main():try:city = sys.argv[1]except IndexError:print "/033[1;31;49m" + "请输入您要查询的城市或地区:" + "/033[0m"city = raw_input()if city == '':sys.exit()day = [0,1,2]for i in day:query = Query(i,city)query.query()query.printDay(i)if __name__ == "__main__":main()

运行效果如图:

Over!

相关阅读:
Top