Über Sinn oder Unsinn eines Programms zum Speichern von Bildern möchte ich nicht urteilen. Aber ein paar Tipps zum Quelltext, der eigentlich schon okay ist.
`import ctypes` ist unnötig. Das Modul `string` ist deprecated, schon seit vielen Jahren sind `tolower` und `strip` Methoden von String-Objekten. Dass das Programm dank der Aufrufe mit `os.system` und den Pfaden mit `C:\\` unnötigerweise hochgradig Windows-spezifisch ist, muss ich nicht wirklich erwähnen. Der leere String bei `wait=raw_input('')` ist unnötig. Die ganze Zeile ist eigentlich nur unter Windows nötig und ansonsten störend.
Die for-Schleife in Zeile 51 kann einfach `for char1 in nickname:` lauten. Der Test (ein `if` hat übrigens keine Klammern in Python) kann `if char1 in "!?/\\$'\"<>..."` lauten. Und was soll die `1` im Namen? Die Liste der Zeichen ist schon wieder Windows-spezifisch. Ich weiß so aus dem Stegreif nicht, ob man plattformunabhängig in Python prüfen kann, ob ein Dateiname gültig ist. Java könnte es.
Konstanten (wie `baseurl`) sind eigentlich eine gute Idee, doch wenn, dann besser am Programmanfang und den Namen in als Konvention in GROSSBUCHSTABEN. Übrigens, es freut bestimmt netlog-User, dass der Betreiber sie vom User gewählten privacy-Einstellungen bzgl. des Bilds nicht korrekt umsetzt.
Ressourcen wie Dateien oder auch URLs besser mit `with` öffnen, dann kann man auch das Schließen nicht vergessen. Jetzt ist nicht schön, dass das `exit` aus dem Programm haut, wenn `f.close()` noch nicht erfolgt ist (nicht schlimm, dass Betriebssystem räumt für einen auf, aber schlechter Stil IMHO).
Aus `raw_input` schließe ich Python 2.x. Da ist `print` ein Befehl, keine Funktion und braucht keine Klammern. Und lasse auch die `;` weg. Das hier ist kein C{++,#} oder Java.
Der Test auf `post==-1` (Leerzeichen rechts und links von Operatoren dankt einem jeder Leser) sollte stattfinden, bevor `link` berechnet wird. Vielleicht wäre hier auch ein regulärer Ausdruck einfacher. Insbesondere, wo später noch auch `.jpg` gesucht wird.
Und `==True` geht GAR NICHT. So überhaupt nicht. Boolsche Werte nochmals mit einem Boolschen Wert zu vergleichen (Zeile 100) ist stottern. Wo will man aufhören? `if (((a == 5) == True) == True) == True`? Oder noch ein `==True`? In Zeile 20 und 22 war es doch richtig.
PS: Statt 114 Zeilen Python hätte man auch "einfach" (für Posterous) folgendes machen können
Code: Alles auswählen
curl -O `curl -s -L http://blog.posterous.com/ | grep -m 1 -o -P '(?<=src=")http://files.posterous.com/user_profile_pics/[^"]*'`
Es richtig in Python zu machen wird aber schon wieder schwerer, denn man müsste eigentlich das Encoding beachten und je nachdem, ob das wohl XHTML oder nur HTML ist, im ersten Fall noch mal das XML dekodieren. Da nimmt man dann besser einen HTML-Parser wie mal ihn in lxml (muss man leider als Paket nachinstallieren) findet. Dafür kann man dort dann auch ählich wie bei JQuery mit CSS-Selektoren nach Dingen im DOM suchen.