Class: MuseumDay::Scraper

Inherits:
Object
  • Object
show all
Defined in:
lib/museum_day/scraper.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(zipcode) ⇒ Scraper

Returns a new instance of Scraper.



6
7
8
# File 'lib/museum_day/scraper.rb', line 6

def initialize(zipcode)
  @zipcode = zipcode
end

Instance Attribute Details

#zipcodeObject

Returns the value of attribute zipcode.



4
5
6
# File 'lib/museum_day/scraper.rb', line 4

def zipcode
  @zipcode
end

Instance Method Details

#get_museums_pageObject



10
11
12
# File 'lib/museum_day/scraper.rb', line 10

def get_museums_page
  Nokogiri::HTML(open("https://www.smithsonianmag.com/museumday/search/?q=&around_zip=#{zipcode}"))
end

#make_museumsObject



18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/museum_day/scraper.rb', line 18

def make_museums
  scrape_museums_index.each do |museum|

    attribute_hash = {
      name: museum.css("h4.name").text,
      city: museum.css("h5.location").text,
      url: museum.css("a").attribute("href").value,
      hours: museum.css("div").last.text.strip
    }
    MuseumDay::Museum.new(attribute_hash)
  end
end

#scrape_details(museum) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/museum_day/scraper.rb', line 31

def scrape_details(museum)
  doc = Nokogiri::HTML(open("https://www.smithsonianmag.com#{museum.url}"))
  museum.description = doc.css("div.aux-info p").first.text
  museum.address = doc.css("p.address").text.strip
  museum.website_url = doc.css("i.fa-external-link + a").attribute("href").value
  museum.phone_number = doc.at("i.fa-phone").next_sibling.text.strip

  #Scrape Socials
  doc.css("div.contact a").collect { |link| link.attribute("href").value }.each do |link|
    if link.include?("twitter")
      museum.twitter = link
    elsif link.include?("facebook")
      museum.fb = link
    end
  end
end

#scrape_museums_indexObject



14
15
16
# File 'lib/museum_day/scraper.rb', line 14

def scrape_museums_index
  self.get_museums_page.css("div.museum div.museum-text")
end