-
Notifications
You must be signed in to change notification settings - Fork 0
/
Aula37 - Previsao 5 Dias.py
110 lines (100 loc) · 4.35 KB
/
Aula37 - Previsao 5 Dias.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#Aula 30 - Requisições HTTP em Python
#HMAP - 22/03/2020
#Aula 36 - Obtendo Clima Atual
#HMAP - 18/04/2020
#Módulo da requisição
import requests
#Dicionário da requisição
import json
#Módulo para imprimir o dicionário
##import pprint
#
from datetime import date
accuweatherAPIKey = 'INSERT YOUR KEY HERE'
dias_semana = ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado']
def pegarCoordenadas():
r = requests.get('http://www.geoplugin.net/json.gp')
#Verificação de localização, baseado na numeração de erro 200
if (r.status_code != 200):
print('Não foi possível obter a localização.')
return None
else:
try:
#print(r.text) - dados da requisição http
localizacao = json.loads(r.text)
coordenadas = {}
coordenadas['lat'] = localizacao['geoplugin_latitude']
coordenadas['long'] = localizacao['geoplugin_longitude']
return coordenadas
except:
return None
def pegarCodigoLocal(lat,long):
LocationAPIUrl = "http://dataservice.accuweather.com/locations/v1/cities/geoposition/search?apikey=" + accuweatherAPIKey + "&q=" + lat + "%2C" + long + "&language=pt-br"
r = requests.get(LocationAPIUrl)
if (r.status_code != 200):
print('Não foi possível obter a localização.')
return None
else:
try:
locationResponse = json.loads(r.text)
infoLocal = {}
infoLocal['nomeLocal'] = locationResponse['LocalizedName'] + "," + locationResponse['AdministrativeArea']['LocalizedName'] + "." + locationResponse['Country']['LocalizedName']
infoLocal['codigoLocal'] = locationResponse['Key']
return infoLocal
except:
return None
def pegarTempoAgora(codigoLocal, nomeLocal):
CurrentConditionsAPIUrl = "http://dataservice.accuweather.com/currentconditions/v1/" + codigoLocal + "?apikey=" + accuweatherAPIKey + "&language=pt-br"
r = requests.get(CurrentConditionsAPIUrl)
if (r.status_code != 200):
print('Não foi possível obter o clima atual.')
return None
else:
try:
CurrentConditionsResponse = json.loads(r.text)
infoClima = {}
infoClima['textoClima'] = CurrentConditionsResponse[0]['WeatherText']
infoClima['temperatura'] = CurrentConditionsResponse[0]['Temperature']['Metric']['Value']
infoClima['nomeLocal'] = nomeLocal
return infoClima
except:
return None
def pegarPrevisao5Dias(codigoLocal):
DailyAPIUrl = " http://dataservice.accuweather.com/forecasts/v1/daily/5day/" + codigoLocal + "?apikey=" + accuweatherAPIKey + "&language=pt-br&metric=true"
r = requests.get(DailyAPIUrl)
if (r.status_code != 200):
print('Não foi possível obter o clima atual.')
return None
else:
try:
DailyResponse = json.loads(r.text)
infoClima5Dias = []
for dia in DailyResponse['DailyForecasts']:
climaDia = {}
climaDia['max']=dia['Temperature']['Maximum']['Value']
climaDia['min']=dia['Temperature']['Minimum']['Value']
climaDia['clima']=dia['Day']['IconPhrase']
diaSemana = int(date.fromtimestamp(dia['EpochDate']).strftime("%w"))
climaDia['dia']=dias_semana[diaSemana]
infoClima5Dias.append(climaDia)
return infoClima5Dias
except:
return None
##Início do código
try:
coordenadas = pegarCoordenadas()
local = pegarCodigoLocal(coordenadas['lat'], coordenadas['long'])
climaAtual = pegarTempoAgora(local['codigoLocal'], local['nomeLocal'])
print('\nClima atual em: ' + climaAtual['nomeLocal'])
print(climaAtual['textoClima'])
print('Temperatura: ' + str(climaAtual['temperatura']) + "\xb0" + "C")
print('\nClima para hoje e para os próximos dias: \n')
previsao5Dias = pegarPrevisao5Dias(local['codigoLocal'])
for dia in previsao5Dias:
print(dia['dia'])
print('Mínima: ' + str(dia['min']) + "\xb0" + "C")
print('Máxima: ' + str(dia['max']) + "\xb0" + "C")
print('Clima: ' + dia['clima'])
print('----------------------------------------')
except:
print('Erro ao processar a solicitação. Entre em contato com o suporte')