class GoogleFinance::Financials

Constants

COR_ROW
DNA_ROW
INT_ROW
NET_ROW
OTH_ROW
REV_ROW

Row positions in the HTML grid

RND_ROW
SGA_ROW
UNU_ROW
YEAR_1

year positions in the HTML grid

YEAR_2
YEAR_3
YEAR_4

Attributes

years[RW]

Public Class Methods

new(ticker) click to toggle source
# File lib/GoogleFinance/Financials.rb, line 42
def initialize(ticker)
  
  @years = {}

  # build URL in the right format, in pages of 100 day quotes
  @financial_url = "https://www.google.com/finance?q=#{ticker}&fstype=ii"
  @page          = Nokogiri::HTML(open(@financial_url))

  #
  yr1 = Statement.new
  yr2 = Statement.new
  yr3 = Statement.new
  yr4 = Statement.new

  # map the value to the correct areas in the financial statement objects
  yr1.revenue, yr2.revenue, yr3.revenue, yr4.revenue                 = get_figures(REV_ROW, @page)
  yr1.cost_of_rev, yr2.cost_of_rev, yr3.cost_of_rev, yr4.cost_of_rev = get_figures(COR_ROW, @page)
  yr1.sg_and_a, yr2.sg_and_a, yr3.sg_and_a, yr4.sg_and_a             = get_figures(SGA_ROW, @page)
  yr1.r_and_d, yr2.r_and_d, yr3.r_and_d, yr4.r_and_d                 = get_figures(RND_ROW, @page)
  yr1.d_and_a, yr2.d_and_a, yr3.d_and_a, yr4.d_and_a                 = get_figures(DNA_ROW, @page)
  yr1.interest, yr2.interest, yr3.interest, yr4.interest             = get_figures(INT_ROW, @page)
  yr1.unusual, yr2.unusual, yr3.unusual, yr4.unusual                 = get_figures(UNU_ROW, @page)
  yr1.others, yr2.others, yr3.others, yr4.others                     = get_figures(OTH_ROW, @page)
  yr1.net_income, yr2.net_income, yr3.net_income, yr4.net_income     = get_figures(NET_ROW, @page)


  # get the fiscal years as in the statements
  @years[get_fiscal_date(YEAR_1, @page)] = yr1
  @years[get_fiscal_date(YEAR_2, @page)] = yr2
  @years[get_fiscal_date(YEAR_3, @page)] = yr3
  @years[get_fiscal_date(YEAR_4, @page)] = yr4

end

Public Instance Methods

get_figures(row, page) click to toggle source

Based on reequest row (class constant) will get the figures for the 4 years

# File lib/GoogleFinance/Financials.rb, line 78
def get_figures(row, page)
  
  # get the requested figure for the 4 years that are shown
  element = page.xpath("//div[@id='incannualdiv']/table[1]/tbody/tr[#{row}]/td[#{YEAR_1}]")
  figure_yr1 = element.inner_html.gsub(",", "").to_f
  
  element = page.xpath("//div[@id='incannualdiv']/table[1]/tbody/tr[#{row}]/td[#{YEAR_2}]")
  figure_yr2 = element.inner_html.gsub(",", "").to_f
  
  element = page.xpath("//div[@id='incannualdiv']/table[1]/tbody/tr[#{row}]/td[#{YEAR_3}]")
  figure_yr3 = element.inner_html.gsub(",", "").to_f
  
  element = page.xpath("//div[@id='incannualdiv']/table[1]/tbody/tr[#{row}]/td[#{YEAR_4}]")
  figure_yr4 = element.inner_html.gsub(",", "").to_f

  return [figure_yr1, figure_yr2, figure_yr3, figure_yr4]

end
get_fiscal_date(year, page) click to toggle source

get the end date of the fiscale period associated with the years [1..4]

# File lib/GoogleFinance/Financials.rb, line 99
def get_fiscal_date(year, page)
  
  element = page.xpath("//div[@id='incannualdiv']/table/thead/tr/th[#{year}]")
  return element.inner_html.gsub(/^.*ending /, "").gsub("\n", "")

end