previsao-clima-tempo 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>previsao-clima-tempo</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ </buildSpec>
9
+ <natures>
10
+ <nature>com.aptana.projects.webnature</nature>
11
+ <nature>org.radrails.rails.core.railsnature</nature>
12
+ <nature>com.aptana.ruby.core.rubynature</nature>
13
+ </natures>
14
+ </projectDescription>
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in previsao-clima-tempo.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 paulo
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,42 @@
1
+ # PrevisaoClimaTempo
2
+
3
+ Permiti o acesso as funcionalidades e informações do Clima Tempo.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'previsao-clima-tempo'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install previsao-clima-tempo
18
+
19
+ ## Usage
20
+
21
+ Instanciando um objeto.Pro padrão o código da cidade deve ser informado.
22
+ PrevisaoClimaTempo.new(:codCity => '3156')
23
+
24
+
25
+ Devolve um objeto PrevisaoDia com as informações do dia atual.
26
+ PrevisaoClimaTempo.new(:codCity => '3156').now
27
+
28
+ Devolve um objeto PrevisaoDia com as informações do dia seguinte.
29
+ PrevisaoClimaTempo.new(:codCity => '3156').tomorrow
30
+
31
+ Devolve um collection de objetos PrevisaoDia com as informações dos dias referenciados.
32
+ PrevisaoClimaTempo.new(:codCity => '3156').days(13) máximo de 13 dias a partir do dia atual
33
+
34
+ Devolve um objeto PrevisaoDia com as informações do dia referenciado.
35
+ PrevisaoClimaTempo.new(:codCity => '3156').day(date)
36
+
37
+
38
+ ## Dependencies
39
+
40
+ <ul>
41
+ <li><a href="http://nokogiri.org">nokogiri</a></li>
42
+ </ul>
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,209 @@
1
+ #!/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require "previsao-clima-tempo/version"
5
+ require "previsao-clima-tempo/previsao_dia"
6
+ require 'open-uri'
7
+ require "nokogiri"
8
+
9
+ class PrevisaoClimaTempo
10
+
11
+
12
+ attr_reader :codCity
13
+
14
+ def initialize(option)
15
+ raise TypeError unless option.kind_of? Hash
16
+ raise ArgumentError unless option.has_key? :codCity
17
+
18
+ @codCity = option[:codCity]
19
+ end
20
+
21
+
22
+
23
+ # Devolve a previsão para a data informada,
24
+ # no máximo a data atual + 13 dias
25
+ #
26
+ # Example:
27
+ # >> PrevisaoClimaTempo.day("02-03-2012".to_date)
28
+ #
29
+ # Arguments:
30
+ # date: (Date)
31
+ #
32
+ def day(date)
33
+
34
+ days = self.days(14)
35
+
36
+ day = Object
37
+
38
+ days.each do |dayEach|
39
+ break day = dayEach if dayEach.dia == date.strftime("%d-%m-%Y")
40
+ end
41
+
42
+ day
43
+
44
+ end
45
+
46
+
47
+ # Devolve uma coleção de objetos,
48
+ # no máximo a data atual + 13 dias
49
+ #
50
+ # Example:
51
+ # >> PrevisaoClimaTempo.days(4)
52
+ #
53
+ # Arguments:
54
+ # qtdDays: (Integer)
55
+ #
56
+ def days(qtdDays)
57
+
58
+ days = Array.new
59
+
60
+ urlPadrao = "http://servicos.cptec.inpe.br/XML/cidade/7dias/#{@codCity}/previsao.xml"
61
+
62
+ urlEstendida = "http://servicos.cptec.inpe.br/XML/cidade/#{@codCity}/estendida.xml"
63
+
64
+ loadDays(urlPadrao,days,qtdDays)
65
+
66
+ if(qtdDays > 4)
67
+
68
+ loadDays(urlEstendida,days,qtdDays)
69
+
70
+ end
71
+
72
+ days
73
+
74
+ end
75
+
76
+
77
+ # Devolve um objeto com
78
+ # as condiões do tempo do
79
+ # dia seguinte
80
+ #
81
+ # Example:
82
+ # >> PrevisaoClimaTempo.tomorrow()
83
+ #
84
+ # Arguments:
85
+ #
86
+ def tomorrow()
87
+
88
+ self.day(Time.now + 1.days)
89
+
90
+ end
91
+
92
+
93
+ # Devolve um objeto com
94
+ # as condiões do tempo do
95
+ # dia atual
96
+ #
97
+ # Example:
98
+ # >> PrevisaoClimaTempo.now()
99
+ #
100
+ # Arguments:
101
+ #
102
+ def now()
103
+
104
+ self.day(Time.now)
105
+
106
+ end
107
+
108
+
109
+ # Devolve uma coleção de hashs
110
+ # com as cidades compreendidas
111
+ # pelo clima tempo
112
+ #
113
+ # Example:
114
+ # >> PrevisaoClimaTempo.cities()
115
+ #
116
+ # Arguments:
117
+ #
118
+ def cities()
119
+
120
+ url = "http://servicos.cptec.inpe.br/XML/listaCidades"
121
+
122
+ cities = Array.new
123
+
124
+ request ||= request(url)
125
+
126
+ request.xpath('//cidades/cidade').each do |cidadePath|
127
+
128
+ cidade = Hash.new
129
+
130
+ cidade[:id] = cidadePath.at_xpath('id').text
131
+ cidade[:uf] = cidadePath.at_xpath('uf').text
132
+ cidade[:nome] = cidadePath.at_xpath('nome').text
133
+
134
+ cities << cidade
135
+
136
+ end
137
+
138
+ cities
139
+
140
+ end
141
+
142
+ private
143
+ # Devolve o doc xml
144
+ #
145
+ # Example:
146
+ # >> PrevisaoClimaTempo.request(url)
147
+ #
148
+ # Arguments:
149
+ # url: (String)
150
+ #
151
+ def request(url)
152
+ begin
153
+
154
+ Nokogiri::XML(open(url))
155
+
156
+ rescue SocketError => e
157
+ raise "Request failed, without connection to server."
158
+ end
159
+ end
160
+
161
+
162
+
163
+ # Devolve uma coleção de objetos,
164
+ # no máximo a data atual + 13 dias
165
+ #
166
+ #
167
+ #
168
+ # Arguments:
169
+ # url: (String)
170
+ # days: (Integer)
171
+ # limit: (Integer)
172
+ #
173
+ def loadDays(url,days,limit)
174
+
175
+ previsoes ||= request(url)
176
+
177
+ previsoes.xpath('//cidade/previsao').each do |previsao|
178
+
179
+ days << assign(previsao) if days.size < limit
180
+
181
+ end
182
+
183
+ days
184
+
185
+ end
186
+
187
+
188
+
189
+ # Efetua o assign do objeto PrevisaoDia
190
+ #
191
+ #
192
+ # Example:
193
+ # >> PrevisaoClimaTempo.assign(previsao)
194
+ #
195
+ # Arguments:
196
+ #
197
+ def assign(previsao)
198
+
199
+ PrevisaoDia.new(previsao.at_xpath('dia').text,
200
+ previsao.at_xpath('tempo').text,
201
+ previsao.at_xpath('maxima').text,
202
+ previsao.at_xpath('minima').text,
203
+ previsao.at_xpath('iuv') ? previsao.at_xpath('iuv').text : "Nao informado.")
204
+
205
+
206
+
207
+ end
208
+
209
+ end
@@ -0,0 +1,67 @@
1
+ #!/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ class PrevisaoDia
5
+
6
+ attr_reader :dia,:tempo,:maxima,:minima,:iuv
7
+ attr_writer :dia,:tempo,:maxima,:minima,:iuv
8
+
9
+ def initialize(dia,tempo,maxima,minima,iuv)
10
+ @dia = dayFormat(dia)
11
+ @tempo = tempoLabel[tempo]
12
+ @maxima = maxima
13
+ @minima = minima
14
+ @iuv = iuv
15
+ end
16
+
17
+ def dayFormat(dia)
18
+ dia.to_date.strftime("%d-%m-%Y")
19
+ end
20
+
21
+ def tempoLabel
22
+ {
23
+ "ec" => "Encoberto com Chuvas Isoladas",
24
+ "ci" => "Chuvas Isoladas",
25
+ "c " => "Chuva",
26
+ "in" => "Instável",
27
+ "pp" => "Poss. de Pancadas de Chuva",
28
+ "cm" => "Chuva pela Manha",
29
+ "cn" => "Chuva a Noite",
30
+ "pt" => "Pancadas de Chuva a Tarde",
31
+ "pm" => "Pancadas de Chuva pela Manhã",
32
+ "np" => "Nublado e Pancadas de Chuva",
33
+ "pc" => "Pancadas de Chuva",
34
+ "pn" => "Parcialmente Nublado",
35
+ "cv" => "Chuvisco",
36
+ "ch" => "Chuvoso",
37
+ "t " => "Tempestade",
38
+ "ps" => "Predomínio de Sol",
39
+ "e " => "Encoberto",
40
+ "n " => "Nublado",
41
+ "cl" => "Céu Claro",
42
+ "nv" => "Nevoeiro",
43
+ "g " => "Geada",
44
+ "ne" => "Neve",
45
+ "nd" => "Não Definido",
46
+ "pnt" => "Pancadas de Chuva a Noite",
47
+ "psc" => "Possibilidade de Chuva",
48
+ "pcm" => "Possibilidade de Chuva pela Manhã",
49
+ "pct" => "Possibilidade de Chuva a Tarde",
50
+ "pcn" => "Possibilidade de Chuva a Noite",
51
+ "npt" => "Nublado com Pancadas a Tarde",
52
+ "npn" => "Nublado com Pancadas a Noite",
53
+ "ncn" => "Nublado com Poss. de Chuva a Noite",
54
+ "nct" => "Nublado com Poss. de Chuva a Tarde",
55
+ "ncm" => "Nubl. c/ Poss. de Chuva pela Manhã",
56
+ "npm" => "Nublado com Pancadas pela Manhã",
57
+ "npp" => "Nublado com Possibilidade de Chuva",
58
+ "vn" => "Variação de Nebulosidade",
59
+ "ct" => "Chuva a Tarde",
60
+ "ppn" => "Poss. de Panc. de Chuva a Noite",
61
+ "ppt" => "Poss. de Panc. de Chuva a Tarde",
62
+ "ppm" => "Poss. de Panc. de Chuva pela Manhã"
63
+ }
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,7 @@
1
+ module Previsao
2
+ module Clima
3
+ module Tempo
4
+ VERSION = "0.0.10"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'previsao-clima-tempo/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "previsao-clima-tempo"
8
+ gem.version = Previsao::Clima::Tempo::VERSION
9
+ gem.platform = Gem::Platform::RUBY
10
+ gem.authors = ["Paulo de Tarço"]
11
+ gem.email = ["paulopjazz@gmail.com"]
12
+ gem.description = "Garante as funcionalidades oferecidas pelo clima tempo."
13
+ gem.summary = "Oferece a previsão do tempo do Brasil."
14
+ gem.homepage = "https://github.com/ptarco/previsao-clima-tempo"
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+
21
+
22
+ gem.add_dependency "nokogiri", ">= 1.5.9"
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: previsao-clima-tempo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.10
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Paulo de Tarço
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-08-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.5.9
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.9
30
+ description: Garante as funcionalidades oferecidas pelo clima tempo.
31
+ email:
32
+ - paulopjazz@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - .project
39
+ - Gemfile
40
+ - LICENSE.txt
41
+ - README.md
42
+ - Rakefile
43
+ - lib/previsao-clima-tempo.rb
44
+ - lib/previsao-clima-tempo/previsao_dia.rb
45
+ - lib/previsao-clima-tempo/version.rb
46
+ - previsao-clima-tempo.gemspec
47
+ homepage: https://github.com/ptarco/previsao-clima-tempo
48
+ licenses: []
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 1.8.24
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: Oferece a previsão do tempo do Brasil.
71
+ test_files: []