Wie die Seiten entstehen

Das Abtippen von teilweise endlosen oder im Falle von Youtube-Links kryptischen Angaben ist langweilig und fehleranfällig. Deshalb habe ich der USKA vorgeschlagen, die Links online zur Verfügung zu stellen.

 Hier beschreibe ich, wie ich vorgehe:

 Viele Leser denken, es sei einfach, die Links mit einem Programm aus dem PDF des HB-Radio zu fischen - das ist überhaupt nicht so ! Nicht alle PDF-Leseprogramme können gescheit mit einem 3-spaltigen Text umgehen. In diesem Fall ist der manuelle Prozess rascher und weniger fehleranfällig Deshalb habe ich meine Arbeit aufgeteilt:

 1. Phase (manuell) - Erfassen der Links
Ich lese das PDF und sichere jeden Link - manchmal ist er ja unvollständig, weil er über zwei oder mehr Zeilen läuft, einen (unbrauchbaren) Trennstrich enthält etc.

Ich erstelle ein Textfile und trage jeden Link ein. Wenn der Link auf einer neuen Seite auftaucht, speichere ich auch den Seiten-Titel und die Seiten-Nummer - bevor ich mit der Link-Liste beginne. Titel-Zeilen kennzeichne ich mit einem $-Zeichen an der ersten Stelle. Das sieht dann so aus:

$HF-Contest-Calendar        Seite 15
http://www.hb9dhg.ch/contest.cfm?Action=1
www.sk3bg.se/contest
http://www.uba.be/en/hf/contest-calendar
http://www.darc.de/referate/dx/contest/kalender/
$Mikrostaaten            Seite 18
http://de.wikipedia.org/wiki/Liste_der_Mikronationen
.....

 

2. Aufbereitung (automatisch)
Die Text-Datei übergebe ich dann einem Perl-Script, der mir die gewünschte HTML-Seite generiert - in einem ordentlichen Format:

<p><strong>HF-Contest-Calendar        Seite 15<br /></strong></p>
<ul>
<li><a href="http://www.hb9dhg.ch/contest.cfm?Action=1" target="_blank">www.hb9dhg.ch/contest.cfm?Action=1</a></li>
<li><a href="http://www.sk3bg.se/contest" target="_blank">www.sk3bg.se/contest</a></li>
<li><a href="http://www.uba.be/en/hf/contest-calendar" target="_blank">www.uba.be/en/hf/contest-calendar</a></li>
<li><a href="http://www.darc.de/referate/dx/contest/kalender/" target="_blank">www.darc.de/referate/dx/contest/kalender/</a></li>
</ul>
<p><strong>Mikrostaaten            Seite 18<br /></strong></p>
<ul>
<li><a href="http://de.wikipedia.org/wiki/Liste_der_Mikronationen" target="_blank">de.wikipedia.org/wiki/Liste_der_Mikronationen</a></li>
</ul>
....

Der Script prüft dann auch, ob der Link im Internet überhaupt zu finden ist. So finde ich Tipp-Fehler etc.

3. Publikation (wieder manuell)

Am Schluss kopiere ih den generierten HTML-Text in das Joomla-Web-System und muss nur noch für die korrekte Eingliederung in das Menu-System sorgen.

 

 --------------------------------------------------------------------------

und dies ist mein Perl-Script:

#FixupLinks.pl
#-------------
# liest ein Text-File ein und baut daraus ein HTML-File,
# das dann via Joomla-Editor in eine Website im LinkWeb
# kopiert werden kann.
#
# Wenn der Text mit einem $ beginnt, ist es eine Überschrift
# ansonst ein Link
# Die Gültigkeit des Links wird überprüft; Fehler müssen
# im InputFile bereinigt werden und danach dieser Script
# wieder gestartet werden
# Schlechte Links landen in der Datei badlinks.txt zur
# bequemeren Analyse
# Die Darstellung der Links erfolgt unter Weglassen des http://
# zum Testen kann $testing auf 1 gesetzt werden, dann wird
# der Internet-Zugriff ausgelassen
#------------------------------------ 29.11.2014 /hb9bnk
# 3.2.2015: der linkcheck ist nicht über jeden Zweifel erhaben
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use URI::Heuristic;


