]>
iEval git - www-search-torrentz.git/blob - lib/WWW/Search/Torrentz/Result.pm
1 package WWW
:: Search
:: Torrentz
:: Result
;
6 use parent qw
/WWW::SearchResult/ ;
8 our $VERSION = '0.002' ;
10 use HTML
:: TreeBuilder
;
11 use URI
:: Escape qw
/uri_escape/ ;
14 my ( $class , %args ) = @_ ;
15 my $self = $class -> SUPER :: new
( @_ );
19 $self -> $_ ( $args { $_ }) for qw
/title verified age size seeders leechers infohash/ ;
20 $self ->{ ua
} = $args { ua
};
21 $self -> add_url ( "https://torrentz.eu/ $args {infohash}" );
25 sub infohash
{ shift -> _elem ( infohash
=> @_ ) }
26 sub verified
{ shift -> _elem ( verified
=> @_ ) }
27 sub age
{ shift -> _elem ( age
=> @_ ) }
28 sub size
{ shift -> _elem ( size
=> @_ ) }
29 sub seeders
{ shift -> _elem ( seeders
=> @_ ) }
30 sub leechers
{ shift -> _elem ( leechers
=> @_ ) }
33 my ( $self , $full ) = @_ ;
34 my $infohash = $self -> infohash ;
35 my $title = uri_escape
$self -> title ;
36 my $uri = "magnet:?xt=urn:btih: $infohash &dn= $title " ;
38 $uri .= join '' , map { "&tr= $_ " } map { uri_escape
$_ } $self -> trackers if $full ;
45 my $tree = HTML
:: TreeBuilder
-> new ;
47 $tree -> parse ( $self ->{ ua
}-> get ( $self -> url )-> content );
50 my $trackers = $tree -> look_down ( class => 'trackers' );
51 $self ->{ trackers
} // = [];
52 for my $tracker ( $trackers -> find ( 'dl' )) {
53 push $self ->{ trackers
}, $tracker -> find ( 'a' )-> as_text ;
56 my $files = $tree -> look_down ( class => 'files' );
57 $self ->{ files
} // = [];
58 $self -> parse_directory ( scalar $files -> find ( 'li' ), '' );
64 my ( $self , $directory , $prefix ) = @_ ;
65 $prefix .= $directory -> as_text . '/' ;
66 my $contents_ul = $directory -> right -> find ( 'ul' );
67 return unless defined $contents_ul ; # Empty directory
68 my @children = $contents_ul -> content_list ;
70 for my $child ( @children ) {
76 if ( defined $child -> attr ( 'class' ) && $child -> attr ( 'class' ) eq 't' ) {
77 $self -> parse_directory ( $child , $prefix );
80 $child -> objectify_text ;
81 my ( $filename , $size ) = $child -> find ( '~text' );
82 push $self ->{ files
}, +{
83 path
=> $prefix . $filename -> attr ( 'text' ),
84 size
=> $size -> attr ( 'text' )
92 $self -> parse_page unless $self ->{ parsed
};
98 $self -> parse_page unless $self ->{ parsed
};
104 my $torrage = 'http://torrage.com/torrent/' . uc $self -> infohash . '.torrent' ;
105 my $torrent = $self ->{ ua
}-> get ( $torrage )-> content ;
107 $torrent ; # TODO: if this is undef, download metadata with magnet link
117 WWW::Search::Torrentz::Result - a result of a WWW::Search::Torrentz search
121 my $result = $search->next_result;
122 say 'URL: ' . $result->url;
123 say 'Title: ' . $result->title;
124 say 'Infohash: ' . $result->infohash;
125 say 'Verified: ' . $result->verified;
126 say 'Age: ' . $result->age;
127 say 'Size: ' . $result->size;
128 say 'Seeders: ' . $result->seeders;
129 say 'Leechers: ' . $result->leechers;
130 say 'Magnet link: ' . $result->magnet;
131 say 'Magnet link with trackers: ' . $result->magnet(1);
132 my @tracker_list = $result->trackers;
133 my @file_list = $result->files;
134 my $torrent_file = $result->torrent;
138 WWW::Search::Torrentz::Result is the result of a WWW::Search::Torrentz search.
146 Returns a link to the torrent details page.
150 Returns the torrent's title.
154 Returns the infohash of the torrent, a 40 character hex string.
158 Returns the verification level of this torrent, or 0 if the torrent not verified. Higher is better.
162 Returns the torrent's age, as returned by Torrentz. Usually a string such as '4 days', 'yesterday', 'today', '2 months'.
166 Returns the torrent's size, as returned by Torrentz. A string such as '151 MB', '25 GB'.
170 Returns the number of seeders this torrent has, as returned by Torrentz.
174 Returns the number of leechers this torrent has, as returned by Torrentz.
176 =item B<magnet>([I<include_trackers>])
178 Returns a magnet link that describes this torrent.
180 If I<include_trackers> is true, the magnet link will include the tracker list. This calls B<parse_page> if not called already.
184 Returns a list of trackers for this torrent. Calls B<parse_page> if not called already.
188 Returns a list of files this torrent includes. Calls B<parse_page> if not called already.
190 Each element is a hashref with two keys. C<path> is the file path and C<size> is the file size, as returned by Torrentz.
194 Downloads the details page for this torrent and extracts the tracker and file list. It is called automatically by other methods when necessary, you shouldn't have to call it yourself.
198 Downloads this torrent file from Torrage. If found, it returns the contents of the torrent file. Otherwise it returns undef.
206 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
208 =head1 COPYRIGHT AND LICENSE
210 Copyright (C) 2013 by Marius Gavrilescu
212 This library is free software; you can redistribute it and/or modify
213 it under the same terms as Perl itself, either Perl version 5.18.1 or,
214 at your option, any later version of Perl 5 you may have available.
This page took 0.059584 seconds and 4 git commands to generate.