-
Notifications
You must be signed in to change notification settings - Fork 0
/
Aula43-Pesquisa-do-Local.py
157 lines (139 loc) · 5.99 KB
/
Aula43-Pesquisa-do-Local.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#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
import urllib.parse
accuweatherAPIKey = 'INSERT YOU KEY HERE'
mapboxToken = "INSERT YOUR MAPBOX TOKEN 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
def mostrarPrevisao(lat, long):
try:
local = pegarCodigoLocal(lat, long)
climaAtual = pegarTempoAgora(local['codigoLocal'], local['nomeLocal'])
print('\nClima atual em: ' + climaAtual['nomeLocal'])
print(climaAtual['textoClima'])
print('Temperatura: ' + str(climaAtual['temperatura']) + "\xb0" + "C")
except:
print('Erro ao obter o clima atual.')
opcao = input('\nDeseja ver a previsão para os próximos dias? (s ou n)').lower()
if opcao == "s":
print('\nClima para hoje e para os próximos dias: \n')
try:
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 obter a previsão para os próximos dias.')
def pesquisarLocal(local):
_local = urllib.parse.quote(local)
mapboxGeocodeUrl = "https://api.mapbox.com/geocoding/v5/mapbox.places/" + _local +".json?access_token=" + mapboxToken
r = requests.get(mapboxGeocodeUrl)
if (r.status_code != 200):
print('Não foi possível obter o clima atual.')
return None
else:
try:
MapboxResponse = json.loads(r.text)
coordenadas = {}
coordenadas['long'] = str(MapboxResponse['features'][0]['geometry']['coordinates'][0])
coordenadas['lat'] = str(MapboxResponse['features'][0]['geometry']['coordinates'][1])
return coordenadas
except:
print('Erro na pesquisa de local.')
try:
coordenadas = pegarCoordenadas()
mostrarPrevisao(coordenadas['lat'],coordenadas['long'])
continuar = "s"
while continuar == "s":
continuar = input("\nDeseja consultar a previsão de outro local? (s ou n)").lower()
if continuar != "s":
break
local = input('Digite a cidade e o Estado: ')
try:
coordenadas = pesquisarLocal(local)
mostrarPrevisao(coordenadas['lat'], coordenadas['long'])
except:
print('Não foi possível obter a previsão para este local.')
except:
print('Erro ao processar a solicitação. Entre em contato com o suporte')