Wikibooks auf dem Kindle lesen

Veröffentlicht am
Wikibooks auf dem Kindle

Wikibooks auf dem Kindle

Vor ein paar Tagen habe ich euch ja schon ein bisschen über mein neues Spielzeug, ein Kindle der aktuellen Generation, geschrieben. Und auch darüber, wie ihr mit Calibre News aus dem Internet abrufen und auf euren E-Reader übertragen könnt. Nun soll es um eine weitere interessante Möglichkeit gehen, den E-Reader mit Inhalt zu füttern.

Diesmal wollen wir Bücher aus dem Vorrat von Wikibooks herunterladen und aufbereiten.

Für diejenigen von euch, denen Wikibooks noch nichts sagt: Wikibooks ist ein Projekt der Wikimedia Foundation, die auch das allseits beliebte Wikipedia betreibt. Und wie Wikipedia läuft auch Wikibooks auf der eigenen Wiki-Plattform MediaWiki. Ziel ist aber keine Enzyklopädie, sondern das gemeinsame Verfassen von Sach- bzw. Fachbüchern.

Unter den zahlreichen Büchern im deutschen Bereich sind natürlich einige Bücher, bei denen man wohl eher mit dem Kopf schüttelt als dass man den Wunsch verspürt das Ding zu lesen. Auch kann man Bücher finden, deren Qualität nicht sehr überzeugend ist oder die noch sehr unvollständig sind.
Trotzdem habe ich schon das ein oder andere Buch für mich entdeckt – und sicherlich ist auch etwas für euch dabei. Hat man nun ein Buch gefunden, stellt sich die Frage, wie man es auf das Kindle (bzw. den E-Reader deiner Wahl) bekommt.

Gehen wir in etwa so vor…

Zwar bietet Wikibooks hier eine eigene Funktion an, um Bücher zu exportieren, aber damit bin ich so gar nicht warm geworden.
Erstens muss man sich zunächst ein Buch zusammenstellen. Das bedeutet, man kann nicht einfach ein vorhandenes Buch exportieren, sondern man muss erst einmal alle Kapitel zu einem Buch zusammenfügen. Danach kann man es zwar exportieren, aber ich hatte in der exportierten Version so meine Probleme mit den Verweisen. Also eher Prädikat: unbrauchbar (zumindest für diesen Zweck).

Schließlich habe ich mir ein Python-Skript zusammengeschrieben und es dlwikibook.py getauft. Es erledigt den Download eines Buches. Mit den richtigen Optionen aufgerufen, sollten auch die Bilder korrekt angezeigt werden und die Verweise funktionieren. Nachdem das Buch heruntergeladen ist (in Form von HTML-Dokumenten), kann es in Calibre importiert und dort in ein beliebiges E-Book-Format (z.B. MOBI oder EPUB) konvertiert werden.

Also gut, legen wir los!

Download des Buches

Hierzu darf ich euch zunächst einmal auf die Download-Seite hier auf meinem Blog verweisen, wo ihr das Skript herunterladen könnt. Außerdem solltet ihr dort die allgemeinen Hinweise und die speziellen zu den einzelnen Versionen durchlesen.

Sobald ihr das Skript funktioniert könnt ihr mit dem Argument --help einmal schauen, welche Optionen das Skript so bietet.

Um ein Buch dann passend für den Kindle herunterzuladen, gebt ihr folgendes ein (das Verzeichnis vor dem Skriptnamen, hier ./ müsst ihr natürlich auf eure Gegebenheiten anpassen!):

./dlwikibook.py -cu --book=BUCHNAME

Dabei ersetzt ihr natürlich BUCHNAME durch den Namen des Buches. Heruntergeladen wird das Buch dann in ein Unterverzeichnis namens BUCHNAME unterhalb des aktuellen Verzeichnisses.

Die Optionen -cu bewirken, dass die heruntergeladenen Seiten bereinigt (-c) und die Dateinamen und verweise URL-encoded werden (-u). Ersteres bedeutet, dass beispielsweise die Wikibooks-Umrahmung und die für das Lesen unnötigen Bearbeiten-Links entfernt werden. Und letzteres ist notwendig, weil zumindest der Kindle keine Dateinamen (oder Verweise) mit Sonderzeichen (z.B. irgendwelche Buchstaben mit Akzenten o.ä.) mag.

Buch-Import in Calibre...

Buch-Import in Calibre…

Gut. Wir haben also nun das Buch heruntergeladen. Weiter geht’s in Calibre

Import in Calibre

In Calibre müssen wir nun das Buch importieren. Dazu gibt es in der Toolbar von Calibre per Default den Button ganz links (das rote Buch mit dem Plus-Zeichen darauf). Klickt man darauf öffnet sich ein Select books Dialog, in dem man dann in das Verzeichnis des heruntergeladenen Buches wechselt und dort die Datei index.html auswählt und bestätigt.

