#!/usr/bin/perl -w use WWW::Mechanize; use URI::Escape; use CGI; use XML::RSS; use JSON; use strict; my $cgi = new CGI; print $cgi->header("text/xml"); $cgi->param("v") =~ /(\d+)/; my $venue = $1; $cgi->param("url") =~ /venue\/(\d+)/; $venue ||= $1; if (!$venue) { print qq{ tm2rss.cgi needs a venue ID

tm2rss.cgi needs a venue ID. Please supply one:

Venue ID (e.g. 198641):

or Venue Page at Ticketmaster (e.g. http://www.ticketmaster.ie/venue/198641):

}; exit; } my $mech = WWW::Mechanize->new( autocheck => 1 ); my $sitename = "Ticketmaster: venue ID $venue"; my $starturl = "http://www.ticketmaster.ie/venue/$venue"; my $rssfile = new XML::RSS (version => '1.0'); $rssfile->channel( title => $sitename, link => $starturl, description => qq{ Ticketmaster: venue ID $venue (This feed scraped into RSS by tm2rss.cgi) }, ); main(); exit; sub set_venue { my ($venue, $venuedetails) = @_; $sitename = "Ticketmaster: $venue"; # recreate with a better title $rssfile = new XML::RSS (version => '1.0'); $rssfile->channel( title => $sitename, link => $starturl, description => qq{ Ticketmaster: $venue, $venuedetails (This feed scraped into RSS by tm2rss.cgi) }, ); } sub main { do_search(); $rssfile->{output} = '1.0'; print $rssfile->as_string; exit; } sub do_search { my $jsonurl = "http://www.ticketmaster.ie/json/search/event?vid=$venue"; warn "get: $jsonurl\n"; $mech->get($jsonurl); my $pageurl = $starturl; my $max = 50; my $page = $mech->content(); my $json = from_json($page, {utf8=> 1}); # use Data::Dumper; print Dumper($json);exit; if (defined $json->{response}->{docs}->[0]) { my $first = $json->{response}->{docs}->[0]; my $venue = $first->{VenueName}; my $venuedetails = "$first->{VenueCity}, $first->{VenueCityState}, $first->{VenueCountry}"; set_venue($venue, $venuedetails); } else { set_venue('unknown', 'no events found for venue '.$venue); } foreach my $doc (@{$json->{response}->{docs}}) { my $datetime = $doc->{LocalEventDateDisplay}; my $link = "/event/".$doc->{Id}; my $who = $doc->{EventName}; my $details = ''; $datetime =~ s/
/ /gs; $datetime =~ s/<\/?span[^>]*>//gs; $link = URI->new_abs($link, $mech->uri())->as_string(); $details =~ s{([a-z])}{ - $1}g; my $div = qq{

$datetime - $who

$details

Venue information

}; my $title = qq{ $datetime - $who }; $rssfile->add_item ( title => $title, link => $link, description => qq{ $div

(The above info was found on this page. See that site for more info on this content's copyright and authorship.)

} ); last if ($max-- <= 0); } }