sub gui_query{ shift->native_query(@_) }
sub _native_setup_search{
- my ($self, $native_query, $options) = @_;
- $self->agent_email('marius@ieval.ro');
- $options //= {};
- my $base_url = $options->{search_url} // 'https://torrentz.eu/search';
- $self->{search_debug} = $options->{search_debug};
- $self->{_next_url} = "$base_url?f=$native_query";
- $self->user_agent->delay(2/60);
+ my ($self, $native_query, $options) = @_;
+ $self->agent_email('marius@ieval.ro');
+ $options //= {};
+ my $base_url = $options->{search_url} // 'https://torrentz.eu/search';
+ $self->{search_debug} = $options->{search_debug};
+ $self->{_next_url} = "$base_url?f=$native_query";
+ $self->user_agent->delay(2/60);
}
sub _parse_tree{
- my ($self, $tree) = @_;
- my $found = 0;
-
- my @potential_results = $tree->find('dl');
- my $result_count = $tree->find('h2')->as_text;
- if (defined $result_count && $result_count ne 'No Torrents Found') {
- $result_count =~ s/orrents.*//;
- $result_count =~ y/0-9//cd;
- $self->approximate_result_count(int $result_count);
- }
-
- for my $node (@potential_results) {
- my $a = $node->find('a');
- next unless defined $a;
-
- my $infohash = substr $a->attr('href'), 1;
- next unless $infohash =~ m,^[a-f0-9]{40}$,;
- my $title = $a->as_text;
- my ($verified, $age, $size, $seeders, $leechers);
- $verified = 0;
- for my $span($node->find('span')) {
- given($span->attr('class')){
- $verified = int ($span->as_text =~ m,^\d+,) when 'v';
- $age = $span->as_text when 'a';
- $size = $span->as_text when 's';
- $seeders = int $span->as_text when 'u';
- $leechers = int $span->as_text when 'd';
- }
+ my ($self, $tree) = @_;
+ my $found = 0;
+
+ my @potential_results = $tree->find('dl');
+ my $result_count = $tree->find('h2')->as_text;
+ if (defined $result_count && $result_count ne 'No Torrents Found') {
+ $result_count =~ s/orrents.*//;
+ $result_count =~ y/0-9//cd;
+ $self->approximate_result_count(int $result_count);
}
- push @{$self->{cache}}, WWW::Search::Torrentz::Result->new(infohash => $infohash, title => $title, verified => $verified, age => $age, size => $size, seeders => $seeders, leechers => $leechers, ua => $self->user_agent);
- say STDERR "infohash => $infohash, title => $title, verified => $verified, age => $age, size => $size, seeders => $seeders, leechers => $leechers" if $self->{search_debug};
- $found++;
- }
-
- my $url = $tree->look_down(rel => 'next');
- if (defined $url) {
- my $prev = $self->{_prev_url} =~ s,/[^/]+$,,r;
- $self->{_next_url} = $prev . $url->attr('href')
- }
- say STDERR "Found: $found" if $self->{search_debug};
- return $found;
+ for my $node (@potential_results) {
+ my $a = $node->find('a');
+ next unless defined $a;
+
+ my $infohash = substr $a->attr('href'), 1;
+ next unless $infohash =~ m,^[a-f0-9]{40}$,;
+ my $title = $a->as_text;
+ my ($verified, $age, $size, $seeders, $leechers);
+ $verified = 0;
+ for my $span ($node->find('span')) {
+ given($span->attr('class')){
+ $verified = int ($span->as_text =~ m,^\d+,) when 'v';
+ $age = $span->as_text when 'a';
+ $size = $span->as_text when 's';
+ $seeders = int $span->as_text when 'u';
+ $leechers = int $span->as_text when 'd';
+ }
+ }
+
+ push @{$self->{cache}}, WWW::Search::Torrentz::Result->new(infohash => $infohash, title => $title, verified => $verified, age => $age, size => $size, seeders => $seeders, leechers => $leechers, ua => $self->user_agent);
+ say STDERR "infohash => $infohash, title => $title, verified => $verified, age => $age, size => $size, seeders => $seeders, leechers => $leechers" if $self->{search_debug};
+ $found++;
+ }
+
+ my $url = $tree->look_down(rel => 'next');
+ if (defined $url) {
+ my $prev = $self->{_prev_url} =~ s,/[^/]+$,,r;
+ $self->{_next_url} = $prev . $url->attr('href')
+ }
+ say STDERR "Found: $found" if $self->{search_debug};
+ return $found;
}
1;
use URI::Escape qw/uri_escape/;
sub new{
- my ($class, %args) = @_;
- my $self = $class->SUPER::new(@_);
- $self->{parsed} = 0;
-
- no strict 'refs';
- $self->$_($args{$_}) for qw/title verified age size seeders leechers infohash/;
- $self->{ua} = $args{ua};
- $self->add_url("https://torrentz.eu/$args{infohash}");
- $self
+ my ($class, %args) = @_;
+ my $self = $class->SUPER::new(@_);
+ $self->{parsed} = 0;
+
+ no strict 'refs';
+ $self->$_($args{$_}) for qw/title verified age size seeders leechers infohash/;
+ $self->{ua} = $args{ua};
+ $self->add_url("https://torrentz.eu/$args{infohash}");
+ $self
}
sub infohash { shift->_elem(infohash => @_) }
sub leechers { shift->_elem(leechers => @_) }
sub magnet{
- my ($self, $full) = @_;
- my $infohash = $self->infohash;
- my $title = uri_escape $self->title;
- my $uri = "magnet:?xt=urn:btih:$infohash&dn=$title";
+ my ($self, $full) = @_;
+ my $infohash = $self->infohash;
+ my $title = uri_escape $self->title;
+ my $uri = "magnet:?xt=urn:btih:$infohash&dn=$title";
- $uri .= join '', map { "&tr=$_"} map { uri_escape $_ } $self->trackers if $full;
+ $uri .= join '', map { "&tr=$_"} map { uri_escape $_ } $self->trackers if $full;
- $uri
+ $uri
}
sub parse_page {
- my $self = $_[0];
- my $tree = HTML::TreeBuilder->new;
- $tree->utf8_mode(1);
- $tree->parse($self->{ua}->get($self->url)->content);
- $tree->eof;
-
- my $trackers = $tree->look_down(class => 'trackers');
- $self->{trackers} //= [];
- for my $tracker ($trackers->find('dl')) {
- push $self->{trackers}, $tracker->find('a')->as_text;
- }
-
- my $files = $tree->look_down(class => 'files');
- $self->{files} //= [];
- $self->parse_directory(scalar $files->find('li'), '');
-
- $self->{parsed} = 1;
+ my $self = $_[0];
+ my $tree = HTML::TreeBuilder->new;
+ $tree->utf8_mode(1);
+ $tree->parse($self->{ua}->get($self->url)->content);
+ $tree->eof;
+
+ my $trackers = $tree->look_down(class => 'trackers');
+ $self->{trackers} //= [];
+ for my $tracker ($trackers->find('dl')) {
+ push $self->{trackers}, $tracker->find('a')->as_text;
+ }
+
+ my $files = $tree->look_down(class => 'files');
+ $self->{files} //= [];
+ $self->parse_directory(scalar $files->find('li'), '');
+
+ $self->{parsed} = 1;
}
sub parse_directory{
- my ($self, $directory, $prefix) = @_;
- $prefix .= $directory->as_text . '/';
- my $contents_ul = $directory->right->find('ul');
- return unless defined $contents_ul; # Empty directory
- my @children = $contents_ul->content_list;
- my $skip = 0;
- for my $child (@children) {
- if ($skip) {
- $skip = 0;
- next;
- }
-
- if (defined $child->attr('class') && $child->attr('class') eq 't') {
- $self->parse_directory($child, $prefix);
- $skip = 1;
- } else {
- $child->objectify_text;
- my ($filename, $size) = $child->find('~text');
- push $self->{files}, +{
- path => $prefix.$filename->attr('text'),
- size => $size->attr('text')
- }
+ my ($self, $directory, $prefix) = @_;
+ $prefix .= $directory->as_text . '/';
+ my $contents_ul = $directory->right->find('ul');
+ return unless defined $contents_ul; # Empty directory
+ my @children = $contents_ul->content_list;
+ my $skip = 0;
+ for my $child (@children) {
+ if ($skip) {
+ $skip = 0;
+ next;
+ }
+
+ if (defined $child->attr('class') && $child->attr('class') eq 't') {
+ $self->parse_directory($child, $prefix);
+ $skip = 1;
+ } else {
+ $child->objectify_text;
+ my ($filename, $size) = $child->find('~text');
+ push $self->{files}, +{
+ path => $prefix.$filename->attr('text'),
+ size => $size->attr('text')
+ }
+ }
}
- }
}
sub trackers{
- my $self = $_[0];
- $self->parse_page unless $self->{parsed};
- @{$self->{trackers}}
+ my $self = $_[0];
+ $self->parse_page unless $self->{parsed};
+ @{$self->{trackers}}
}
sub files{
- my $self = $_[0];
- $self->parse_page unless $self->{parsed};
- @{$self->{files}}
+ my $self = $_[0];
+ $self->parse_page unless $self->{parsed};
+ @{$self->{files}}
}
sub torrent{
- my $self = $_[0];
- my $torrage = 'http://torrage.com/torrent/' . uc $self->infohash . '.torrent';
- my $torrent = $self->{ua}->get($torrage)->content;
+ my $self = $_[0];
+ my $torrage = 'http://torrage.com/torrent/' . uc $self->infohash . '.torrent';
+ my $torrent = $self->{ua}->get($torrage)->content;
- $torrent; # TODO: if this is undef, download metadata with magnet link
+ $torrent; # TODO: if this is undef, download metadata with magnet link
}
1;