package SeriesMailer::App; use Dancer ':syntax'; use WWW::Mechanize; use MIME::Base64; use Digest::SHA1 qw(sha1 sha1_hex sha1_base64); our $VERSION = '0.1'; get '/list' => sub { my $today = "TODAY"; forward '/list/' . $today; }; get '/list/:date' => sub { forward '/list/' . params->{date} . '/7'; }; get '/list/:date/:days' => sub { my $browser = WWW::Mechanize->new(); $browser->default_header( Authorization => 'Basic ' . encode_base64( setting("user") . ':' . setting("password") ) ); my $list_url = "http://api.trakt.tv/user/calendar/shows.json/" .setting("api_key"). "/" .setting("user"). "/"; if (params->{date} =~ m/^\d+$/) { $list_url = $list_url . params->{date} . '/' . params->{days}; } eval { $browser->get($list_url); } or do { return "Error while getting server answer"; }; my $json_content = from_json($browser->content()); my $user_text; foreach my $date (@{$json_content}) { foreach my $episode (@{$date->{episodes}}) { $user_text .= $date->{date} . ": " . $episode->{show}->{title} . "\n"; my $ep_title = sprintf "%02d",$episode->{episode}->{season}; $ep_title .= "x" . sprintf "%02d",$episode->{episode}->{number}; $ep_title .= " - " . $episode->{episode}->{title}; $user_text .= " " . $ep_title . "\n"; $user_text .= " " . $episode->{episode}->{overview} . "\n"; my $validation_url = uri_for('/seen') . "/"; $validation_url .= $episode->{show}->{tvdb_id} . "/"; $validation_url .= $episode->{episode}->{season} . "/"; $validation_url .= $episode->{episode}->{number} . "/"; my $validation_token = setting("user"); $validation_token .= $episode->{show}->{tvdb_id}; $validation_token .= $episode->{episode}->{season}; $validation_token .= $episode->{episode}->{number}; $validation_url .= sha1_hex($validation_token); $user_text .= " " . $validation_url . "\n"; $user_text .= "\n"; } } return $user_text; }; get '/seen/:serie_id/:season/:episode/:secret' => sub { my $validation_token = setting("user"); $validation_token .= params->{serie_id}; $validation_token .= params->{season}; $validation_token .= params->{episode}; if ( sha1_hex($validation_token) ne params->{secret} ) { debug "Validation should be " . sha1_hex($validation_token) . " but is " . params->{secret}; send_error("Not allowed", 403); } my $browser = WWW::Mechanize->new(); my %test_ei = ("season" => params->{season}, "episode" => params->{episode}); my @test_ep = (\%test_ei); my %test_a = ( "username" => setting("user"), "password" => sha1_hex(setting("password")), "tvdb_id" => params->{serie_id}, "episodes" => (\@test_ep) ); my $json_encode = to_json(\%test_a); debug "Seen JSON sent is: " . $json_encode; my $seen_url = "http://api.trakt.tv/show/episode/seen/" . setting("api_key"); my $req = HTTP::Request->new(POST => $seen_url); $req->content_type('application/json'); $req->content($json_encode); $browser->request($req); my $req_answer = from_json($browser->content()); debug to_json($req_answer); return $req_answer->{message}; }; true;