110 lines
3.5 KiB
Perl
110 lines
3.5 KiB
Perl
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;
|