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 @@ + + + + +Climatempo – Previsão do Tempo para São Paulo - SP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ Climatempo +
+ +
+ + Gerenciar favoritos +
+

Suas cidades:

+ Nenhum favorito encontrado +
+
+

Suas praias:

+ Nenhum favorito encontrado +
+
+

Seus aeroportos:

+ Nenhum favorito encontrado +
+
+

Suas cidades internacionais:

+ Nenhum favorito encontrado +
+
+
+
+ nova
localidade
+
+
+
+ + + + +
+
+
+
+

Enviar Previsão por E-mail
Digite abaixo seu nome e email

+
+ +

+ + +

+

+ + +

+ +
+
+ +
+ +
+
+

Ocorreu um erro

+

Verifique se os Cookies do seu navegador estão habilitados e tente novamente.

+
+
+
+ + +
+
+ Adicionar a Climatempo como página inicial +

Deseja deixar a Climatempo como página inicial do seu navegador?

+ SIM + NÃO +
+
+
+ + +
+ +
@@ -12,12 +485,15 @@

Previsão do Tempo para São Paulo - SP

    -
  • - -
  • + + +
  • + +
  • - + +
  • @@ -33,21 +509,28 @@

    Previs

    Tempo no Momento

    -

    Atualizado às: 13:00

    +

    Atualizado às: 13:00 (horário de Brasília)

    - -
    -
    + + +
    + +
    - 24ºC + 28ºC
      -
    • Direção do Vento: SE
    • -
    • Condição: Muitas nuvens
    • -
    • Pressão: 1021 hPa
    • -
    • Intensidade do Vento: 19 Km/h
    • -
    • Umidade: 57%
    • +
    • Direção do Vento: N
    • +
    • Condição: Tempo firme
    • +
    • Pressão: 1017 hPa
    • +
    • Intensidade do Vento: 11 Km/h
    • +
    • Umidade: 51%
    @@ -55,6 +538,14 @@

    Previs

+
+
@@ -63,15 +554,15 @@

Previs

Sr. Agricultor

Veja detalhes da previsão para sua cultura.

- - - - - - - - - + + + + + + + + +
@@ -81,7 +572,7 @@

Previs

Esta semana

-

Previsão do tempo atualizada às: 14:20

+

Previsão do tempo atualizada às: 14:00 (horário de Brasília)

- + - + - + +
+

Qualidade da previsão para o dia de hoje:

+ +
+ + + + + +
+
- Terça-Feira, 22/01 + Sexta-Feira, 03/05
Nascer do sol: - 06h39 + 06h28 Pôr do sol: - 19h58 + 17h39
    -
  • Manhã
  • -
  • Tarde
  • -
  • Noite
  • +
  • Manhã
  • +
  • Tarde
  • +
  • Noite
  • Max - 24º + 30º Min - 16º + 17º
  • - 0mm
    0%
    + 0mm
    0%
  • - SE
    13km/h
    + NNW
    7km/h
  • - 95% - 59% + 91% + 46%
@@ -169,12 +671,12 @@

Previs

- Sol com muitas nuvens durante o dia e períodos de céu nublado. Noite com muitas nuvens. + Dia de sol, com nevoeiro ao amanhecer. As nuvens aumentam no decorrer da tarde.

Ver mais dados

- + @@ -185,91 +687,101 @@

Previs

- - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + -
horário 06h 09h
direção do ventoSESEESESESESENNNWNNWNNWNWNW
velocidade do vento (km/h)9914171813581010116
pressão (hPa)101910191019101810181018101610151015101410141015
umidade relativa (%)909083675979878989574670
+
+ +
- Quarta-Feira, 23/01 + Sábado, 04/05
Nascer do sol: - 06h39 + 06h28 Pôr do sol: - 19h57 + 17h38
    -
  • Manhã
  • -
  • Tarde
  • -
  • Noite
  • +
  • Manhã
  • +
  • Tarde
  • +
  • Noite
  • Max - 27º + 30º Min - 17º + 18º
  • - 5mm
    80%
    + 0mm
    0%
  • - ESE
    9km/h
    + NNW
    12km/h
  • - 97% - 51% + 93% + 54%
@@ -291,12 +803,12 @@

Previs

- Sol com muitas nuvens. Pancadas de chuva à tarde e à noite. + Dia de sol, com nevoeiro ao amanhecer. As nuvens aumentam no decorrer da tarde.

Ver mais dados

- + @@ -307,62 +819,62 @@

Previs

- - - - - - + + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - + -
horário 06h 09h
direção do ventoESEESEEESESESENNWNNWNWNWWNWNW
velocidade do vento (km/h)889810 121314151410
pressão (hPa)1017101710171016 1014 10141014101410131013
umidade relativa (%)9697725187916754 577671
+

