class Scraper

Constants

KEY

Public Class Methods

get_line_destinations(station_code) click to toggle source
# File lib/gobart/scraper.rb, line 14
def self.get_line_destinations(station_code) #gets the real time updates
  doc = Scraper.scrape_api(station_code)
  doc.css("station etd").css("abbreviation").collect {|x| x.text}
end
get_station_info(station_code) click to toggle source
# File lib/gobart/scraper.rb, line 38
def self.get_station_info(station_code) #get station info as provided by BART
  stnt_info_api = "http://api.bart.gov/api/stn.aspx?cmd=stnaccess&orig=#{station_code}&l=1&key=#{KEY}"
  doc = Nokogiri::HTML(open(stnt_info_api))
  output = doc.css("//stations").text
  output
end
get_train_status(station_code) click to toggle source
# File lib/gobart/scraper.rb, line 19
def self.get_train_status(station_code) #gets real time departure times
  doc = Scraper.scrape_api(station_code)
  output = doc.css('station etd').map do |etd|
    {
      destination: etd.css('destination').text,
      abbreviation: etd.css('abbreviation').text,
      arrivals: reformat(etd.css('estimate').map { |e| e.css('minutes').text.to_i }),
      cars: (etd.css('estimate').map { |e| e.css('length').text.to_i })
    }
  end
  output
end
reformat(eta) click to toggle source
# File lib/gobart/scraper.rb, line 32
def self.reformat(eta) #reformats the minutes data to show 'now' when it is 0
   eta.map do |time|
     time == 0 ? 'now' : "#{time}"
   end
end
scrape_advisory(station_code) click to toggle source
# File lib/gobart/scraper.rb, line 45
def self.scrape_advisory(station_code) #gets system advisories
  adv_api = "http://api.bart.gov/api/bsa.aspx?cmd=bsa&orig=#{station_code}&key=#{KEY}"
  doc = Nokogiri::XML(open(adv_api))
  advisories = doc.search('description').children.find{|e| e.cdata?}.text
end
scrape_api(station_code) click to toggle source
# File lib/gobart/scraper.rb, line 9
def self.scrape_api(station_code) #used by self.get_line_destinations & self.get_train_status
  edt_api = "http://api.bart.gov/api/etd.aspx?cmd=etd&orig=#{station_code}&key=#{KEY}"
  doc = Nokogiri::HTML(open(edt_api))
end
scrape_train_count() click to toggle source
# File lib/gobart/scraper.rb, line 51
def self.scrape_train_count #gets the current count of the trains currently running in the system
  tc_api = "http://api.bart.gov/api/bsa.aspx?cmd=count&key=#{KEY}"
  doc = Nokogiri::HTML(open(tc_api))
  count = doc.css("traincount").text
end