|
module Agents
class StubhubAgent < Agent
cannot_receive_events!
description <<-MD
The StubHub Agent creates an event for a given StubHub Event.
It can be used to track how many tickets are available for the event and the minimum and maximum price. All that is required is that you paste in the url from the actual event, e.g. http://www.stubhub.com/outside-lands-music-festival-tickets/outside-lands-music-festival-3-day-pass-san-francisco-golden-gate-park-polo-fields-8-8-2014-9020701/
MD
event_description <<-MD
Events looks like this:
{
"url": "http://stubhub.com/valid-event-url"
"name": "Event Name"
"date": "2014-08-01"
"max_price": "999.99"
"min_price": "100.99"
"total_postings": "50"
"total_tickets": "150"
"venue_name": "Venue Name"
}
MD
default_schedule "every_1d"
def working?
event_created_within?(1) && !recent_error_logs?
end
def default_options
{ 'url' => 'http://stubhub.com/enter-your-event-here' }
end
def validate_options
errors.add(:base, 'url is required') unless options['url'].present?
end
def url
interpolated['url']
end
def check
create_event :payload => fetch_stubhub_data(url)
end
def fetch_stubhub_data(url)
StubhubFetcher.call(url)
end
class StubhubFetcher
def self.call(url)
new(url).fields
end
def initialize(url)
@url = url
end
def event_id
/(\d*)\/{0,1}\z/.match(url)[1]
end
def base_url
'http://www.stubhub.com/listingCatalog/select/?q='
end
def build_url
base_url + "%2B+stubhubDocumentType%3Aevent%0D%0A%2B+event_id%3A#{event_id}%0D%0A&start=0&rows=10&wt=json"
end
def response
uri = URI(build_url)
Net::HTTP.get(uri)
end
def parse_response
JSON.parse(response)
end
def fields
stubhub_fields = parse_response['response']['docs'][0]
{
'url' => url,
'name' => stubhub_fields['seo_description_en_US'],
'date' => stubhub_fields['event_date_local'],
'max_price' => stubhub_fields['maxPrice'].to_s,
'min_price' => stubhub_fields['minPrice'].to_s,
'total_postings' => stubhub_fields['totalPostings'].to_s,
'total_tickets' => stubhub_fields['totalTickets'].to_i.to_s,
'venue_name' => stubhub_fields['venue_name']
}
end
private
attr_reader :url
end
end
end
|