- Quinta-Feira, 24/01 + Domingo, 05/05
Nascer do sol: - 06h40 + 06h29 Pôr do sol: - 19h57 + 17h37
    -
  • Manhã
  • +
  • Manhã
  • Tarde
  • Noite
@@ -370,28 +882,28 @@

Previs
  • Max - 31º + 28º Min - 18º + 17º
  • - 5mm
    80%
    + 2mm
    80%
  • - ENE
    6km/h
    + NW
    9km/h
  • 92% - 42% + 51%

@@ -413,12 +925,12 @@

Previs

- Sol com muitas nuvens. Pancadas de chuva à tarde e à noite. + Sol e aumento de nuvens de manhã. Pancadas de chuva à tarde e à noite.

Ver mais dados

- + @@ -429,91 +941,91 @@

Previs

- - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + -
horário 06h 09h
direção do ventoENENNENNW NWWSENWNWWNWWNWWSW
velocidade do vento (km/h)44 985591113134
pressão (hPa)1014 1013 10131011100910091013101210121012
umidade relativa (%)92906742548891736051 66
+
- Sexta-Feira, 25/01 + Segunda-Feira, 06/05
Nascer do sol: - 06h41 + 06h29 Pôr do sol: - 19h57 + 17h37
    -
  • Manhã
  • -
  • Tarde
  • -
  • Noite
  • +
  • Manhã
  • +
  • Tarde
  • +
  • Noite
  • Max - 32º + 22º Min - 20º + 14º
  • - 15mm
    80%
    + 8mm
    80%
  • - NW
    10km/h
    + SSE
    8km/h
  • - 82% - 53% + 86% + 72%
@@ -529,18 +1041,18 @@

Previs

Índice UV: - Alto + Moderado

- +
- Sol e aumento de nuvens de manhã. Pancadas de chuva à tarde e à noite. + Sol com muitas nuvens durante o dia. Períodos de nublado, com chuva a qualquer hora.

Ver mais dados

- + @@ -551,91 +1063,91 @@

Previs

- - - - - - + + + + + + - + - - - - + + + + - - - - - - + + + + + + - - - - - - + + + + + + -
horário 06h 09h
direção do ventoNNNWNWNWNWNWSSWSSSSESSESSE
velocidade do vento (km/h)96 1015171341212118
pressão (hPa)101010091009100810051006101310141016101610161016
umidade relativa (%)818264565559838679757476
+

- Sábado, 26/01 + Terça-Feira, 07/05
Nascer do sol: - 06h41 + 06h30 Pôr do sol: - 19h57 + 17h36
    -
  • Manhã
  • -
  • Tarde
  • -
  • Noite
  • +
  • Manhã
  • +
  • Tarde
  • +
  • Noite
  • Max - 26º + 24º Min - 19º + 11º
  • - 35mm
    90%
    + 0mm
    0%
  • - NNW
    9km/h
    + NW
    6km/h
  • - 87% - 59% + 90% + 38%
@@ -651,18 +1163,18 @@

Previs

Índice UV: - Moderado + Muito Alto

- +
- Chuvoso durante o dia e a noite + Sol com algumas nuvens. Não chove.

Ver mais dados

- + @@ -673,76 +1185,88 @@

Previs

+ - - + - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + -
horário 06h 09h
direção do ventoNNW NW WNW W SWSSWSSES
velocidade do vento (km/h)669101515711 129
pressão (hPa)100810081009100810081010101610151016101510141016
umidade relativa (%)778272606887889083484570
+

+ +
+ + +

Tendências para os próximos dias:

- Domingo, 27/01 + Quarta-Feira, 08/05
  • - +
  • Max - 24º + 19º Min - 17º +
  • - 5mm
    40%
    + 0mm
    0%
- Nublado com aberturas de sol à  tarde. Pode garoar de manhã e à noite. + Sol com algumas nuvens. Não chove.
@@ -751,30 +1275,30 @@

Previs
- Segunda-Feira, 28/01 + Quinta-Feira, 09/05
  • - +
  • Max - 23º + 22º Min - 16º + 13º
  • - 20mm
    90%
    + 0mm
    0%
- Chuvoso durante o dia e a noite + Sol com algumas nuvens. Não chove.
@@ -783,7 +1307,7 @@

Previs
- Terça-Feira, 29/01 + Sexta-Feira, 10/05
    @@ -794,19 +1318,19 @@

    Previs
    • Max - 25º + 24º Min - 18º + 11º
    • - 15mm
      80%
      + 2mm
      80%
    - Sol o dia todo. Muitas nuvens e pancadas de chuva de manhã e à noite. + Sol e aumento de nuvens de manhã. Pancadas de chuva à tarde e à noite.

@@ -815,7 +1339,7 @@

Previs
- Quarta-Feira, 30/01 + Sábado, 11/05
- +
+ @@ -1393,14 +2073,14 @@

Consultoria

-