META: Index ergänzt (und das Tool dafür)

September 14, 2009

Ich habe den Themen-Index ergänzt. Das passiert so selten – zuletzt im März, um genau zu sein – dass es eine Ankündigung wert scheint.

Außerdem bin ich wiederholt gefragt worden, wie ich denn so einen Index erstelle. Bislang lautete die Antwort „auf die harte Tour“, sprich, per Hand. Das ist mühsam, und daher habe ich dieses Mal ein Programm zusammengehackt, dass wenigstens einen Teil der Arbeit übernimmt: Es sucht sich die Links zusammen und druckt sie so aus, dass man sie dann (fast) nur in die Liste kopieren muss.

Falls es jemand nützlich findet, hier der Quellcode. Warnung: IANAP (I Am Not A Programmer), ohne Gewähr, und ich übernehme für nichts die Verantwortung. Getestet mit Python 2.5.1 und Mac OS X 10.5.8.

#!/usr/bin/env python
# vim:fileencoding=ISO-8859-1
# 
# USAE Index Maker
# Scot W. Stevenson <scot.stevenson@gmail.com>
# Version 1.0  13. September 2009
# 
# Requires Python 2.5 or later, will not work with Python 3.0 or later
"""Generate the links for the USAE erklärt Index list. Starting with the first
entry given, it creates a template and then follows the next link."""

import urllib 

print "USAE Index Maker"
print "Scot W. Stevenson <scot.stevenson@gmail.com>"
print 
print "WARNING: Umlauts are printed in Unicode 8-Bit (UTF-8)."
print 

currentlink = raw_input("Enter link of first entry to start with: ")
print 
print "=========="
print

while True:
   
    # Make sure we can get the page
    try: 
        page = urllib.urlopen(currentlink)
    except IOError:
        print "Error: Can't access link '%s'" % currentlink
        
    pagecontent = page.readlines()
    nextpagelink = ""

    # Watch for entries with funny names, true colors in link
    if currentlink.count("/zeugs-"):
        print "### WARNING: Possible ZEUGS-Entry ###"

    if currentlink.count("/meta-"):
        print "### WARNING: Possible META-Entry ###"

    for line in pagecontent:

        # Get the title from the header, unless it is a ZEUGS- or a META-entry
        if line[:7] == "<title>" and\
              line.count("ZEUGS") == 0 and\
              line.count("META") == 0:

            titlestring = line[7:-30]
            # We use a lot of colons, so it is worth a test
            titlestring = titlestring.replace("–",":")

        # Get the next page from the header. If we can't find a link to the
        # next page, this means that we've reached the end
        if line[:16] == "<link rel='next'":
            nextpage_start = line.find("href='")+6
            nextpage_end = line.find("' />")
            nextpagelink = line[nextpage_start:nextpage_end]

            # Once we have the next page, we're done with this page
            break

    # Print the formated entry for the index list
    print '<li><a href="%s">%s</a></li>' % (currentlink, titlestring)
    print 

    # If the page didn't have a link to the next page, we're done
    if nextpagelink == "":
        break

    # Otherwise, continue with the next page
    currentlink = nextpagelink

print "=========="
print "All done."

[Korrektur: 2. Oktober 2009: Abkürzung heißt richtig „IANAP“, zuerst gesehen von SH, vielen Dank]

%d Bloggern gefällt das: