senäh

17senäh und so…

Wordpress Logo

PHP, Server & Config, WordPress
02. Jul 2012
Kommentare: 0

Das Grundgerüst des XML-RPC-Scripts

Kategorien: PHP, Server & Config, WordPress | 02. Jul 2012 | Kommentare: 0

Serie: Effizienteres Bloggen mit WordPress dank XML-RPC

So, auf in die erste “richtige” Runde zum Erstellen eines Scripts für den automatischen Upload eines Blogposts. Wie bereits angekündigt arbeite ich für den Aufruf mit Keyboard Maestro (fortan: KM). Für alle, die damit nichts anzufangen wissen: KM ist ein Programm für OS X, mit dem sich wiederholende Aufgaben automatisieren lassen. Das reicht von einfachen Abfolgen von Tastenkombination über Bildbearbeitung und Spielereien mit der Zwischenablage bis hin zur Aktivierung verschiedener Skripte. Letzteres werden wir benutzen. KM ist hierfür nicht zwingend notwendig, dazu weiter unten mehr.

Das KM-Makro in der Übersicht

Schaut euch mal das angelegte Makro an:

Übersicht der Aktionen im KM-Makro

Übersicht der Aktionen im KM-Makro

Es besteht lediglich aus 2 Komponenten: dem Speichern der Zwischenablage, welches nachher unser HTML-Markup für den Blogpost enthalten wird, und dem Aufrufen eines Shell-Scripts.

Voraussetzung ist also an dieser Stelle, dass ihr euren Blogpost fertig geschrieben habt und dieser in HTML-Form in der Zwischenablage liegt. Viele Editoren – egal ob Markdown-basiert oder nicht – haben eine HTML-Export-Funktion an Bord. Den dabei entstehenden Output müsst ihr kopieren. Zur Erinnerung: ich verwende dafür den ⌘⌥C Shortcut in Byword, der mir den HTML-Output direkt in die Zwischenablage schemeißt.

Speichern der Zwischenablage

Wozu die Zwischenablage in einer KM-Variable speichern? Ganz einfach, wir wollen nachher ja irgendwie auf das HTML zugreifen. Die Variablen von KM sind im PHP-Skript über das globale $_SERVER-Array abrufbar. Da meine Variable in KM also temp heißt, sieht die Zuweisung in PHP nachher folgendermaßen aus:

$htmlString = $_SERVER['KMVAR_temp'];

Aufrufen eines Shell-Scripts

Das Shell-Script ruft eigentlich nur das PHP-Script auf, in meinem Fall:

php /Users/Enno/Sites/xmlrpc/index.php

Dadurch wird die Ausführung des Scripts angestoßen.

Alternativen ohne KM

Der Aufruf eines einfachen Shell-Scripts nach vorherigem Setzen einer Variable ist jetzt nicht die große Kunst der Automation. Es sollte also auch ohne KM zu lösen sein. Wichtig ist, die Variable bzw. den HTML-String in das Skript zu bekommen. KM ist an dieser Stelle für mich am einfachsten.

Möglich wäre allerdings auch ein Aufruf über das Terminal, bei dem dann der HTML-String als Argument angehangen wird:

php /Users/Enno/Sites/xmlrpc/index.php "<h1>cooler HTML String</h1>"

Der Zugriff im PHP-Script würde dann so erfolgen:

$htmlString = $_SERVER['argv'][1];

$_SERVER['argv'] enthält alle an das Script übergebenen Argumente. An Index 0 ist dabei der Pfad des Scripts selbst, Index 1 das erste Argument, Index 2 das zweite etc.

Den Aufruf des Terminal-Scripts könnt ihr auf dem Mac über den Automator sicherstellen. Dazu einfach einen Automator-Workflow anlegen und einen Shortcut vergeben. Um zu verstehen, wie ein solcher Workflow/Arbeitsablauf/whatever angelegt wird, schaut mal hier oder hier. Für Windows-People habe ich dahingehend mangels Kenntnissen leider keine Lösung parat. Sollte aber auch unter dem Microsoft’schem Betriebssystem irgendwie machbar sein. Wer Ideen hat, bitte in die Kommentare. Ich nehme sie dann helfenderweise und unter lebenslanger Tributzollung in diesen Blogpost auf ;)

Weitere Vorbereitungen

Jetzt haben wir schonmal sichergestellt, dass der HTML-Output des Blogposts in unserem PHP-Skript landet. Fein :) Was als nächstes ansteht? Metadaten auslesen, konkret: Titel, Kategorien, Tags, Slug und Auszug. Dazu komme ich im nächsten Teil der Serie. Zur Vorbereitung darauf könnt ihr jetzt noch folgendes machen:

  1. index.php anlegen (falls nicht schon erledigt)
  2. Eine Klasse anlegen, die wir in den folgenden Teilen mit ordentlich Code füllen werden.
  3. Die Klasse für den XML-RPC-Austausch inkludieren.

Die XML-RPC-Klasse könnt ihr euch hier herunterladen. Davon ausgehend, dass ihr sie in einen Unterordner (inc) packt, könnte eure index.php so oder so ähnlich aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
require_once 'inc/IXR_Library.php';

class EnnoAutoPost
{
    public function __construct($htmlString)
    {
        // do something
    }
}

$htmlString = $_SERVER['KMVAR_temp'];
$obj = new EnnoAutoPost($htmlString);
echo "fertig";

Es bietet sich an auch die eigene Klasse (in meinem Fall EnnoAutoPost) in den inc-Ordner zu schieben, so dass ihr nur die Einbindung jener Klasse und die unteren 3 Zeilen in eurer index.php habt:

1
2
3
4
5
6
<?php
require_once 'inc/EnnoAutoPost.php';

$htmlString = $_SERVER['KMVAR_temp'];
$obj = new EnnoAutoPost($htmlString);
echo "fertig";

Klar soweit? Nicht? Dann Fragen bitte in die Kommentare. Ansonsten: bis zum nächsten Teil ;)

Autor: Enno

Ich bin Enno. PHP ist mein Ding, aber auch alles Neue rund um die Themen HTML5, CSS3 & Co finde ich interessant. Ich mag es Leuten zu helfen und mein Wissen weiterzugeben. Sollte dir mein Beitrag gefallen haben, lass doch nen Kommentar da oder benutze einen der Social Buttons, um deinen Dank auszudrücken ;)

Kommentare (0)

Für diesen Beitrag wurden Kommentare deaktiviert.