Gem para previsão de tempo

396 views
Skip to first unread message

Casanova

unread,
Feb 5, 2014, 2:21:00 PM2/5/14
to rail...@googlegroups.com
Alguem conhece alguma gem para previsão de tempo. Deu uma pesquisada achei a climatempo, geoip, yahoo_weatherman. Mas não consegui resolver meu problema pois eles pedem um code(esse é o numero da cidade), pois eu não tenho esse code. Alguem sabe onde posso conseguir esse numeros??? Estou tentando fazer um input onde o usuario vai digitar por exemplo São Paulo, e eu quero listar o resultado do tempo.

Everaldo Gomes

unread,
Feb 5, 2014, 2:28:23 PM2/5/14
to rail...@googlegroups.com


2014-02-05 Casanova <tyagok...@gmail.com>:
Alguem conhece alguma gem para previsão de tempo. Deu uma pesquisada achei a climatempo, geoip, yahoo_weatherman. Mas não consegui resolver meu problema pois eles pedem um code(esse é o numero da cidade), pois eu não tenho esse code. Alguem sabe onde posso conseguir esse numeros??? Estou tentando fazer um input onde o usuario vai digitar por exemplo São Paulo, e eu quero listar o resultado do tempo.

--
--
Você recebeu essa mensagem porquê está inscrito no Google
Groups "rails-br".
Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
Para se descadastrar, mande um e-mail para
rails-br+u...@googlegroups.com
Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: http://goo.gl/YGgt7
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Ronaldo Possan

unread,
Feb 5, 2014, 2:49:35 PM2/5/14
to rail...@googlegroups.com
Não sei como funciona, mas foi a que achei.
--
Ronaldo Possan
Software Engineer
Expertise in Web Development
+55 19 8820-7159
 ronaldo.possan

Ronaldo Possan

unread,
Feb 5, 2014, 2:50:47 PM2/5/14
to rail...@googlegroups.com

Rafael Lugli

unread,
Feb 5, 2014, 3:47:25 PM2/5/14
to rail...@googlegroups.com
Fazendo uma chamada para url = URI::encode("http://servicos.cptec.inpe.br/XML/listaCidades?city=#{primeira_palavra.downcase}

Ele retorna o código da cidade.

abs.

Rafael Lugli

unread,
Feb 5, 2014, 3:49:43 PM2/5/14
to rail...@googlegroups.com
exemplo: http://servicos.cptec.inpe.br/XML/listaCidades?city=aracatuba

RETORNO: 

<cidades>
<cidade>
<nome>Araçatuba</nome>
<uf>SP</uf>
<id>543</id>
</cidade>
</cidades>

Loureiro

unread,
Feb 5, 2014, 4:14:35 PM2/5/14
to rail...@googlegroups.com
quando procurei há uns 3 meses atrás, todas que achei eram ou desatualizadas ou utilizavam algum serviço pago. Hoje utilizo o OpenWeatherMap em conjunto com o Yahoo Weather. Basicamente você tem que chamar uma URL que contém o código da cidade e o serviço vai te retornar algum xml ou json.

Ex. Open Weather Map
* para descobrir o código da cidade de São Paulo: http://api.openweathermap.org/data/2.5/weather?q=S%C3%A3o%20Paulo,BR
o campo id é o código interno da cidade, no caso de São Paulo, o 3448439
* para pegar a previsão de hoje (ventos, temperatura, umidade, código para gerar um ícone, etc): http://api.openweathermap.org/data/2.5/weather?units=metric&id=3448439

Ex. Yahoo Weather
* para descobrir o código da cidade: vá em http://weather.yahoo.com/ e digite São Paulo. Ao ver a previsão, vai aparecer o id na url. No caso de São Paulo é o 455827.

1. o Yahoo gera XML, então tem que usar o método Hash.from_xml e to_hash. O OWM usa JSON então tem que usar o JSON.parse
2. nunca faça uma chamada por página. Isto é muito lento, e se o serviço estiver fora o seu site pode cair também. E estas APIs limitam o número de chamadas por dia. Ao invés disto chame de 15 em 15 minutos ou use um intervalo maior. Use um sistema de cache (ex. redis) para isto e na página somente use o caché que será atualizado por outro processo.
3. na minha cidade o OWM retorna precisamente a temperatura atual, mas insiste em colocar a máxima e mínima com os mesmos valores. Já o Yahoo, aqui mostra a temperatura relativa e não a atual. O que eu faço é pegar a temperatura atual do OWM e a mínima/máxima do Yahoo.

Snippet de como pegar os dados:

require 'net/http'
require 'uri'

# open weather
doc = JSON.parse(Net::HTTP.get_response(URI.parse('http://api.openweathermap.org/data/2.5/weather?units=metric&id=3448439')).body)
open_weather = {
  "temp_now" => doc["main"]["temp"].round,
  "temp_max" => doc["main"]["temp_max"].round,
  "temp_min" => doc["main"]["temp_min"].round,
  "condition_code" => doc["weather"][0]["id"]
}

# yahoo weather
doc = Hash.from_xml(Net::HTTP.get_response(URI.parse('http://weather.yahooapis.com/forecastrss?w=455827&u=c')).body).to_hash
yahoo_weather = {
  "temp_now" => doc["rss"]["channel"]["item"]["condition"]["temp"],
  "temp_max" => doc["rss"]["channel"]["item"]["forecast"][0]["high"],
  "temp_min" => doc["rss"]["channel"]["item"]["forecast"][0]["low"]
}
Message has been deleted

Casanova

unread,
Feb 6, 2014, 6:37:23 AM2/6/14
to rail...@googlegroups.com
Valeu pela ajuda pessoal, mais uma duvida Loureiro. No Ex. Open Weather Map quando vc passa o nome da cidade por exemplo  http://api.openweathermap.org/data/2.5/weather?q=S%C3%A3o%20Paulo,BR, ele ja traz a os dados de temperatura, etc. Esses dados serião uma média do mês???? Mais uma duvida tem alguma forma de eu pegar por default a regiao(cidade) do cliente. Por exemplo o cliente acessa o site e por default ele pega a cidade q ele esta e mostra a previsão do tempo.

Loureiro

unread,
Feb 6, 2014, 5:48:24 PM2/6/14
to rail...@googlegroups.com
> No Ex. Open Weather Map quando vc passa o nome da cidade por exemplo  http://api.openweathermap.org/data/2.5/weather?q=S%C3%A3o%20Paulo,BR, ele ja traz a os dados de temperatura, etc. Esses dados serião uma média do mês???? 
sinceramente não sei o que são estes dados, pois nunca precisei utilizar. A documentação deles tampouco fala sobre estes dados extras. Mas, vendo os dados, parece que são a temperatura atual.

> Mais uma duvida tem alguma forma de eu pegar por default a regiao(cidade) do cliente. Por exemplo o cliente acessa o site e por default ele pega a cidade q ele esta e mostra a previsão do tempo.
não, mas você pode passar coordenadas do tipo lat x lng e pode pegar isto através do IP do usuário ou usar o geolocation do HTML5.
ex de chamada usando latitude e longitude: http://api.openweathermap.org/data/2.5/find?lat=57&lon=-2.15&cnt=1
Reply all
Reply to author
Forward
0 new messages