manage bookmarks, bugfixes
[smr.git] / gui / lib / smr / reapers / kitco.rb
blob1241def22fb175866b5ea7bd404726a7c21d010b
2 # This file is part of SMR.
4 # SMR is free software: you can redistribute it and/or modify it under the
5 # terms of the GNU General Public License as published by the Free Software
6 # Foundation, either version 3 of the License, or (at your option) any later
7 # version.
9 # SMR is distributed in the hope that it will be useful, but WITHOUT ANY
10 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License along with
14 # SMR.  If not, see <http://www.gnu.org/licenses/>.
16 require 'open-uri'
17 require 'nokogiri'
20 # Retrieve Quote from Kitco Precious Metals
21 class Smr::Reapers::Kitco
22     include Smr::Reapers
23     QUERY_URL = 'http://www.kitco.com/market/'
25     def initialize(security)
26         raise 'Security object required' unless security.is_a? Security
27         raise 'Security.type=%s not supported by this reaper' % security.type unless Kitco.type_supported? security.type
28         @security = security
29     end
31     ##
32     # List of Security#types this reaper can retrieve data for.
33     def Kitco.security_types
34         [ :metal ]
35     end
37     ##
38     # tell whether :type can be handled by this reaper.
39     def Kitco.type_supported?(type)
40         Kitco.security_types.include? type.to_sym
41     end
43     ##
44     # Retrieve current Quote for Security
45     def quote
46         src = open QUERY_URL
47         page = Nokogiri::HTML(src) do |config|
48             config.strict.noblanks
49         end
51         q = Quote.new(:id_security=>@security.id, :exchange=>'World Spot Price')
53         # look for exchange rate to EUR since site shows USD
54         rate = clean_special_chars(
55             page.css('div.exchange_rates span.img_flag_euro').first.parent.parent.next_sibling.css('td.index').text
56         ).to_f
58         # look for quote
59         id = case @security.symbol.downcase
60             when 'silver'    then 'AG'
61             when 'gold'      then 'AU'
62             when 'platinum'  then 'PT'
63             when 'palladium' then 'PD'
64             when 'rhodium'   then 'RH'
65         end
67         q.time_last = Time.strptime(
68             '%s %s' % [
69                 page.css('td#wsp-%s-date' % id).text,
70                 page.css('td#wsp-%s-time' % id).text
71              ],
72              '%m/%d/%Y %H:%M'
73         )
75         str = clean_special_chars(
76             page.css('td#wsp-%s-bid' % id).text
77         )
78         q.last = str.to_f * rate unless str.blank?
80         return (q.last>0 and q.time_last) ? q : false
81     end
82 end