Code 43 : 4chan

Posté le , conservation toujours, coloration syntaxique : Perl, télécharger.

1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
6061
6263
6465
6667
6869
7071
7273
7475
7677
7879
8081
8283
8485
8687
8889
9091
use strict;
use warnings; 
use LWP::UserAgent;use File::Path;
 use locale 'fr';
 $| = 1;
 die("Syntaxe incorrecte.") unless @ARGV == 1;
 my $url = $ARGV[0];
my ($board, $id); 
die("URL invalide") unless $url =~ m|http://boards.4chan.org/([a-z0-9]{1,3})/res/(\d+)|;$board = $1;
$id = $2; 
my $ua = LWP::UserAgent->new; 
do {    my $res = $ua->get($url);
    if ($res->code == 200) {        my $page = $res->content;
        if ($page =~ /<form name="delform"[^>]*>(.+)<br clear=left>/si) {            my $content = $1;
                    # Ajout du CSS
            $content = '<link rel="stylesheet" type="text/css" href="http://static.4chan.org/css/yotsuba.9.css" title="Yotsuba">' . "\n" . $content;        
            # Remplacement des références aux images            my %pics = ($content =~ m|<a href="([^"]+)" target=_blank><img src=([^ ]+)|g);
            $content =~ s|<a href="http://images.4chan.org/([a-z0-9]{1,3})/src/(\d+\.[a-z]+)|<a href="img/$1/${id}/$2|g;            $content =~ s|<img src=http://\d+.thumbs.4chan.org/([a-z0-9]{1,3})/thumb/(\d+s\.jpg)|<img src="img/$1/${id}/$2"|g;
                        # Suppression des liens externes
            $content =~ s|<a href="\d+#\d+" class="quotelink">(&gt;&gt;\d+)</a>|$1|g;            $content =~ s|&gt;&gt;$id|<a href="#$id">$&</a>|g;
                    # Pour /b/ : remplacement des 'XXX'
            $content =~ s|quote\('(\d+)'\)" class="quotejs">\d+XXX</a>|quote('$1')" class="quotejs">$1</a>|g;        
            open THREAD, '>', "${board}_$id.htm"                or die $!;
            print THREAD $content;            close THREAD;
            print ".";            
            # Enregistrement des images            if (!-d "img/$board/$id/") {
                mkpath "img/$board/$id/"                    or die $!;
            }            while (my ($pic, $thumb) = each %pics) {
                if ($pic =~ m|http://images.4chan.org/([a-z0-9]{1,3})/src/((\d+)\..+)|) {                    my $pic_board = $1;
                    my $pic_name = $2;                    my $pic_id = $3;
                    my $thumb_name = $pic_id . "s.jpg";                    if (!-f "img/$pic_board/$id/$pic_name") {
                        print "\nTéléchargement de $pic_board/$pic_id...";                        my $pic_content = $ua->get($pic)->content;
                        my $pic_thumb = $ua->get($thumb)->content;                        open PIC_CONTENT, '>', "img/$pic_board/$id/$pic_name"
                            or die $!;                        open PIC_THUMB, '>', "img/$pic_board/$id/$thumb_name"
                            or die $!;                        binmode PIC_CONTENT;
                        print PIC_CONTENT $pic_content;                        binmode PIC_THUMB;
                        print PIC_THUMB $pic_thumb;                        close PIC_CONTENT;
                        close PIC_THUMB;                        print " OK\n";
                    }                }
            }        } else {
            print "\nLe thread $board/$id a répondu bizarrement.";        }
    } elsif ($res->code == 404) {        print "\nThread $board/$id expiré ou inexistant.\n";
        exit;    } else {
        printf "\nThread %s/%s inaccessible : %d (%s)\n", $board, $id, $res->code, defined($res->header('Client-Warning')) ? "client" : "serveur";    }
     sleep 15;
} while 1; 

Durée de conservation :