$infilename = '2015_03.txt';
$outfilename = $infilename . '.html';
$UL_open       = 0;  #
$UL_written = 0;  
$in_rec = "";
$out_rec = "";
$rec_ctr = 0;
$dumpfile_open=0;
$testing = 0;            # <> 0: kein Internet-Zugriff
#-------------------------------------------------------
sub handle_header () {
#   -------------    
    my $titel = shift;
    #print "header=" . $titel;
    $out_rec = "";
    if ($UL_open == 1) {
        $out_rec = '</ul>' . "\n";
        print HTML  $out_rec;
        $UL_open = 0;
        $UL_written = 0;
        }
        
       #<p><strong>National Mountain Day 2014    Seite 14 ...<br /></strong></p>
    $out_rec = '<p><strong>' . $titel . '<br /></strong></p>' . "\n";
    print HTML $out_rec;
   }


sub handle_link () {
#   -----------
    my $lnk = shift;
    my $cleanlink = "";
    
   #print "link=" . $lnk . "\n";
   if ($lnk =~/^(\w*):\/\/(.*$)/) {   # ist http:// vorhanden ?
      }
   else {
       $lnk = 'http://' . $lnk;         # nein - einfügen
      }
   &check_link($lnk);
    if ($UL_written == 0) {
        $out_rec = '<ul>' . "\n";
       print HTML $out_rec;
       $UL_written = 1;
       $UL_open = 1;
    }
    if ($lnk =~/^(\w*):\/\/(.*$)/) {   # http:// loswerden für die Website
         $cleanlink = $2;
       }
    else {
        $cleanlink = $lnk;
   }
   
       #<li><a href="http://nmd....4.xls" target="_blank">http://nmd.....N_NMD14.xls</a></li>
    $out_rec = '<li><a href="' . $lnk . '" target="_blank">'
       . $cleanlink . '</a></li>' . "\n";
    print HTML $out_rec;
}

sub check_link () {
#   ----------
    my $weblink = shift;
    #print "checking: $weblink\n";
    if ($testing==0) {
       my $raw_url = $weblink . "\n";
       my $url = URI::Heuristic::uf_urlstr($raw_url);
       my $ua = LWP::UserAgent->new();
       #print "checking: $url\n";
       my $req=HTTP::Request->new(GET => $url);
       my $response = $ua->request($req);
       if ($response->is_error()) {
           print "line $rec_ctr: link invalid: $weblink\n";
           &dump_link($weblink);
           }
        }
    }


sub dump_link () {
#   ---------
    my $badlink = shift();
    my $linkline = "";
    $linkline = $rec_ctr . ":";
     if ($dumpfile_open == 0) {
         open (LINKDUMP, ">badlinks.txt") or die $!;
         $dumpfile_open = 1;
        }
    $linkline = $linkline . $badlink . "\n";
    print LINKDUMP $linkline ;
   }



#------------------------------------------------ start ----------------

open (SRC, $infilename) or die $!;
open (HTML, ">" . $outfilename) or die $!;
if (!$testing == 0) {
    print "Debug-Mode: kein Linktest aktiviert\n";
   }

while (<SRC>) {
   chomp;
   $rec_ctr ++;
   #last if $rec_ctr > 15;
   $in_rec = $_;
   #print "$in_rec \n";
   next if /^\s*$/;     # Leerzeile
    if (/^\$(.*)$/) {
        #$in_rec = $1;
        &handle_header($1);
        }
  else {
      &handle_link($in_rec);
  }
    }
if ($UL_open == 1) {
     $out_rec = '</ul>' . "\n";
    print HTML $out_rec;
 }
    
close (HTML);    
print "total $rec_ctr records verarbeitet\n";
if ($dumpfile_open == 1) {
    print "es hat Fehler gegeben\n";
    close LINKDUMP;
}