Oii Murilo, como você está? Espero que esteja bem ^-^
Sinto muito pela demora em obter um retorno.
Existe uma API pública que nos retorna a localização atual com base no IP da nossa rede e através disso podemos deixar nossa localização de forma automática nesse projeto. Para acessar essa API, digite no navegador o seguinte endereço:
https://tools.keycdn.com/geo.json
Observe que através do link acima é retornado um parâmetro chamado "city"
e é ele que vamos utilizar em nosso código.
Para isso, vamos criar uma função que irá acessar esse endereço acima e nos retornar a cidade atual, veja como fica em código:
def cidade_atual():
requisicao = get('https://tools.keycdn.com/geo.json')
dados_localizacao = requisicao.json()
cidade = dados_localizacao['data']['geo']['city']
return cidade
E agora, na função de previsao_do_tempo()
iremos capturar a informação que a função cidade_atual()
nos retorna:
localizacao_atual = cidade_atual()
localizacao_atual = localizacao_atual.replace(" ", "%20").lower()
site = get(f'http://api.openweathermap.org/data/2.5/weather?q={localizacao_atual},br&APPID=SEU_TOKEN&units=metric&lang=pt')
Na primeira linha obtemos o valor retornado da função cidade_atual()
e após isso, na segunda linha fazemos a substituição da cidade retornada trocando o espaço pelo símbolo "%20" que representa o espaço em uma url. Por exemplo, a cidade "belo horizonte" ficará "belo%20horizonte" em uma url.
Por fim, na terceira linha concatenamos o valor da string que guarda o nome da cidade na url completa.
Veja como fica o código completo das funções citadas:
def cidade_atual():
requisicao = get('https://tools.keycdn.com/geo.json')
dadosLocalizacao = requisicao.json()
cidade = dadosLocalizacao['data']['geo']['city']
return cidade
def previsao_do_tempo(tempo=False, minmax=False):
localizacao_atual = cidade_atual()
localizacao_atual = localizacao_atual.replace(" ", "%20").lower()
site = get(f'http://api.openweathermap.org/data/2.5/weather?q={localizacao_atual},br&APPID=SEU_TOKEN&units=metric&lang=pt')
clima = site.json()
temperatura = clima['main']['temp']
minima = clima['main']['temp_min']
maxima = clima['main']['temp_max']
descricao = clima['weather'][0]['description']
if tempo:
mensagem = f'No momento faz {temperatura} graus com: {descricao}'
if minmax:
mensagem = f'Mínima de {minima} e máxima de {maxima} em {cidade_atual()}'
cria_audio(mensagem)
Observações:
No código acima, lembre-se de substituir na url o seu token de acesso que foi gerado na API "open weather"
.
Em algumas situações, a API "geo.json"
pode mostrar alguma localização próxima de onde você está, para serviços com maiores precisões precisaríamos utilizar algum serviço de localização pago, como por exemplo o da Google.
Qualquer dúvida estou por aqui, tá bom?
Grande abraço!