use strict;
$|=1;
package Piratebay;
use strict;
use WebServer;
sub new {
return bless { svr=>WebServer->new("http://thepiratebay.org") }, shift;
}
# 100 Audio
# 101 Music
# 102 Audio books
# 103 Sound clips
# 104 FLAC
# 199 Other
# 200 Video
# 201 Movies
# 202 Movies DVDR
# 203 Music videos
# 204 Movie clips
# 205 TV shows
# 206 Handheld
# 207 Highres - Movies
# 208 Highres - TV shows
# 299 Other
# 300 Applications
# 301 Windows
# 302 Mac
# 303 UNIX
# 304 Handheld
# 399 Other OS
# 400 Games
# 401 PC
# 402 Mac
# 403 PS2
# 404 XBOX360
# 405 Wii
# 406 Handheld
# 499 Other
# 600 Other
# 601 E-books
# 602 Comics
# 603 Pictures
# 604 Covers
# 699 Other
# 1 name
# 3 uploaded
# 5 size
# 7 seeders
# 9 leechers
# 11 uploader
# 13 type
# +0 = ascending
# +1 = descending
sub parseline {
my %r;
if ($_[0] =~ /
.*?\(/s) {
$r{category}= $1;
}
while ($_[0] =~ / | (\d+)<\/td>/gs) {
if (exists $r{seeders}) {
$r{leechers}= $1;
}
else {
$r{seeders}= $1;
}
}
if ($_[0] =~ /class="detLink" title="Details for (.*?)">/) {
$r{description}= $1;
}
if ($_[0] =~ /magnet:\?xt=urn:btih:(\w+)/) {
$r{infohash}= pack("H*", $1);
}
if ($_[0] =~ /Uploaded (.*?), Size (\S+?), ULed by (.*?)<\/font>/) {
$r{uploaded}=$1;
$r{size}=$2;
$r{uploader}=$3;
$r{uploaded} =~ s/ / /g;
$r{uploaded} =~ s/<[^>]*>//g;
$r{size} =~ s/ / /g;
$r{uploader} =~ s/ / /g;
$r{uploader} =~ s/<[^>]*>//g;
}
return \%r;
}
sub parseresult {
if ($_[0] =~ /(.*?)<\/table>/s) {
my $tab= $1;
my @res;
while ($tab =~ /(.*?)<\/tr>/gs) {
my $line= $1;
next if ($line =~ /"text-align:center;"/);
push @res, parseline($line);
}
return \@res;
}
return [];
}
sub browse {
my ($self, $class, $order, $page)= @_;
print("===browse/$class/$page/$order\n");
my $rp= $self->{svr}->httpget("/browse/$class/$page/$order");
return parseresult($rp->content);
}
sub recent {
my ($self, $page)= @_;
print("===recent/$page\n");
my $rp= $self->{svr}->httpget("/recent/$page");
return parseresult($rp->content);
}
package main;
use strict;
use GetOpt::Long;
my $tpb= Piratebay->new();
if (@ARGV==0) {
for (my $p=0 ; ; $p++) {
my $l= $tpb->recent($p);
last if !@$l;
printresults($l);
}
}
else {
my ($c, $o)= @ARGV;
$o=3 unless defined $o;
for (my $p=0 ; ; $p++) {
my $l= $tpb->browse($c, $o, $p);
last if !@$l;
printresults($l);
}
}
sub printresults {
my ($l)= @_;
for my $r (@$l) {
printf("%4d %4d %3d %-11s %-11s %-16s %s %s\n", $r->{seeders}, $r->{leechers}, $r->{category}, $r->{uploaded}, $r->{size}, $r->{uploader}, unpack("H*", $r->{infohash}), $r->{description});
}
}
|