Skip to content

S9Y Microblogging per Mail auf Uberspace

In meinem Artikel "Projekt:Serendipity als Microblog" schrieb ich bereits, was alles schon vorhanden ist, um mit Serendipity ein Microblog (vor allem als Ersatz für Posterous) aufzusetzen. Nun habe ich einen weiteren Baustein für mich gelöst, den ich als Herausforderung bereits im s9ycamp Podcast erwähnte: Wie kann man das PopFetcher Plugin so aufrufen, dass die Artikel zeitnah eingelesen werden, aber nicht ständig nachgefragt werden muss?

Für mein Blog auf Uberspace habe ich es nun erfolgreich konfiguriert. Diese Lösung funktioniert aber auf jedem Provider, bei dem man die EMai Postfächer per qmail Dateien konfigurieren kann. Man kann sogar mit einem Uberspace Konto auch Blogs auf diese Weise befüllen, die selbst gar nicht auf Uberspace gehostet sind.

Einrichten eines post@domain EMail Kontos

Zuerst erstellt man ein eigenes Email Konto auf seinem Uberspace, das nur dazu benutzt werden soll, Emails für das Blog zu empfangen. Ich benutze auf Uberspace vmail, also erstelle ich mir den Account "post" mit 

vadduser post

Danach lege ich im home Verzeichnis die Datei .qmail-post mit folgendem Inhalt an:

|/usr/bin/vdeliver

Somit ist der EMail Account für das Blog eingerichtet

Einrichten des popfetcher Plugins

Beim Popfetcher Plugin wird der eben eingerichtete Account als EMail Account konfiguriert, der vom PopFetcher Plugin abgerufen werden soll, der Rest der Einstellungen wird nach Gusto konfiguriert. Ich habe mir z.B. eine eigene Microblogging Kategorie erstellt, die ich gesondert darstelle. Man kann einrichten, dass das Plugin die Artikel in dieser Kategorie ablegt.

Die Plugin Methode sollte vorerst auf "Intern" eingestellt bleiben, was bewirkt, dass unter dem Seitenmenü "Einträge" ein Unterpunkt namens "Popfetcher" erscheint. Auf diese Weise kann man nun das Plugin erst einmal gefahrlos testen.

Man schickt also eine Testmail an das neue Postfach post@domain, falls man einen festen Absender konfiguriert hat, muss natürlich von diesem Absender geschickt werden. Danach kann man das Menü "Popfetcher" anklicken und nachschauen, ob das Plugin die neue Mail abrufen und einen Artikel daraus erstellen kann. Die Meldungen sind hier recht eindeutig, es wird z.B. gesagt, wenn das Plugin gar nicht auf den Mail Account zugreifen kann, wenn der Absender nicht 100%ig stimmt usw.

Wenn man mit dem Resultat zufrieden ist, kann man dazu übergehen, das Plugin "scharf zu schalten".

Popfetcher Plugin scharf schalten

Die "Plugin Methode" wurde bisher auf "intern" geschaltet, was bewirkt, dass man das Abrufen der Mails durch das Plugin manuell ausführen muss. Das ändern wir nun: Für "Name für externen Aufruf" geben wir nun in der PopFetcher Konfiguration etwas sinnvolles und nicht zu leicht für Bots zu findendes ein, sagen wir "hallowelt". Danach schalten wir das Plugin auf "Extern".

Dies bewirkt, dass das Plugin Mails vom konfigurierten Account dann abholt, wenn die url http://deineblogurl/index.php?/plugin/hallowelt aufgerufen wird. Und jetzt kommt der eigentliche Trick: Wir gehen noch mal in die .qmail-post Datei und fügen eine weitere Zeile hinzu:

|/usr/bin/vdeliver
|wget --quiet -O /dev/null http://deineblogurl/index.php?/plugin/hallowelt

Qmail Dateien werden zeilenweise abgearbeitet. Obige Konfiguration bedeutet also: Wenn eine Mail für post@domain eintrifft, dann stelle sie wie üblich in das entsprechende Postfach zu. Wenn das erfolgt ist, rufe danach über wget die externe Popfetcher URL auf.

Alternativ kann man auch curl zum Triggern des PopFetcher Plugins benutzen. Bei dem folgenden Aufruf wird nur der Header der Seite abgerufen anstatt der kompletten Seite, was viel schneller geht und völlig ausreicht für den Trigger:

|/usr/bin/vdeliver
|curl --head --silent -L http://deineblogurl/index.php?/plugin/hallowelt -o /dev/null

Der Popfetcher wird hier also nur aufgerufen, wenn eine Mail an post@domain eingetroffen ist, dann allerdings sofort! Das  ist doch schon verdammt Posterous like, oder? :-D