Buch-Format: HTML

Buch-Format: HTML

Das war’s schon. Das Buch sollte nun importiert worden sein und somit in der Buchliste auftauchen. Wer will, kann nun noch die Metadaten des Buches anpassen (Rechtsklick → Metadaten bearbeiten).

Bislang liegt das Buch aber nur im HTML-Format vor. Das kann man leicht erkennen, wenn man das Buch einmal anklickt.

Wir müssen es also noch in das Zielformat für den E-Reader umwandeln…

Konvertierung in Calibre

MOBI-Format nach Konvertierung

MOBI-Format nach Konvertierung

Hach ja. Eigentlich habe ich mir das so vorgestellt, dass ich euch hier noch kurz beschreibe, wie ihr die Bücher konvertieren könnt. Aber wisst ihr was? Vergesst das einfach!

Wie ich bemerkt habe, konvertiert Calibre die Bücher nämlich automatisch, wenn sie an den Kindle übertragen werden sollen aber nicht im passenden Format (im Falle von Kindle ist das MOBI) vorliegen.

Also ganz einfach: Kindle einstöpseln und die Übertragung in Calibre starten. Calibre fragt dann nach, ob die Bücher konvertiert werden sollen.

Zum Schluß…

… möchte ich noch sagen, dass Anregungen, Fehlermeldungen, Erfolgsmeldungen usw. zu meinem Download-Skript natürlich willkommen sind. Dazu noch einmal der Verweis auf die Download-Seite des Skripts – lest euch dort bitte zunächst die Hinweise durch.


Dieser Artikel wurde in der/den Kategorie(n) _Anwendungen, Planet-U, Praxis veröffentlicht und mit den Tags , , , , versehen.

