Sha256: 18de9bd94e3d1cfebfcc4fd2e6db3cb549155543d8e9d9d61646530412a32098
Contents?: true
Size: 1.93 KB
Versions: 2
Compression:
Stored size: 1.93 KB
Contents
module Calagator class Source::Parser::Meetup < Source::Parser self.label = :Meetup self.url_pattern = %r{^http://(?:www\.)?meetup\.com/[^/]+/events/([^/]+)/?} def to_events return fallback unless Calagator.meetup_api_key.present? return unless data = get_data event = Event.new({ source: opts[:source], title: data['name'], description: data['description'], url: data['event_url'], venue: to_venue(data['venue']), tag_list: "meetup:event=#{data['event_id']}, meetup:group=#{data['group']['urlname']}", # Meetup sends us milliseconds since the epoch in UTC start_time: Time.at(data['time']/1000).utc, }) [event_or_duplicate(event)] end private def fallback to_events_wrapper( Source::Parser::Ical, %r{^http://(?:www\.)?meetup\.com/([^/]+)/events/([^/]+)/?}, lambda { |matcher| "http://www.meetup.com/#{matcher[1]}/events/#{matcher[2]}/ical" } ) end def get_data to_events_api_helper(opts[:url], "problem") do |event_id| [ "https://api.meetup.com/2/event/#{event_id}", { key: Calagator.meetup_api_key, sign: 'true' } ] end end def to_venue(value) return if value.blank? venue = Venue.new({ source: opts[:source], title: value['name'], street_address: [value['address_1'], value['address_2'], value['address_3']].compact.join(", "), locality: value['city'], region: value['state'], postal_code: value['zip'], country: value['country'], telephone: value['phone'], tag_list: "meetup:venue=#{value['id']}", }) venue.geocode! venue_or_duplicate(venue) end def to_events_wrapper(driver, source, target) if matcher = opts[:url].try(:match, source) url = target.call(matcher) opts[:content] = self.class.read_url(url) driver.new(opts).to_events end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
calagator-1.0.0.rc2 | app/models/calagator/source/parser/meetup.rb |
calagator-1.0.0.rc1 | app/models/calagator/source/parser/meetup.rb |