#!/usr/bin/perl # TODO: # - be able to load from multiple TGP's at once (load the pages in parallel) # - remember links we've previously seen (though some of the thumbnails may disappear at some point...) use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); use FindBin; use lib "$FindBin::Bin/"; use Porn; use URLMetadata; use LWP::UserAgent; use CGI; use Data::Dumper; use CGI::Util; use URI; use URI::QueryParam; my $ua = new LWP::UserAgent; $ua->agent("Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)"); my $cgi = new CGI; (my $zero = $ENV{SCRIPT_NAME}) =~ s#^.*/##; my ($site_order, %sites) = ordered_hash( "restrainedmaidens.com" => { thumbs_path => "/st/thumbs/", link_redirector => "/st/st.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?url=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; my $frag = (split '/', $path)[4]; $frag =~ s/\..*//; #print "Fragment: $frag\n"; return $frag; }, }, "fetishcabin.com" => { thumbs_path => "/fetishcabin/", link_redirector => "/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "brutaltgp.com" => { thumbs_path => "/t/", link_redirector => "/out.php", unobfuscate_url => sub { my $url = shift; return unless ($url =~ /link=ID-/); $url =~ s#^.*?url=http#http#; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "bdsmnewlife.com" => { thumbs_path => "/htm3/content/", link_redirector => "/cgi-bin/at3/out.cgi", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, thumbID_sort_type => 'string', }, "bondagehotporn.com" => { thumbs_path => "/st/thumbs/", link_redirector => "/st/st.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?\burl=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "pain-vids.com" => { thumbs_path => "/streamrotator/thumbs/", link_redirector => "/streamrotator/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?(?:%0[ad])+##sig; # bah... why does the page include newlines in the friggin URL? $url =~ s#&#&#sig; return $url; }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "harassedslavegirl.com" => { thumbs_path => "/streamrotator/thumbs/", link_redirector => "/streamrotator/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?(?:%0[ad])+##sig; # bah... why does the page include newlines in the friggin URL? $url =~ s#&#&#sig; return $url; }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "brutalfetish.com" => { thumbs_path => "/st/thumbs/", link_redirector => "/st/st.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*?url=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "worldofbdsm.net" => { thumbs_path => "/sr/thumbs/", link_redirector => "/sr/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, "5bdsm.com" => { thumbs_path => "/r/thumbs/", link_redirector => "/r/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*\burl=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, 'imaginations-bdsm.com' => { thumbs_path => "/streamrotator/thumbs/", link_redirector => "/streamrotator/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, 'freeporndream.com' => { thumbs_path => "/streamrotator/thumbs/", link_redirector => "/streamrotator/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, 'wildbdsm.com' => { thumbs_path => "/stream/thumbs/", link_redirector => "/stream/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, 'cruelbdsm.in' => { thumbs_path => "/cruelbdsm/", link_redirector => "/out.php", unobfuscate_url => sub { my $url = shift; $url =~ s#^.*\bu=##; $url =~ s#&.*##; return CGI::Util::unescape($url); }, thumbID_sortable => sub { my $path = URI->new(shift)->path; $path =~ s#^.*/|\.jpg$##sig; return $path; }, }, ); my $list; if (@ARGV && $ARGV[0] eq '--list') { # provide a minimal command-line mode, so that other scripts can easily process our data shift @ARGV; $list++; } my $site = $cgi->param('site') || $ARGV[0]; my $sort = $cgi->param('sort') || $ARGV[1] || 'domain'; $list or print "Content-type: text/html\n\n"; if (!$site) { print "Choose a site to view:\n"; if ($list) { print join("\n", @$site_order), "\n"; exit; } print "