Add IMDB support
authorMarius Gavrilescu <marius@ieval.ro>
Sat, 11 Apr 2015 09:40:18 +0000 (12:40 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Sat, 11 Apr 2015 09:40:18 +0000 (12:40 +0300)
lib/WebService/Strike.pm
lib/WebService/Strike/Torrent.pm
t/WebService-Strike.t

index 74a8c2b30ab05bc82315d92c245944b0bcce6614..001972de9a8c71542ab90c48b40b81860703d34d 100644 (file)
@@ -5,10 +5,10 @@ use strict;
 use warnings;
 use parent qw/Exporter/;
 
 use warnings;
 use parent qw/Exporter/;
 
-our @EXPORT    = qw/strike strike_search/; ## no critic (ProhibitAutomaticExportation)
-our @EXPORT_OK = qw/strike_query strike strike_search/;
+our @EXPORT    = qw/strike strike_search strike_imdb/; ## no critic (ProhibitAutomaticExportation)
+our @EXPORT_OK = (@EXPORT, 'strike_query');
 our $VERSION = '0.003';
 our $VERSION = '0.003';
-our $BASE_URL = 'https://getstrike.net/api/v2/torrents';
+our $BASE_URL = 'https://getstrike.net/api/v2';
 
 use JSON::MaybeXS qw/decode_json/;
 use HTTP::Tiny;
 
 use JSON::MaybeXS qw/decode_json/;
 use HTTP::Tiny;
@@ -33,7 +33,7 @@ sub strike_query {
        if (@hashes > 50) {
                return strike_query (@hashes[0 .. 49]), strike_query (@hashes[50 .. $#hashes]);
        }
        if (@hashes > 50) {
                return strike_query (@hashes[0 .. 49]), strike_query (@hashes[50 .. $#hashes]);
        }
-       my $url = "$BASE_URL/info/?hashes=" . join ',', map { uc } @hashes;
+       my $url = "$BASE_URL/torrents/info/?hashes=" . join ',', map { uc } @hashes;
 
        my $sorter = sbe(\@hashes, {xform => sub { $_[0]->hash }});
        my @torrents = $sorter->(_query $url);
 
        my $sorter = sbe(\@hashes, {xform => sub { $_[0]->hash }});
        my @torrents = $sorter->(_query $url);
@@ -43,7 +43,7 @@ sub strike_query {
 sub strike_search {
        my ($query, $full, %args) = @_;
        $args{phrase} = $query;
 sub strike_search {
        my ($query, $full, %args) = @_;
        $args{phrase} = $query;
-       my $url = "$BASE_URL/search/?" . HTTP::Tiny->www_form_urlencode(\%args);
+       my $url = "$BASE_URL/torrents/search/?" . HTTP::Tiny->www_form_urlencode(\%args);
 
        my @torrents = _query $url;
        @torrents = $torrents[0] unless wantarray;
 
        my @torrents = _query $url;
        @torrents = $torrents[0] unless wantarray;
@@ -51,6 +51,14 @@ sub strike_search {
        wantarray ? @torrents : $torrents[0]
 }
 
        wantarray ? @torrents : $torrents[0]
 }
 
+sub strike_imdb {
+       my ($id) = @_;
+       my $url = "$BASE_URL/media/imdb/?imdbid=$id";
+       my $response = _ht->get($url);
+       return unless $response->{success};
+       decode_json $response->{content}
+}
+
 BEGIN { *strike = \&strike_query }
 
 1;
 BEGIN { *strike = \&strike_query }
 
 1;
@@ -79,6 +87,10 @@ WebService::Strike - Get torrent info from getstrike.net API
   say 'Torrent has ' . $mp->count . ' files. They are:';
   say join ' ', @{$mp->file_names};
 
   say 'Torrent has ' . $mp->count . ' files. They are:';
   say join ' ', @{$mp->file_names};
 
+  my $info = strike_imdb 'tt1520211';
+  say 'IMDB ID ', $info->{imdbID}, ' is ', $info->{title}, ' (', $info->{year}, ')';
+  say 'Plot (short): ', $info->{shortPlot};
+
 =head1 DESCRIPTION
 
 Strike API is a service for getting information about a torrent given
 =head1 DESCRIPTION
 
 Strike API is a service for getting information about a torrent given
@@ -114,6 +126,11 @@ For example:
 
   strike_search 'windows', 0, category => 'Applications', sub_category => 'Windows';
 
 
   strike_search 'windows', 0, category => 'Applications', sub_category => 'Windows';
 
+=item B<strike_imdb>(I<$imdb_id>)
+
+Get informaton about a movie from IMDB. Takes an IMDB ID and returns a
+hashef of unspecified format.
+
 =back
 
 =head1 SEE ALSO
 =back
 
 =head1 SEE ALSO
index 517020850a82aa33b2d098ddf4466573ac2ae7e4..655efed730701574145e57263c6c870bc32f2156 100644 (file)
@@ -12,7 +12,7 @@ use JSON::MaybeXS qw/decode_json/;
 use MIME::Base64;
 use WebService::Strike;
 
 use MIME::Base64;
 use WebService::Strike;
 
-__PACKAGE__->mk_ro_accessors(qw/torrent_hash torrent_title torrent_category sub_category seeds leeches file_count size upload_date uploader_username file_info file_names file_lengths magnet_uri/);
+__PACKAGE__->mk_ro_accessors(qw/torrent_hash torrent_title torrent_category sub_category seeds leeches file_count size upload_date uploader_username file_info file_names file_lengths magnet_uri imdb_id/);
 
 BEGIN {
        *hash     = *torrent_hash;
 
 BEGIN {
        *hash     = *torrent_hash;
@@ -40,7 +40,7 @@ sub new{
 
 sub torrent{
        my ($self, $file) = @_;
 
 sub torrent{
        my ($self, $file) = @_;
-       my $url = $WebService::Strike::BASE_URL . '/download/?hash=' . $self->hash;
+       my $url = $WebService::Strike::BASE_URL . '/torrents/download/?hash=' . $self->hash;
        my $ht = WebService::Strike::_ht(); ## no critic (ProtectPrivate)
        my $response = $ht->get($url);
        return unless $response->{success};
        my $ht = WebService::Strike::_ht(); ## no critic (ProtectPrivate)
        my $response = $ht->get($url);
        return unless $response->{success};
@@ -59,13 +59,19 @@ sub torrent{
 sub description{
        my ($self) = @_;
        return $self->{description} if $self->{description};
 sub description{
        my ($self) = @_;
        return $self->{description} if $self->{description};
-       my $url = $WebService::Strike::BASE_URL . '/descriptions/?hash=' . $self->hash;
+       my $url = $WebService::Strike::BASE_URL . '/torrents/descriptions/?hash=' . $self->hash;
        my $ht = WebService::Strike::_ht(); ## no critic (ProtectPrivate)
        my $response = $ht->get($url);
        return unless $response->{success};
        $self->{description} = decode_base64 $response->{content}
 }
 
        my $ht = WebService::Strike::_ht(); ## no critic (ProtectPrivate)
        my $response = $ht->get($url);
        return unless $response->{success};
        $self->{description} = decode_base64 $response->{content}
 }
 
+sub imdb {
+       my ($self) = @_;
+       return unless $self->imdb_id;
+       $self->{imdb} //= WebService::Strike::strike_imdb ($self->imdb_id)
+}
+
 1;
 __END__
 
 1;
 __END__
 
@@ -96,6 +102,13 @@ WebService::Strike::Torrent - Class representing information about a torrent
   $t->torrent('x.torrent'); # Download torrent file to x.torrent
   say $t->description;      # <HTML fragment describing Arch Linux>
 
   $t->torrent('x.torrent'); # Download torrent file to x.torrent
   say $t->description;      # <HTML fragment describing Arch Linux>
 
+  $t = strike 'ED70C185E3E3246F30B2FDB08D504EABED5EEA3F';
+  say $t->title;                          # The Walking Dead S04E15 HDTV x264-2HD
+  say $t->imdb_id;                        # tt1520211
+  my $i = $t->imdb;
+  say $i->{title}, ' (', $i->{year}, ')'; # The Walking Dead (2010)
+  say $i->{genre};                        # Drama, Horror, Thriller
+
 =head1 DESCRIPTION
 
 WebService::Strike::Torrent is a class that represents information
 =head1 DESCRIPTION
 
 WebService::Strike::Torrent is a class that represents information
@@ -170,6 +183,16 @@ Both forms return a true value for success and false for failure.
 The description of the torrent. This method sends an extra request to
 Strike. Successful responses are cached.
 
 The description of the torrent. This method sends an extra request to
 Strike. Successful responses are cached.
 
+=item B<imdb_id>
+
+The IMDB ID of the torrent, or undef if the torrent has no associated
+IMDB ID.
+
+=item B<imdb>
+
+Calls B<strike_imdb> from L<WebService::Strike> on B<imdb_id>. Caches
+the response. Returns undef if the torrent has no associated IMDB ID.
+
 =back
 
 =head1 SEE ALSO
 =back
 
 =head1 SEE ALSO
index 7b7a98441de49a091433b2965d8cea71ef9a5e83..853a98fac898b0e04f31956b230097b38b549ad6 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 
 use Data::Dumper qw/Dumper/;
 use Test::RequiresInternet qw/getstrike.net 443/;
 
 use Data::Dumper qw/Dumper/;
 use Test::RequiresInternet qw/getstrike.net 443/;
-use Test::More tests => 10;
+use Test::More tests => 11;
 use Try::Tiny;
 BEGIN { use_ok('WebService::Strike') };
 
 use Try::Tiny;
 BEGIN { use_ok('WebService::Strike') };
 
@@ -43,3 +43,6 @@ try {
 
 my $p = strike_search 'Perl', 1;
 is @{$p->file_names}, $p->count, 'file_names has count elements';
 
 my $p = strike_search 'Perl', 1;
 is @{$p->file_names}, $p->count, 'file_names has count elements';
+
+my $imdb = strike('ED70C185E3E3246F30B2FDB08D504EABED5EEA3F')->imdb;
+is $imdb->{title}, 'The Walking Dead', 'imdb title';
This page took 0.014755 seconds and 4 git commands to generate.