class StockInquiry::Scraper

Attributes

doc[R]
doc_description[R]
stock[RW]

Public Class Methods

new(ticker) click to toggle source
# File lib/stock_inquiry/scraper.rb, line 5
def initialize(ticker)
  @stock = StockInquiry::Stock.new
  @stock.ticker = ticker
  @doc = Nokogiri::HTML(open("https://www.reuters.com/finance/stocks/overview/#{ticker}"))
  @doc_description = Nokogiri::HTML(open("https://www.reuters.com/finance/stocks/company-profile/#{ticker}"))
end

Public Instance Methods

scrape_all() click to toggle source
# File lib/stock_inquiry/scraper.rb, line 12
def scrape_all
  scrape_name
  scrape_prices
  scrape_articles
  scrape_description
  @stock.save
end
scrape_articles() click to toggle source
# File lib/stock_inquiry/scraper.rb, line 37
def scrape_articles
  @doc.search(".moduleBody").each do |section|
    section.search(".feature").each do |article|
      news_article = StockInquiry::Article.new
      news_article.title = article.search("h2").text.strip
      news_article.url = article.search("h2 a").attr('href').text.strip
      @stock.add_article(news_article)
    end
  end
end
scrape_description() click to toggle source
# File lib/stock_inquiry/scraper.rb, line 48
def scrape_description
  div = @doc_description.search("#companyNews div.moduleBody")
  div.search("div.moreLink").remove
  @stock.description = div.text.strip
end
scrape_name() click to toggle source
# File lib/stock_inquiry/scraper.rb, line 20
def scrape_name
  @stock.name = @doc.search("#sectionTitle").text.strip
end
scrape_prices() click to toggle source
# File lib/stock_inquiry/scraper.rb, line 24
def scrape_prices
  @doc.search("#headerQuoteContainer").each do |info|
    price = info.search("div.sectionQuote.nasdaqChange div.sectionQuoteDetail span")[1].text.strip
    currency = info.search("div.sectionQuote.nasdaqChange div.sectionQuoteDetail span")[2].text.strip
    @stock.current_price = "#{price}#{currency}"
    @stock.previous_close = info.search("div.sectionQuote div.sectionQuoteDetailTop span")[1].text.strip
    @stock.open_price = info.search("div.sectionQuote")[2].search("div.sectionQuoteDetail").search("span")[1].text.strip
    high = info.search("div.sectionQuote")[5].search("div.sectionQuoteDetailTop").search("span.sectionQuoteDetailHigh").text.strip
    low = info.search("div.sectionQuote")[5].search("div.sectionQuoteDetail").search("span.sectionQuoteDetailLow").text.strip
    @stock.range = "#{low} - #{high}"
  end
end