eltiempobcn 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/eltiempo +4 -0
  3. data/lib/eltiempobcn.rb +74 -0
  4. data/lib/place.rb +80 -0
  5. metadata +49 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5d7682cb4ef72e599fe11c689f8000446d4a45a9bc2ecc86f9145eb79c196c91
4
+ data.tar.gz: c8493b7683ec829d6af27b6d2ca04677f1507b905c9a1d6faf09fd518cbece7c
5
+ SHA512:
6
+ metadata.gz: 85d3ad78327d60022c7e73a8f99dce2a1e4ffa7566a43f84fbbd1293b70a401040856954d35ef21d8314726d277acff67636857c25ee825ed7f731deb3e1fb6a
7
+ data.tar.gz: 426f60629adedde5d31a187599804abb89883dd75dc16a1b40892b74ec751414dd068f490fa3019b592ea9e07dd7d8268c13eead0548005b50c2550bafcb6eea
data/bin/eltiempo ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'eltiempobcn'
3
+ ElTiempoCLI.start(ARGV)
4
+ # ElTiempoBcn::get_bcn
@@ -0,0 +1,74 @@
1
+ require 'thor'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+ require 'i18n'
5
+ require 'byebug'
6
+ require_relative 'place.rb'
7
+
8
+ # gem uninstall -x eltiempobcn; gem build eltiempobcn.gemspec; gem install eltiempobcn
9
+ # load './lib/eltiempobcn.rb'; ElTiempoCLI.start( ['today', 'Barcelona'] )
10
+ class ElTiempoCLI < Thor
11
+ @@places, @@places_names = Place.get_places_list
12
+
13
+ #
14
+ #
15
+ desc "today PLACE", "Returns the forcast temperature for today for PLACE"
16
+ def today( place_name )
17
+ place = Place.set_temperatures( place_name.to_s, @@places )
18
+ if place.kind_of?( Place )
19
+ puts "Today's temperatures for #{ place.name } are: [ min: #{ place.min_today }, max: #{ place.max_today } ] celsius"
20
+ else
21
+ puts "Couldn't find the city #{ place_name } or its data."
22
+ end
23
+ end
24
+
25
+ #
26
+ #
27
+ desc "av_max PLACE", "Returns the average of the Maximums for the week in PLACE"
28
+ def av_max( place_name )
29
+ place = Place.set_temperatures( place_name.to_s, @@places )
30
+ if place.kind_of?( Place )
31
+ puts "The average temperature for the Maximums this week in #{ place.name } are: #{ place.max_avg } celsius degrees"
32
+ else
33
+ puts "Couldn't find the city #{ place_name } or its data."
34
+ end
35
+ end
36
+
37
+ #
38
+ #
39
+ desc "av_min PLACE", "Returns the average of the minimums for the week in PLACE"
40
+ def av_min( place_name )
41
+ place = Place.set_temperatures( place_name.to_s, @@places )
42
+ if place.kind_of?( Place )
43
+ puts "The average temperature for the minimuims this week in #{ place.name } are: #{ place.min_avg } celsius degrees"
44
+ else
45
+ puts "Couldn't find the city #{ place_name } or its data."
46
+ end
47
+ end
48
+
49
+ #
50
+ #
51
+ desc "list", "Returns the list of places"
52
+ def list
53
+ puts @@places_names.join( " | " )
54
+ end
55
+
56
+
57
+ #
58
+ #
59
+ def self.start( args )
60
+ if @@places
61
+ clean_args = args
62
+ clean_args[ 0 ] = args[ 0 ].sub( /^-*/, "" ) unless clean_args[ 0 ].nil? # remove the leading dashes before execuing the start method
63
+ super( clean_args )
64
+ else
65
+ puts "Couldn't connect with the server, please check your connection and try again later"
66
+ end
67
+ end
68
+
69
+ #
70
+ #
71
+ def self.exit_on_failure?
72
+ true
73
+ end
74
+ end
data/lib/place.rb ADDED
@@ -0,0 +1,80 @@
1
+ #
2
+ #
3
+ class Place
4
+ attr_accessor :name, :max_today, :min_today, :max_avg, :min_avg
5
+
6
+ #
7
+ #
8
+ def initialize( name, max_today, min_today, max_avg, min_avg )
9
+ @name = name
10
+ @max_today = max_today
11
+ @min_today = min_today
12
+ @max_avg = max_avg
13
+ @min_avg = min_avg
14
+ end
15
+
16
+ #
17
+ #
18
+ def Place.verify_and_get_temperatures( place, places_list )
19
+ place = place.to_sym_city
20
+ city_values = Place.get_array_from_xml( place, places_list ) if places_list.has_key?( place )
21
+ return city_values
22
+ end
23
+
24
+ #
25
+ #
26
+ def Place.get_array_from_xml( place, places_list )
27
+ aff_id = "&affiliate_id=fvzoaihj8486"
28
+ necessary_data = [ :temperaturaminima, :temperaturamaxima ]
29
+ city_values = {}
30
+
31
+ place_url = ( places_list[place].sub( "&amp;", "&" ) + aff_id )
32
+ doc = Nokogiri::XML( open( place_url ) )
33
+ data_city = doc.xpath( "//var" )
34
+ data_city.each do |weather_param|
35
+ city_values[ weather_param.children.children[0].to_s.to_sym_city ] = weather_param.children.children[2..-1].map{ |att| att.attributes['value'].value.to_f }
36
+ end
37
+ city_values = city_values.select{ |key, value| necessary_data.include?( key ) }
38
+ return city_values
39
+ end
40
+
41
+ #
42
+ #
43
+ def Place.get_places_list
44
+ begin
45
+ doc = Nokogiri::XML(open("http://api.tiempo.com/index.php?api_lang=es&division=102&affiliate_id=fvzoaihj8486"))
46
+ data_cities = doc.xpath( "//data" )
47
+ places = {}
48
+ names = []
49
+ data_cities.each do |data_city|
50
+ places[ data_city.children.children[0].to_s.to_sym_city ] = data_city.children.children[1].to_s
51
+ names << data_city.children.children[0].to_s
52
+ end
53
+ return places, names
54
+ rescue
55
+ return false, false
56
+ end
57
+ end
58
+
59
+ #
60
+ #
61
+ def Place.set_temperatures( place, places )
62
+ place_data = Place.verify_and_get_temperatures( place.to_s, places )
63
+
64
+ place = Place.new( place,
65
+ place_data[ :temperaturamaxima ][0],
66
+ place_data[ :temperaturaminima ][0],
67
+ ( place_data[ :temperaturamaxima ].sum / place_data[ :temperaturamaxima ].length ).round( 2 ),
68
+ ( place_data[ :temperaturaminima ].sum / place_data[ :temperaturaminima ].length ).round( 2 ) )
69
+ end
70
+
71
+ end
72
+
73
+ #
74
+ #
75
+ class String
76
+ def to_sym_city
77
+ I18n.config.available_locales = :en
78
+ return I18n.transliterate( self.tr( " ", "").downcase ).to_sym
79
+ end
80
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eltiempobcn
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Marcelo Jimenez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: It's a simple gem to get the ability to get the weather for different
14
+ regions in Catalonia using CLI
15
+ email:
16
+ - mejimenez@gmail.com
17
+ executables:
18
+ - eltiempo
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/eltiempo
23
+ - lib/eltiempobcn.rb
24
+ - lib/place.rb
25
+ homepage: http://rubygems.org/gems/eltiempobcn
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.7.6
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: ElTiempoBcn test gem
49
+ test_files: []