Bump version and update Changes
[webservice-strike.git] / lib / WebService / Strike / Torrent.pm
1 package WebService::Strike::Torrent;
2
3 use 5.014000;
4 use strict;
5 use warnings;
6 use parent qw/Class::Accessor::Fast/;
7
8 our $VERSION = 0.006;
9
10 use JSON::MaybeXS qw/decode_json/;
11 use MIME::Base64;
12 use URI::Escape;
13 use WebService::Strike;
14
15 __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 imdb_id/);
16
17 BEGIN {
18 *hash = *torrent_hash;
19 *title = *torrent_title;
20 *category = *torrent_category;
21 *count = *file_count;
22 *date = *upload_date;
23 *uploader = *uploader_username;
24 *names = *file_names;
25 *lengths = *file_lengths;
26 };
27
28 sub magnet{
29 my ($self) = @_;
30 my $hash = uri_escape $self->hash; # uri_escape is not exactly needed here
31 my $title = uri_escape $self->title;
32 "magnet:?xt=urn:btih:$hash&dn=$title"
33 }
34
35 sub new{
36 my ($self, @args) = @_;
37 $self = $self->SUPER::new(@args);
38 $self->{torrent_hash} = uc $self->hash;
39 if ($self->file_info) {
40 $self->{file_names} = $self->file_info->{file_names};
41 $self->{file_lengths} = $self->file_info->{file_lengths};
42 }
43 $self->{imdb_id} = $self->{imdbid} if $self->{imdbid};
44 $self
45 }
46
47 sub torrent{
48 die "This API call was removed in Strike API V2.1\n"
49 }
50
51 sub description{
52 my ($self) = @_;
53 return $self->{description} if $self->{description};
54 my $url = $WebService::Strike::BASE_URL . '/torrents/descriptions/?hash=' . $self->hash;
55 my $ht = WebService::Strike::_ht(); ## no critic (ProtectPrivate)
56 my $response = $ht->get($url);
57 return unless $response->{success};
58 $self->{description} = decode_base64 $response->{content}
59 }
60
61 sub imdb {
62 my ($self) = @_;
63 return if !$self->imdb_id || $self->imdb_id eq 'none';
64 $self->{imdb} //= WebService::Strike::strike_imdb ($self->imdb_id)
65 }
66
67 1;
68 __END__
69
70 =encoding utf-8
71
72 =head1 NAME
73
74 WebService::Strike::Torrent - [OBSOLETE] Class representing information about a torrent
75
76 =head1 SYNOPSIS
77
78 use WebService::Strike;
79 my $t = strike 'B425907E5755031BDA4A8D1B6DCCACA97DA14C04';
80 say $t->hash; # B425907E5755031BDA4A8D1B6DCCACA97DA14C04
81 say $t->title; # Arch Linux 2015.01.01 (x86/x64)
82 say $t->category; # Applications
83 say $t->sub_category; # '' (empty string)
84 say $t->seeds;
85 say $t->leeches;
86 say $t->count; # 1
87 say $t->size; # 615514112
88 say $t->date; # 1420502400
89 say $t->uploader; # The_Doctor-
90 say @{$t->names}; # archlinux-2015.01.01-dual.iso
91 say @{$t->lengths}; # 615514112
92 say $t->magnet; # magnet:?xt=urn:btih:B425907E5755031BDA4A8D1B6DCCACA97DA14C04&dn=Arch%20Linux%202015.01.01%20%28x86%2Fx64%29
93 say $t->description; # <HTML fragment describing Arch Linux>
94
95 $t = strike 'ED70C185E3E3246F30B2FDB08D504EABED5EEA3F';
96 say $t->title; # The Walking Dead S04E15 HDTV x264-2HD
97 say $t->imdb_id; # tt1520211
98 my $i = $t->imdb;
99 say $i->{title}, ' (', $i->{year}, ')'; # The Walking Dead (2010)
100 say $i->{genre}; # Drama, Horror, Thriller
101
102 =head1 DESCRIPTION
103
104 B<The API was discontinued. The code in this module remains, but it
105 does not achieve any useful purpose.>
106
107 WebService::Strike::Torrent is a class that represents information
108 about a torrent.
109
110 Methods:
111
112 =over
113
114 =item B<hash>, B<torrent_hash>
115
116 The info_hash of the torrent.
117
118 =item B<title>, B<torrent_title>
119
120 The title of the torrent.
121
122 =item B<category>, B<torrent_category>
123
124 The category of the torrent.
125
126 =item B<sub_category>
127
128 The subcategory of the torrent.
129
130 =item B<seeds>
131
132 The number of seeders.
133
134 =item B<leeches>
135
136 The number of leechers.
137
138 =item B<count>, B<file_count>
139
140 The number of files contained in the torrent.
141
142 =item B<size>
143
144 The total size of the files in the torrent in bytes.
145
146 =item B<date>, B<upload_date>
147
148 Unix timestamp when the torrent was uploaded, with precision of one day.
149
150 =item B<uploader>, B<uploader_username>
151
152 Username of the user who uploaded the torrent.
153
154 =item B<file_names>
155
156 Arrayref of paths of files in the torrent.
157
158 =item B<file_lengths>
159
160 Arrayref of lengths of files in the torrent, in bytes.
161
162 =item B<magnet>, B<magnet_uri>
163
164 Magnet link for the torrent.
165
166 =item B<torrent>([I<$filename>])
167
168 B<THIS METHOD WAS REMOVED IN STRIKE API V2.1>. Therefore, it simply
169 dies. Below is the previous documentation of the method.
170
171 Downloads the torrent from Strike. With no arguments, returns the
172 contents of the torrent file. With an argument, stores the torrent in
173 I<$filename>.
174
175 Both forms return a true value for success and false for failure.
176
177 =item B<description>
178
179 The description of the torrent. This method sends an extra request to
180 Strike. Successful responses are cached.
181
182 =item B<imdb_id>
183
184 The IMDB ID of the torrent, or undef if the torrent has no associated
185 IMDB ID.
186
187 =item B<imdb>
188
189 Calls B<strike_imdb> from L<WebService::Strike> on B<imdb_id>. Caches
190 the response. Returns undef if the torrent has no associated IMDB ID.
191
192 =back
193
194 =head1 SEE ALSO
195
196 L<WebService::Strike>, L<https://getstrike.net/api/>
197
198 =head1 AUTHOR
199
200 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
201
202 =head1 COPYRIGHT AND LICENSE
203
204 Copyright (C) 2015-2016 by Marius Gavrilescu
205
206 This library is free software; you can redistribute it and/or modify
207 it under the same terms as Perl itself, either Perl version 5.20.2 or,
208 at your option, any later version of Perl 5 you may have available.
209
210
211 =cut
This page took 0.030411 seconds and 4 git commands to generate.