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/;
 
-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 $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;
@@ -33,7 +33,7 @@ sub strike_query {
        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);
@@ -43,7 +43,7 @@ sub strike_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;
@@ -51,6 +51,14 @@ sub strike_search {
        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;
@@ -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};
 
+  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
@@ -114,6 +126,11 @@ For example:
 
   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
index 517020850a82aa33b2d098ddf4466573ac2ae7e4..655efed730701574145e57263c6c870bc32f2156 100644 (file)
@@ -12,7 +12,7 @@ use JSON::MaybeXS qw/decode_json/;
 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;
@@ -40,7 +40,7 @@ sub new{
 
 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};
@@ -59,13 +59,19 @@ sub torrent{
 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}
 }
 
+sub imdb {
+       my ($self) = @_;
+       return unless $self->imdb_id;
+       $self->{imdb} //= WebService::Strike::strike_imdb ($self->imdb_id)
+}
+
 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 = 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
@@ -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.
 
+=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
index 7b7a98441de49a091433b2965d8cea71ef9a5e83..853a98fac898b0e04f31956b230097b38b549ad6 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 
 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') };
 
@@ -43,3 +43,6 @@ try {
 
 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.015316 seconds and 4 git commands to generate.