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 Python-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 Python-Script:

# fixuplinks.py
# param = InputFile mit Titel:yyyy_ff(.txt)
# Outputfile = InputFile-Titel + .newhtml
# ----------------------------------------- 26.11.2018

import os.path
from pathlib import Path
from urllib.request import urlopen
import sys

hdrctr = 0
ctr = 0
skipcheck = False      # Internet-checks oder nicht

#--------------------------------------------------------------------------
def handle_link (rec,f):
    global skipcheck
   
    lnk = ''
    if rec.startswith('http'):
        lnk = rec.strip()
    else:
        lnk = 'http://' + rec.strip()
    if lnk.startswith('https'):
        cleanlink = lnk[8:]
    else:           
        cleanlink = lnk[7:]   
           
    htmltext = '<li><a href="' + lnk + '" target="_blank">' +  cleanlink + '</a></li>' + "\n";   
    f.write(htmltext)
  
    if not skipcheck:
        try:
            conn = urlopen (lnk)
        except:   
            print ('not found:', lnk)
            errfile.write (str(ctr) + ':' + lnk + '\n')
 
#--------------------------------------------------------------------------   
def handle_header(rec,f):
    global hdrctr
    if hdrctr > 0:
        f.write ('</ul>'  + '\n')
    hdrctr += 1   
    htmltext = '<p><strong>' + rec[1:].strip() + '<br /></strong></p>' + "\n";
    f.write (htmltext)
    f.write ('<ul>' + '\n')
   
#-------------------------------------------- main
       
arg =  sys.argv
if len(arg) == 2:
    fname =  (sys.argv[1]) + '.txt' 
    #fname = '2018_99.txt'
    infilename = Path(fname)
    if not infilename.is_file():
        print ('file ' + fname + ' is not present ')
        sys.exit()
       
else:
      print ('no arg provided ')
      sys.exit()
     
print ('reading:', infilename)

htmlfile = fname + '.html'
hfile = open (htmlfile,'w')
errfile = open ('badlinksneu.txt', 'w')

#--------------------------------------------------------------------------
with open (infilename) as infile:
    #global ctr
    for ztemp in infile:
        ctr+=1
        if ctr > 1:  
            zeile = ztemp
        else:   
            if ztemp.startswith ('\xEF'):
                zeile = ztemp[3:]      # skip Byte Order Mark:  EF BB BF
            else:
                zeile = ztemp         
               
        if zeile.startswith('$'):
            handle_header(zeile, hfile)
        else:
            handle_link(zeile, hfile)

    hfile.write('</ul>')   
          
    print ('total ', ctr, ' records gelesen')