]> iEval git - webservice-strike.git/blobdiff - lib/WebService/Strike/Torrent.pm
Bump version and update Changes
[webservice-strike.git] / lib / WebService / Strike / Torrent.pm
index b8520005327fb96263ed8070fa12d0a7bf020fd5..0ac15da98ab7571ed27bde46d2dc4e29664ad8f7 100644 (file)
@@ -5,14 +5,14 @@ use strict;
 use warnings;
 use parent qw/Class::Accessor::Fast/;
 
-our $VERSION = '0.001002';
+our $VERSION = '0.004002';
 
 use Date::Parse qw/str2time/;
 use JSON::MaybeXS qw/decode_json/;
-use URI::Escape qw/uri_escape/;
+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/);
+__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;
@@ -23,6 +23,7 @@ BEGIN {
        *uploader = *uploader_username;
        *names    = *file_names;
        *lengths  = *file_lengths;
+       *magnet   = *magnet_uri;
 };
 
 sub new{
@@ -30,19 +31,17 @@ sub new{
        $self = $self->SUPER::new(@args);
        $self->{torrent_hash} = uc $self->hash;
        $self->{upload_date} = str2time $self->date, 'UTC';
-       $self->{file_names} = $self->file_info->[0]->{file_names};
-       $self->{file_lengths} = $self->file_info->[0]->{file_lengths};
+       if ($self->file_info) {
+               $self->{file_names} = $self->file_info->{file_names};
+               $self->{file_lengths} = $self->file_info->{file_lengths};
+       }
+       $self->{imdb_id} = $self->{imdbid} if $self->{imdbid};
        $self
 }
 
-sub magnet{
-       my ($self) = @_;
-       'magnet:?xt=urn:btih:' . $self->hash . '&dn=' . uri_escape $self->title
-}
-
 sub torrent{
        my ($self, $file) = @_;
-       my $url = $WebService::Strike::BASE_URL . '/downloads/?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};
@@ -58,6 +57,22 @@ sub torrent{
        }
 }
 
+sub description{
+       my ($self) = @_;
+       return $self->{description} if $self->{description};
+       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__
 
@@ -78,7 +93,7 @@ WebService::Strike::Torrent - Class representing information about a torrent
   say $t->seeds;
   say $t->leeches;
   say $t->count;            # 1
-  say $t->size;             # 587 MB
+  say $t->size;             # 615514112
   say $t->date;             # 1420502400
   say $t->uploader;         # The_Doctor-
   say @{$t->names};         # archlinux-2015.01.01-dual.iso
@@ -86,6 +101,14 @@ WebService::Strike::Torrent - Class representing information about a torrent
   say $t->magnet;           # magnet:?xt=urn:btih:B425907E5755031BDA4A8D1B6DCCACA97DA14C04&dn=Arch%20Linux%202015.01.01%20%28x86%2Fx64%29
   my $tor = $t->torrent;    # $torrent contains the torrent file contents
   $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
 
@@ -126,8 +149,7 @@ The number of files contained in the torrent.
 
 =item B<size>
 
-The total size of the files in the torrent as a human-readable string.
-See B<file_lengths> for exact sizes.
+The total size of the files in the torrent in bytes.
 
 =item B<date>, B<upload_date>
 
@@ -145,7 +167,7 @@ Arrayref of paths of files in the torrent.
 
 Arrayref of lengths of files in the torrent, in bytes.
 
-=item B<magnet>
+=item B<magnet>, B<magnet_uri>
 
 Magnet link for the torrent.
 
@@ -157,11 +179,26 @@ I<$filename>.
 
 Both forms return a true value for success and false for failure.
 
+=item B<description>
+
+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
 
-L<WebService::Strike>, L<http://getstrike.net/api/>
+L<WebService::Strike>, L<https://getstrike.net/api/>
 
 =head1 AUTHOR
 
This page took 0.028959 seconds and 4 git commands to generate.