Class: MeetupScraper::Scraper

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

Overview

Class Method Summary collapse

Class Method Details

.fetch_event_details(url) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/meetup_scraper/scraper.rb', line 31

def self.fetch_event_details(url)
  doc = Nokogiri::HTML(open(url))
  items = doc.css('#event-content')
  event = {}
  items.each do |item|
    event[:date] = item.css('#event-when-display h3').text
    event_start_time = item.css('#event-start-time span').text
    event_end_time = item.css('#event-end-time span').text
    if (event_end_time != nil && event_end_time != '') && (event_start_time != nil && event_start_time != '')
      event[:time] = "#{event_start_time} to #{event_end_time}"
    else
      time = item.css('#event-when-display p').text
      event[:time] = time if time != '' || time != nil
    end
    address = item.css('#event-where-display .event-where-address').text.gsub(/\(map\)/, '').strip
    address = 'Signup to view address' if address == nil || address == ''
    event[:address] = address
    description_text = ''
    paragraphs = item.css('#event-description-wrap p')
    paragraphs.each {|p| description_text += p.text.gsub(/â\u0080¢/, '') + "\n"}
    event[:description] = description_text.strip
  end
  event
end

.fetch_meetup_list(url) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/meetup_scraper/scraper.rb', line 7

def self.fetch_meetup_list(url)
  doc = Nokogiri::HTML(open(url))
  items = doc.css('.searchResults .event-listing-container .event-listing')

  items.collect do |item|
    event = {}
    title = item.css('.chunk a.event span').inner_text
    if title != ''
      event[:title] = title
      event[:organiser] = item.css('.chunk .text--labelSecondary a span').inner_text
      event[:url] = item.css('a').first.attr('href')
      num_attending = item.css('.text--secondary .attendee-count').inner_text
      event[:num_attending] = num_attending.strip.slice(0, 4).gsub(/[^\d]/, '')
    end
    time = item.css('.text--secondary time').text
    if time != ''
      event[:time] = time
      event[:date] = item.css('time').attr('datetime').value
    end
    # event[:location] = item.css('.row-item')[1].css('.text--secondary a').text.strip
    event
  end
end