Monday, November 15, 2010

studentconsult-downloader.pl

Im Bekanntenkreis gab es wieder das Interesse an einem kleinen Script, was natürlich wieder lästige Arbeit automatisieren soll. Ich fand die Aufgabe auch nicht gerade uninteressant und so habe ich mich einfach mal dran gesetzt. Diesmal jedoch kein Python-Code, nein, Perl. (In letzter Zeit habe ich auch dessen Vorzüge kennen gelernt.)

Das Perl-Script ist in der Lage von der Seite studentconsult.de Bücher herunterzuladen. So weit mir bekannt ist, kann man sich auf dieser Seite wohl für das Studium interessante Bücher kaufen und diese online lesen. Prima. Ist eben etwas blöd, wenn man die Dinger auch offline lesen will. Das ist nicht möglich, außer man speichert sich die Seiten per Hand. Nun, keine zufriedenstellende Lösung.

Ich sage es vorher: Das Script ist nichts weiter als ein schneller Hack. Es funktioniert, zumindest so, wie ich es getestet habe. Es gibt viele Verbesserungsmöglichkeiten und auch den Quelltext könnte man noch etwas schöner machen. Es läuft wie immer: Das Projekte ist freie Software, jeder kann sich bedienen. Wenn sich jemand meldet, wäre ich auch bereit weitere Änderungen vorzunehmen.

Als erstes installiert man sich Perl und curl. Perl dürfte zur Standardinstallation zählen, curl eher nicht.

sudo apt-get install perl curl.

Jetzt fix das Script holen und ausführbar machen.

curl -O 'http://dl.dropbox.com/u/1996083/Projects/studentconsult-downloader/studentconsult-downloader.pl'
chmod +x studentconsult-downloader.pl

Das Script benötigt noch ein paar Informationen. Man öffnet zunächst den Browser, loggt sich ein und öffnet das Buch, welches man herunterladen möchte. In der Adresszeile findet man einen jetzt einen Parameter, welcher wie eine ISBN-Nummer aussieht (und vermutlich auch eine ist). Diese Nummer wird benötigt (und zwar mit den Bindestrichen!). Außerdem braucht man die Cookies. Im Firefox geht das mit über Bearbeiten > Einstellungen > Privatsphäre > Cookie anzeigen (ist bei diversen Firefox-Versionen anders). Dort sucht man nach studentconsult.de und sucht sich die Cookies CFID, sowie CFTOKEN (Siehe Bild).

Jetzt editiert man das Script und findet im ersten Abschnitt 3 Zeilen, welche mit our beginnen:

our $cookie_cfid    = '';
our $cookie_cftoken = '';
our $isbn           = '';

In diese Variablendefinitionen trägt man die oben genannten Werte in die einfachen Anführungszeichen ein. Das war’s. Das Script einfach mit folgendem Befehl starten:

./studentconsult-downloader.pl

Das Unterfangen dauert nun eine ganze Weile. Wenn man wieder eine Eingabe-Prompt zu Gesicht bekommt und das Script keine Meldungen ausgegeben hat, dann ist es fertig. Die selbst generierte Übersichtsseite findet man unter /tmp/studentconsult/index.html.

Bevor man das Script ein weiteres Mal ausführt (z.B. mit einer anderen Buch-ISBN), dann muss man vorher den Ordner /tmp/studentconsult/ löschen!

Vielleicht nützt das Script noch jemanden. In einem solchen Falle würde ich mich über eine kleine Rückmeldung freuen. Wer Anregungen hat, darf sich wie immer gern melden. Man kann noch viele Dinge machen, z. B. könnten die Seiten mit CSS gestylt werden. Außerdem sind die Frames nicht besonders schick und Bilder werden noch gar nicht verarbeitet. (Man kann sich aber auch einfach mal den Seitenquelltext vom Online-Portal anschauen… Der originale Code ist auch weniger als gar nicht standardkonform ;) Ich bin erstaunt, dass ein Browser überhaupt so schlau ist, daraus eine darstellbare Seite gebacken zu bekommen…)

