Import des alten Forums ins neue Forum

Ich gaube, das war der github dump. Das skript (perl Hack) zum Parsen des contents ist etwa so (s. u.)
Im Wesentlichen ist das ein kleiner Parser, um das Format des Dumps zu zerlegen.

open INFILE, "<:encoding(UTF-8)", 'content.txt' || die;
#open INFILE, 'content.txt' || die;

my $line_no = 0;
my $line = <INFILE>;
my $rec = {};

sub getline {
    $line_no++;
    $line = <INFILE>;
    $line =~ s/ä/ae/g;
    $line =~ s/ö/oe/g;
    $line =~ s/ü/üe/g;
    $line =~ s/Ä/Ae/g;
    $line =~ s/Ö/Oe/g;
    $line =~ s/Ü/Ue/g;
    $line =~ s/ß/sz/g;
    return $line;
}

my $skip = {
    3649    => 1,
    22919   =>  1,
    22962   => 1,
    23124   => 1,
    23176   => 1
};

sub end_of_rec {
    
    if ( $skip->{$line_no} ) {
        printf( "break;" );
        return;
    }

    printf("no   = %d\n", $line_no);
#    printf("cat  = %s\n", $rec->{fd_category});
#    printf("title= %s\n", $rec->{fd_title});
#    printf("user = %s\n", $rec->{fd_user});
    
   # ACHTUNG: Hier anpassen, um die eigene DB zu schreiben!!!!

    if ($rec->{fd_user}) {
        my $result = $frame->db_run(
                'yacy',
                $frame->{yacy}{'insert'},
                $rec
              );
    }
   
}


while ($line) {
    
    my $done = 0;   
    if ($line =~ /^\-\-\-/) {
        end_of_rec($rec);
        $rec = {};
        
        getline();
        chop $line;
#        $line =~ /^([a-zA-Z1-9\-\,\:\s\'\\]+) \W ([a-zA-Z1-9\-\,\:\s\'\\]+)/;
        my @parts = split(/\|#\|/, $line);
        $rec->{fd_category} = $parts[0];
        $rec->{fd_title} = $parts[1];
        getline();
        getline();
        $line =~ /Date: ((\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d))/;
        $rec->{fd_created} = $1;
        
        while (!$done) {
            getline();
            
            if($line =~ /Statistik: Verfasst von \{(.+)\}/) {
                $rec->{fd_user} = $1;
                $done = 1;
            } else {
                $rec->{fd_content} .= $line;
            }
        }
    }
    if (!getline()) {
        $done = 1;
    }
    
}
1 Like

Hi Markus @zooom , hab deinen Beitrag von Willkommen im neuen (nicht nur..) YaCy Forum / Welcome to the new (not only..) YaCy Forum hierher geschoben.

Ich hab das Script mal ins home-Verzeichnis des Dump-Repos https://github.com/yacy/yacy_forum_archive kopiert, “import.pl” genannt und mit
perl import.pl
gestartet. Es ist aber nichts passiert. Kannst du mal ein Beispiel machen?

Der Dump wird aus der Datei content.txt gelesen und muss natürlich vorher z.B. aus github oder https://zooom.ch/content.txt dorthin kopiert werden.

Im Mittelteil liegt dann ein einzelner Datensatz im $rec vor und wird mit

db_run(
                'yacy',
                $frame->{yacy}{'insert'}, // siehe das INSERT Statement weiter unten
                $rec

per SQL in die DB geschrieben. Dies muss natürlich für die jeweilige DB noch implementiert werden.

insert =
INSERT INTO fdump
(
fd_category,
fd_title,
fd_created,
fd_user,
fd_content
)
VALUES (
$fd_category,
$fd_title,
$fd_created,
$fd_user,
$fd_content
)

Wenn’s schneller gehen muss, habe ich hier das ganze kleine Projekt incl. MySQL Dump meiner DB abgelegt:

https://zooom.ch/forum_dump.zip

Anleitung:

  1. forum_dump.zip auspacken
  2. Mysql DB gemäss yfdump.ini einrichten
  3. perl yfdump.pl starten

dann sollte das klappen.

1 Like