Χρήστης:AtouBot/xml-σελίδες-ns0.pl
Όνομα εργαλείου: xml-σελίδες-ns0.pl
Περιγραφή:
Αυτό το εργαλείο διαβάζει κείμενο σε μορφή xml και γράφει στην κονσόλα το περιεχόμενο σελίδων που βρίσκονται στο κύριο namespace (ns0). Για να αποθηκευτούν οι σελίδες, πρέπει να κάνετε ανακατεύθυνση με τον κανονικό τρόπο (xml-σελίδες-ns0.pl > όνομα-αρχείου
).
Παράμετροι: Δεν υπάρχουν.
Προϋποθέσεις:
- perl
Σημειώσεις χρήσης:
- Παράδειγμα χρήσης:
cat elwiktionary-20080309-pages-meta-current.xml |./xml-σελίδες-ns0.pl
→ Πίσω στα Εργαλεία |
xml-σελίδες-ns0.pl
επεξεργασία#!/usr/bin/perl # γράφουμε όλες τις σελίδες στο ns0 # παραδείγματα: # cat elwiktionary-20080309-pages-meta-current.xml |./xml-σελίδες-ns0.pl use utf8; #!/usr/bin/perl use constant { NONE => 0, STATRTPAGE => 1, TITLE => 2, NS0 => 3, ENDPAGE => 4, }; @namespaces = (); # retrieve a header from somewhere and figure it out $namespacesxml = `wget -q -O - "http://el.wiktionary.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces&format=xml"`; # format: <ns id="4" case="case-sensitive" subpages="" canonical="Project" xml:space="preserve">Βικιλεξικό</ns> #$namespacesxml =~ s/<\/ns>/<\/ns>\n/g ; @namespaceslines = split(/<\/ns>/,$namespacesxml); foreach ( @namespaceslines ) { if ($_ =~ /<ns.*"preserve">([^>]*)$/) { push @namespaces, $1; } } $state=NONE; while (<STDIN>) { $line=$_; if ($line =~ /<page>/) { $state = STARTPAGE; @text=($line); } elsif ($state == STARTPAGE) { if ($line =~ /<title>/) { if ($line !~ /<title>([^:]*):.*<\/title>/) { $state = NS0; for my $textline (@text) { print "$textline"; } print $line; } else { $ns = $1; if ($ns ~~ @namespaces) { $state = TITLE; } else { $state = NS0; for my $textline (@text) { print "$textline"; } print $line; } } @text=(); } else { @text=(@text,$line); } } elsif ($state == NS0) { print $line; if($line =~ /<\/page>/) { $sstate = ENDPAGE; } } elsif ($state == TITLE) { if($line =~ /<\/page>/) { $sstate = ENDPAGE; } } elsif ($state == ENDPAGE) { # do nothing :-P } } exit(0);