Viel Spaß damit.

6 comments:

  1. Das is genau das wonach ich gesucht habe,
    Vielen Dank

    ReplyDelete
  2. Hallo Stefan, ich wollte fragen, ob es eine Möglichkeit gibt das alles als Win 7 User zu machen...was ich vorschlagen würde, wäre ein Script, dass man unter "Greasemonkey" (> Firefox Addon) nutzen kann, so dass man nichts installieren muss und die Seiten, so "abgreifen" und speichern kann.
    Würde mich über ne kurze Antwort von Dir echt freuen!

    Gruß, Afaf

    ReplyDelete
  3. Ich freue mich natürlich über das Interesse.

    Wie immer gibt es viele Möglichkeiten. Es ist auch nicht bei diesem einen Downloader geblieben und so habe ich mir auch angesehen, wie andere so ein Problem angehen. In der Tat scheint sich Greasemonkey zu lohnen. Ich finde es jedoch unpraktisch, da man mit Greasemonkey allerhöchstens die Links isolieren kann. Zum Downloaden benötigt man wieder ein anderes Plug-In (FlashGot, ...). Außerdem liegen die Inhalte hier auf mehreren Seiten, ich weiß nicht, ob das mit Greasemonkey einfach handhabbar ist.

    Diese ganzen Gründe haben mich vorerst dazu gebracht, mir Greasemonkey _nicht_ näher anzusehen.

    Vielleicht ist das Script auch unter Windows lauffähig? Man müsste mit Sicherheit ein paar Sachen ändern, aber Perl und Curl laufen auch auf Windows. Windows gehört aber nicht zu meiner Lieblingsplattform ;)

    Das Downloaden mit dem Script funktioniert übrigens sehr schlecht. Es fehlen manchmal Absätze, da diese nicht erkannt werden. Ich übernehme nur bekannte Tags, da ich ansonsten auch das gesamte JavaScript mit übernehmen würde und die Seite ziemlich schlecht aufgebaut ist. Es war für mich lediglich ein Test, wie ein solcher Downloader prinzipiell funktionieren könnte (Login, Sammeln der Informationen, Massendownload).

    ReplyDelete
  4. Hi Stefan,

    schade, dass es keine "Greasemonkey-Version" deines coolen Scropts geben wird!!!
    Ich werd versuchen Perl+cURL auf einer virtuellen Linux-Maschine zu installieren...habe im Internet viele sehr gute eBooks von Elsevier-eBooks gefunden und frage mich natürlich, wie die das gemacht haben...möchte meine Studentconsult-eBooks auch gerne als PDF offline dabei haben. Falls es ein Update deines Scripts mal geben sollte oder auch ein völlig neues Script, würde ich mich natürlich SEHR darüber freuen!
    Kann man dir auch e-mailen? Wollte dich als Programmieranfänger einiges fragen!

    Gruß, Afaf

    ReplyDelete
  5. Das Script spuckt leider keine PDF aus. Ich frage mich gerade selbst, warum das Script nicht automatisch mit meiner Dropbox abgeglichen wird. Ich werde in den kommenden Tagen das Script erneut auf der Dropbox-Projekte-Seite verfügbar machen.

    Das Ergebnis ist leider eher weniger zufriedenstellend.

    Wie immer fehlt bei solchen Sachen einfach enorm die Zeit. Die Abiturzeit ist zwar ganz lustig sonst, aber für irgendwelche Programmiersachen, welche noch bis ins letzte Detail geplant und elegant umgesetzt sind, fehlt einfach die Zeit.

    Vermutlich wird das Ergebnis eher etwas ernüchternd ausfallen. Für das drüberschauen, falls gerade keine Internet-Konnektivität besteht, reicht es vielleicht trotzdem.

    ReplyDelete
  6. Ja, ich denke fürs "drüberschauen" wird`s hoffentlich reichen. obwohl ich immer noch hoffe, dass du doch noch ein neues Script rausbringen wirst! ;-)

    Gruß,

    Afaf

    ReplyDelete