获取城市天气的Python脚本

2015-10-19 0 244

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

具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# import requests
import urllib
import json
import sys
from datetime import datetime, timedelta
base_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 = day
        self.time = [3,4,5,6]
        self.weatherCode = \'\'
        self.weather = \'\'
        self.date = \'\'
        self.hourly = \'\'
        self.tempC = 0
        self.winddir16Point = \'\'
        self.windspeedKmph = 0
        self.humidity = 0
        self.chanceofwater = 0
        self.city = city
    def 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
        #使用urllib
        url = base_url + "?key=55f1fdd05fba23be0a18043d0a017&q=%s#_of_days=3&format=json⟨=zh" % self.city
        response = 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-1500
        self.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_time
        line3 = "│		   Morning			 │			 Noon	   └──────┬──────┘	Evening			 │			Night			  │"
        line4 = "├───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┤"
        endline= "└───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┘"
        print line1
        print line2
        print line3
        print line4
        self.printSingle()
        print endline
def 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 color
def 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 color
def 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()

运行效果如图:

获取城市天气的Python脚本

遇见资源网 python 获取城市天气的Python脚本 http://www.ox520.com/15847.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务