Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Localização de forma dinâmica

O professor ensina a como obter a previsão do tempo passando o nome de um lugar, ou mesmo o seu id. Mas como eu faço pra tornar isso dinâmico, o que eu quero é poder saber a previsão do tempo independente do local em que eu estiver, ou seja, se eu estiver em São Paulo, eu quero as informações de São Paulo, se eu estiver no Rio de Janeiro, quero as informações de lá.?

1 resposta
solução!

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!