#!/usr/bin/perl use warnings; use strict; use JSON::Parse; use LWP::UserAgent; use CGI; use Data::Dumper; my $query = new CGI; print CGI::header(-charset=>'utf-8'); print CGI::start_html(-title => "XKCD Explorer"); print "

XKCD Explorer

\n"; my $width = $query->url_param('width') || 1024; my $height = $query->url_param('height') || 117; my $referer = $query->url_param('referer') || 'http://xkcd.com/'; my $underscore = $query->url_param('underscore') || 13; my $user_agent = $query->url_param('user-agent') || 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9'; if($query->url_param('submit')) { # http://umwelt.xkcd.com/story/ghenkEggov8?callback=waldoCallback&w=1042&h=117&r=&_=13 # Fetch the JSON from xkcd. my $ua = LWP::UserAgent->new(); $ua->agent($user_agent); my $url = "http://umwelt.xkcd.com/story/ghenkEggov8?callback=waldoCallback&w=${width}&h=${height}&r=${referer}&_=${underscore}"; my $request = HTTP::Request->new(GET => $url); $request->header( 'Referer' => 'http://imgs.xkcd.com/static/waldo.js'); my $response = $ua->request($request); my $content = $response->decoded_content() if($response->is_success()); print "
$url
\n"; print "
$content
\n"; $content =~ s/^waldoCallback\(//; $content =~ s/\)$//; my $json = JSON::Parse::json_to_perl($content); print "


"; print "
\n";
	print Dumper($json);
	print "\n";
	print "
\n"; # Emit a comic foreach my $panel (@{$json->{panels}}) { my $image_url = $panel->{images}->[0]->{url}; print "\n"; } } print "


\n"; # Emit the form print "
\n"; print "Width:
\n"; print "Height:
\n"; print "Referer:
\n"; print "Underscore:
\n"; print "User-Agent:
\n"; print "
\n"; print "
\n"; print CGI::end_html(); # Draw the form