15 Kommentare zu Wikibooks auf dem Kindle lesen

  1. Pingback: Read Later: Kindle + Instapaper + Calibre = Fun | ME and my U

  2. Kommentar von Andreas Böttger
    6. Juni 2011, 14:51 Uhr.

    Wie muss man denn den Namen des Buches angeben? Meine Versuche sind bis jetzt fehlgeschlagen. Ich erhalte immer nur ein leeres Verzeichnis ‚ook‘

    • Kommentar von Gerald
      6. Juni 2011, 15:00 Uhr.

      Hallo Andreas, das Buch solltest du mit Hilfe von -b Buchname bzw. --book=Buchname angeben können.
      Falls du weiterhin Probleme haben solltest, dann gib mir bitte mal durch, welches Buch du herunterladen möchtest. Dann kann ich mal versuchen, das Problem bei mir zu analysieren.

      EDIT: oh Mann, ja, ich sehe gerade, dass ich das hier im Artikel wohl falsch geschrieben habe… Sorry dafür. Ich werde das gleich korrigieren.

        • Kommentar von Gerald
          29. Juni 2011, 13:15 Uhr.

          Hmm, dein Link führt zu Wikipedia. Gemeint sind Bücher von der WikiBooks-Seite (www.wikibooks.org) – eine spezielle Bücher-Sammlung der Wikimedia-Gruppe – und dort speziell die aus dem deutschsprachigen Vorrat. Seiten aus Wikipedia kannst du dir höchstens mit Bordmitteln von Wikipedia aufbereiten – aber das ist eben nicht so dolle.
          Ich werde bei Gelegenheit mal sehen, ob man das Skript auch für die Verwendung mit Wikipedia umbauen könnte. Allerdings würde ich da spontan die ein oder andere Schwierigkeit sehen…

  3. Kommentar von Uwe
    7. Juli 2011, 13:03 Uhr.

    Hallo,
    schönes Script das mir gerade noch fehlte. Ich hab das mal an:
    Knotenkunde – Knotenfibel für Outdoor-Aktivitäten
    versucht.
    folgende Argumente wurden übergeben:
    -cu –book=Knotenkunde – Knotenfibel für Outdoor-Aktivitäten
    Leider werden die Bilder nur unvollständig runtergeladen, so das kein Bild wirklich nutzbar ist (es existieren immer nur Dateifragmente, sieht man bei jpegs wo dann nur die ersten 2 Bildzeilen sichtbar sind).
    Leider sind meine Pythonkenntnisse nicht wirklich ausreichend, um das zu korrigieren.

    • Kommentar von Gerald
      7. Juli 2011, 13:13 Uhr.

      Hallo Uwe,
      ich werde das in den nächsten Tagen mal bei mir ausprobieren und mal sehen, was ich da ändern muss. Etwas Zeit werde ich aber brauchen…
      Danke dir jedenfalls für dein tolles Feedback!

  4. Kommentar von Uwe
    7. Juli 2011, 13:56 Uhr.

    Danke Gerald!

    Ich vergaß die Konfiguration:
    WinXP
    T-DSL Standard
    Python 2.7.2.

    PS: Noch zur Info: Unter dem 3.2. RC1 von Python läuft das Script nicht. Außerdem habe ich auf einem Rechner noch Python 2.5 drauf, da läuft es auch nicht (will ich aber nicht ändern, da sonst mein selbstgebastelter Vokabelkonverter nicht mehr läuft).

  5. Kommentar von Uwe
    7. Juli 2011, 15:55 Uhr.

    Habs selbst gelöst:
    ursprüngliche Funktion:
    # —————————————————————————–
    # Downloads an image from the given URL to the given filename
    # —————————————————————————–
    def download_image(url, file_name):
    from urllib2 import Request, urlopen, URLError, HTTPError
    req = Request(url, headers={„User-Agent“ : „Magic Browser“})
    try:
    f = urlopen(req)
    fl = open(unquote(file_name), „w“)
    fl.write(f.read())
    fl.close()
    except HTTPError, e:
    print „HTTP Error: „, e.code, url
    except URLError, e:
    print „URL Error: “ + e.reason, url

    # —————————————————————————–
    geändert in:

    # —————————————————————————–
    # Downloads an image from the given URL to the given filename
    # —————————————————————————–
    def download_image(url, file_name):
    from urllib2 import Request, urlopen, URLError, HTTPError
    from urllib import urlretrieve
    from urllib import FancyURLopener
    class MyOpener(FancyURLopener):
    version = ‚Opera/9.25 (Windows NT 5.1; U; en)‘

    req = Request(url, headers={„User-Agent“ : „Magic Browser“})
    try:
    myopener = MyOpener()
    myopener.retrieve(url,unquote(file_name))

    except HTTPError, e:
    print „HTTP Error: „, e.code, url
    except URLError, e:
    print „URL Error: “ + e.reason, url

    # —————————————————————————–

  6. Kommentar von Uwe
    7. Juli 2011, 16:16 Uhr.

    Nachtrag:
    Obwohl die HTML Datei im Webbrowser odrdentlich angezeigt wird, zeigt Calibre in dieser leider trotzdem die Bilder nicht an. Aber mit dem Mobipocket Creator lassen sich durch Kopiererei beim Build diese in das Ebook integrieren.
    Mir reicht das fürs Erste, bald geht es in die Ferien.
    Gruß und Dank,
    Uwe

    • Kommentar von Gerald
      7. Juli 2011, 16:20 Uhr.

      Danke dir für die Infos, Uwe. Ich werde mir das, wie gesagt, demnächst einmal ansehen und dann sicher bald eine neue Version veröffentlichen.
      Gruß, Gerald

  7. Kommentar von Johannes
    31. Oktober 2011, 20:36 Uhr.

    Hi,

    zunächst einmal danke für das Skript. Ich habe leider wenig Ahnung von Linux, würde mir aber gerne dieses Buch laden: http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Inhaltsverzeichnis

    Ich habe soweit Python installiert, BeautifulSoup kopiert und dein Skript ausgfeführt. Leider werden bei mir immer nur leere Ordner erstellt. Was muss ich denn bei „BUCHNAME“ angeben? Den Link oder wirklich nur den Namen? Beides funktioniert leider nicht…

    • Kommentar von Gerald
      1. November 2011, 08:00 Uhr.

      Du musst tatsächlich nur den Buchnamen angeben, der bei dir allerdings „C++-Programmierung“ wäre, nicht „C++-Programmierung/Inhaltsverzeichnis“.
      Trotzdem funktioniert das Skript mit dem Buch nicht. Schuld daran ist das „+“ im Buchnamen. Ich werde sehen, dass ich den Fehler korrigiert bekomme. Allerdings werde ich dafür etwas Zeit brauchen. Du hörst von mir. Danke dir für den Hinweis, Johannes!
      Gruß, Gerald

  8. Kommentar von Johannes
    25. Dezember 2011, 14:35 Uhr.

    Hi Gerald,

    danke für deine Antwort. Leider habe ich sie bis heute übersehen. Du kannst dich nach wie vor gerne melden, wenn du eine Lösung findest.

    Beste Grüße,

    Johannes

  9. Kommentar von Claas
    9. Februar 2013, 01:56 Uhr.

    Ich hatte stets folgenden Fehler:

    Traceback (most recent call last):
    File „./dlwikibook.py“, line 387, in
    book_links = retrieve_book_links()
    File „./dlwikibook.py“, line 140, in retrieve_book_links
    return [link for link in soup(„a“) if is_book_link(link)]
    File „./dlwikibook.py“, line 120, in is_book_link
    href = str(dict(link.attrs).get(„href“))
    UnicodeEncodeError: ‚ascii‘ codec can’t encode character u’\xe4′ in position 39: ordinal not in range(128)

    …und habe ihn wie folgt beheben können:

    def is_book_link(link):
    global book_name, encoding
    href = unicode(dict(link.attrs).get("href")).encode(encoding)
    return is_book_href(href, "")

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>