FAVORITOS +
Suas cidades:
+ Nenhum favorito encontrado +Suas praias:
+ Nenhum favorito encontrado +Seus aeroportos:
+ Nenhum favorito encontrado +Suas cidades internacionais:
+ Nenhum favorito encontrado +localidade
diff --git a/Gemfile.lock b/Gemfile.lock index 426a4c1..821ec09 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - clima_tempo (2.0) + clima_tempo (2.2) nokogiri (>= 1.5.9) GEM diff --git a/lib/clima_tempo.rb b/lib/clima_tempo.rb index f551cd9..dd09a63 100644 --- a/lib/clima_tempo.rb +++ b/lib/clima_tempo.rb @@ -5,44 +5,42 @@ class ClimaTempo attr_reader :code - def initialize(option = {}) - raise ArgumentError if option.empty? + def initialize(option) + raise TypeError unless option.kind_of? Hash + raise ArgumentError unless option.has_key? :code @code = option[:code] end def now - html = request + page = request - values = html.xpath "//li[@class='dados-momento-li list-style-none']" - region = html.xpath "//a[@class='thumb-play-prev']" - - now = { - :temperature => html.xpath("//span[@class='left temp-momento top10']").text, - :wind => wind_direction[prepare(values[0].text)], - :condition => prepare(values[1].text), - :pressure => prepare(values[2].text), - :intensity => prepare(values[3].text), - :moisture => prepare(values[4].text) + { + :temperature => page[:temperature].text, + :wind => wind[prepare(page[:data][0].text)], + :condition => prepare(page[:data][1].text), + :pressure => prepare(page[:data][2].text), + :intensity => prepare(page[:data][3].text), + :moisture => prepare(page[:data][4].text) } - - now.merge! :video => "http://www.climatempo.com.br#{region.first.attribute('href').value}" unless region.first.nil? - - now end private def request request = Net::HTTP.get URI.parse("http://www.climatempo.com.br/previsao-do-tempo/cidade/#{@code}/empty") + request = Nokogiri::HTML request - Nokogiri::HTML request + { + :temperature => request.xpath("//span[@class='left temp-momento top10']"), + :data => request.xpath("//li[@class='dados-momento-li list-style-none']") + } end def prepare(value) value.gsub! /^.+:\s*/, "" end - def wind_direction + def wind { "N" => "Norte", "S" => "Sul", diff --git a/spec/clima_tempo_spec.rb b/spec/clima_tempo_spec.rb index 6662483..c5c9a5f 100644 --- a/spec/clima_tempo_spec.rb +++ b/spec/clima_tempo_spec.rb @@ -1,26 +1,31 @@ require "spec_helper" describe ClimaTempo do + it "missing type" do + expect { climatempo = ClimaTempo.new(:code) }.to raise_error(TypeError) + end + it "missing parameters" do expect { climatempo = ClimaTempo.new }.to raise_error(ArgumentError) + expect { climatempo = ClimaTempo.new({}) }.to raise_error(ArgumentError) end - context "values for the time" do + context "values from São Paulo" do before do fixture = File.open("spec/fixture/sao_paulo.html").read FakeWeb.register_uri :any, "http://www.climatempo.com.br/previsao-do-tempo/cidade/558/empty", :body => fixture - @climatempo = ClimaTempo.new :code => 558 + @clima_tempo = ClimaTempo.new :code => 558 end it "object type" do - @climatempo.now.should be_an(Hash) + @clima_tempo.now.should be_an(Hash) end - it "keys" do - hash = @climatempo.now + it "object keys" do + hash = @clima_tempo.now - hash.should have(7).items + hash.should have(6).items hash.should have_key(:temperature) hash.should have_key(:wind) @@ -28,19 +33,17 @@ hash.should have_key(:pressure) hash.should have_key(:intensity) hash.should have_key(:moisture) - hash.should have_key(:video) end - it "values" do - hash = @climatempo.now + it "object values" do + hash = @clima_tempo.now - hash[:temperature].should == "24ºC" - hash[:wind].should == "Sudeste" - hash[:condition].should == "Muitas nuvens" - hash[:pressure].should == "1021 hPa" - hash[:intensity].should == "19 Km/h" - hash[:moisture].should == "57%" - hash[:video].should include("grande-sp") + hash[:temperature].should == "28ºC" + hash[:wind].should == "Norte" + hash[:condition].should == "Tempo firme" + hash[:pressure].should == "1017 hPa" + hash[:intensity].should == "11 Km/h" + hash[:moisture].should == "51%" end end end diff --git a/spec/fixture/sao_paulo.html b/spec/fixture/sao_paulo.html index b18dcc5..22e1e7c 100644 --- a/spec/fixture/sao_paulo.html +++ b/spec/fixture/sao_paulo.html @@ -1,10 +1,483 @@ + + +
+ +Suas cidades:
+ Nenhum favorito encontrado +Suas praias:
+ Nenhum favorito encontrado +Seus aeroportos:
+ Nenhum favorito encontrado +Suas cidades internacionais:
+ Nenhum favorito encontrado +Verifique se os Cookies do seu navegador estão habilitados e tente novamente.
+Deseja deixar a Climatempo como página inicial do seu navegador?
+ SIM + NÃO +Tempo no Momento
-Atualizado às: 13:00
+Atualizado às: 13:00 (horário de Brasília)
Esta semana
-Previsão do tempo atualizada às: 14:20
+Previsão do tempo atualizada às: 14:00 (horário de Brasília)
Ver mais dados
horário | 06h | 09h | @@ -185,91 +687,101 @@||||||||||
direção do vento | -SE | -SE | -ESE | -SE | -SE | -SE | +N | +NNW | +NNW | +NNW | +NW | +NW |
velocidade do vento (km/h) | -9 | -9 | -14 | -17 | -18 | -13 | +5 | +8 | +10 | +10 | +11 | +6 |
pressão (hPa) | -1019 | -1019 | -1019 | -1018 | -1018 | -1018 | +1016 | +1015 | +1015 | +1014 | +1014 | +1015 |
umidade relativa (%) | -90 | -90 | -83 | -67 | -59 | -79 | +87 | +89 | +89 | +57 | +46 | +70 |
Ver mais dados
horário | 06h | 09h | @@ -307,62 +819,62 @@||||||||||
direção do vento | -ESE | -ESE | -E | -ESE | -SE | -SE | +NNW | +NNW | +NW | +NW | +WNW | +NW |
velocidade do vento (km/h) | -8 | -8 | -9 | -8 | -10 | 12 | +13 | +14 | +15 | +14 | +10 | |
pressão (hPa) | -1017 | -1017 | -1017 | -1016 | 1014 | 1014 | +1014 | +1014 | +1013 | +1013 | ||
umidade relativa (%) | -96 | -97 | -72 | -51 | +87 | +91 | +67 | +54 | 57 | -76 | +71 |
Ver mais dados
horário | 06h | 09h | @@ -429,91 +941,91 @@|||||||||
direção do vento | -ENE | -NNE | -NNW | NW | -W | -SE | +NW | +NW | +WNW | +WNW | +WSW |
velocidade do vento (km/h) | -4 | -4 | 9 | -8 | -5 | -5 | +9 | +11 | +13 | +13 | +4 |
pressão (hPa) | -1014 | 1013 | 1013 | -1011 | -1009 | -1009 | +1013 | +1012 | +1012 | +1012 | |
umidade relativa (%) | -92 | -90 | -67 | -42 | -54 | +88 | +91 | +73 | +60 | +51 | 66 |
Índice UV: - Alto + Moderado
- +Ver mais dados
horário | 06h | 09h | @@ -551,91 +1063,91 @@||||||||||
direção do vento | -N | -NNW | -NW | -NW | -NW | -NW | +SSW | +S | +S | +SSE | +SSE | +SSE |
velocidade do vento (km/h) | -9 | +6 | 10 | -15 | -17 | -13 | -4 | +12 | +12 | +11 | +8 | |
pressão (hPa) | -1010 | -1009 | -1009 | -1008 | -1005 | -1006 | +1013 | +1014 | +1016 | +1016 | +1016 | +1016 |
umidade relativa (%) | -81 | -82 | -64 | -56 | -55 | -59 | +83 | +86 | +79 | +75 | +74 | +76 |
Índice UV: - Moderado + Muito Alto
- +Ver mais dados
horário | 06h | 09h | @@ -673,76 +1185,88 @@||||||||||
direção do vento | +NNW | NW | WNW | W | SW | -SSW | -SSE | +S | ||||
velocidade do vento (km/h) | -6 | -6 | -9 | -10 | -15 | +1 | +5 | +7 | +11 | 12 | +9 | |
pressão (hPa) | -1008 | -1008 | -1009 | -1008 | -1008 | -1010 | +1016 | +1015 | +1016 | +1015 | +1014 | +1016 |
umidade relativa (%) | -77 | -82 | -72 | -60 | -68 | -87 | +88 | +90 | +83 | +48 | +45 | +70 |
Tendências para os próximos dias:
*Esta tendência é resultado de modelos numéricos e não tem interferência direta dos meteorologistas. Estes valores podem variar muito de um dia para o outro.
+Compartilhar
+ + + Históricos de dados meteorológicosUm completo banco de dados com registros de chuva, vento, temperatura e raios. Saiba mais
Locais próximos da sua cidade:
- Diadema-SP - São Caetano do Sul-SP - Taboão da Serra-SP - Osasco-SP - São Bernardo do Campo-SP - Mauá-SP - Embu das Artes-SP - Carapicuíba-SP - Santo André-SP - Itapecerica da Serra-SP + Diadema-SP + São Caetano do Sul-SP + Taboão da Serra-SP + Osasco-SP + São Bernardo do Campo-SP + Mauá-SP + Embu das Artes-SP + Carapicuíba-SP + Santo André-SP + Itapecerica da Serra-SPConsultoria Meteorológica
Receba informações customizadas e tenha acesso aos meteorologistas 24 horas por dia.
- - - + + +Nova
+09/05
+Crescente
-18/01
+18/05
Cheia
-27/01
+25/05
Minguante
-03/02
-Nova
-10/02
+02/05
Verao
-21/12
-Outono
20/03
@@ -1107,14 +1664,45 @@Primavera
22/09
+Verao
+21/12
Outros janeiros chuvosos no Rio de Janeiro
+ Por: JOÃO CARLOS BERTOLO +