P.S.: Ich kam kurzzeitig ins grübeln, ob der wget Aufruf in der qmail irgendwelche Lastprobleme auf dem Uberspace Server produzieren könnte. Antwort:

Trackbacks

walterm.wordpress.com

walterm.wordpress.com am : Links « Frackmente

"Links « Frackmente" vollständig lesen
Teile des Ganzen Home About Links 05 Sep 2012 Hinterlasse einen Kommentar by walterm in uncategorized PouchDB is a pocket-sized database An introduction to Html5 application building features BinaryJS[..]

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Janek

Janek am :

Geht das nicht auch über das CLI? Ich finde wget hier immer etwas unelegant.

Zumindest würde ich die Output-Datei aber per per wget -O /dev/null http://…/ ins Nirvana leiten, dann werden da keine unnötigen temporären Dateien angelegt.

Janek

Janek am :

Beim CLI ergeben sich wohl Probleme mit den GET-Parametern, die ja HTTP-spezifisch sind. Da müssten wohl erst die Command-Line-Args ins $_GET-Array geparst werden. Für dieses Plugin wäre das aber auf jeden Fall ein tolles Feature.

Skripte, die auf derselben Maschine liegen, übers Internet per wget aufzurufen ist immer ein wenig von hinten durch die Brust ins Auge. Ein großer Umweg, mit entsprechend zusätzlichem Fehlerpotential.

Grischa

Grischa Auf Twitter lesen: am :

Ach.. Mit CLI meinst Du ein Kommandozeilen Tool, das irgendwie Funktionalität vom Plugin hat? Hmm.. Grübel..

Das wird nicht ganz so leicht, denn das Plugin funktioniert ja im Serendipity Context, also im webbased Context. Ich wüsste jetzt nicht, wie ich das für die Kommandozeile zur Verfügung stellen könnte. Es wird ja Funktionalität aus S9Y benötigt, die Artikel speichert und Events abfeuert (Nachbearbeitung der Artikel durch weitere Plugins).

Zusätzlich hat diese Methode noch den Charme, dass man auf diese Weise beliebige Blogs triggern kann, eben auch solche, die gar nicht bei dem Provider der EMail gehostet sind.

Falls ich Dich immer noch falsch verstehe, freue ich mich über mehr Input. Fände es in der Tat auch schick, wenn ich auf meinem Uberspace einen direkteren Weg gehen könnte als den Aufruf über Internet Verbindung.

Janek

Janek am :

Jup, CLI = Command Line Interface, d.h. die kommandozeilenschnittstelle von PHP.

Viele webbasierte Tools bieten hierfür ein Extra-CLI-Skript an, das völlig autark läuft, aber entsprechende Funktionalitäten der Hauptanwendung einbindet.

Es spricht ja auch generell nichts dagegen, wget zu nutzen wenn es der beste Weg ist, nur wäre es in diesem Fall halt auch praktisch, das direkt auf über das CLI laufen zu lassen. Das ist in der Regel immer der bessere Weg wenn das PHP-Skript auf derselben Maschine liegt, da eine ganze Menge an Fehlerquellen wegfällt. Es fällt z.B. der gesamte DNS-Stack weg, es besteht keine Abhängigkeit zur Netzauslastung, der Overhead der durch die Verarbeitung durch den Webserver entsteht, fällt ebenfalls weg uvm.

Grischa

Grischa Auf Twitter lesen: am :

PHP CLI Schnittstelle zu webbasierten Anwendungen? :-O

Okay, *das* klingt interessant, danke für den Hinweis! Da muss ich mich wohl mal einlesen, da lässt sich bestimmt auch noch ganz anderes mit zaubern. Aber hier würde sich das in Tat *sehr* anbieten.

Janek

Janek am :

Nicht ganz so unüblich, wie du vielleicht denkst.

Insbesondere große Webanwendungen bringen nicht selten z.B. CLI-Wartungsskripte mit, die regelmäßig per Cron ausgeführt werden.

Das hat (neben dem bereits Genannten) auch noch den Vorteil, dass für das CLI eine andere php.ini gilt. Das heißt, man kann hier z.B. die max_execution_time or das memory_limit deutlich höher setzen ohne damit in irgendeiner Weise den webbasierten Teil zu beeinflussen.

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Dieses Blog erlaubt Dir, Audio Kommentare über audioboo.fm hinzuzufügen. Erstelle einen neuen Boo und gib hier den Link auf die Seite Deines Boos ein.
record
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
(Bedingung: 1 Kommentare geschrieben)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
tweetbackcheck