Word­Press stellt neben dem WordPress-Backend noch eine wei­tere Admi­nis­tra­ti­ons­mög­lich­keit zur Ver­fü­gung: das XML-RPC Inter­face. Es han­delt sich hier­bei um eine Schnitt­stelle, die die Kom­mu­ni­ka­tion zwi­schen einer exter­nen Anwen­dung und einem WordPress-Blog ermög­licht. Die Blo­ge­di­to­ren Mar­sE­dit und Win­dows Live Wri­ter machen bei­spiels­weise davon Gebrauch.

Mit ein­fa­chen Mit­teln kann man diese Schnitt­stelle auch mit einem PHP Script anspre­chen. So lässt sich ein Blog­ein­trag hin­zu­fü­gen oder beste­hende Ein­träge aus­le­sen und wei­ter­ver­ar­bei­ten. Freund­li­cher­weise lie­fert Word­Press eine fer­tige Klasse für den Zugriff gleich mit. Man muss diese also nur mit dem pas­sen­den Befehl füt­tern und bekommt das gewünschte Ergeb­nis zurück.

Im fol­gen­den Bei­spiel beschreibe ich kurz wie man einen Bei­trag ver­fasst und per XML-RPC über­mit­telt. Zuerst ein­mal muss man die Schnitt­stelle im Blog akti­vie­ren. Dafür setzt man im WordPress-Backend unter Ein­stel­lun­genSchrei­ben einen Haken bei „Word­Press, Movable Type, Meta­We­b­log und Blog­ger XML-RPC Schnitt­stelle akti­vie­ren“.

Über den Befehl require() bin­det man die XML-RPC Klasse aus dem WordPress-Unterverzeichnis wp-includes ein. Als Para­me­ter wird die URL zur Schnitt­stel­len­da­tei an das erstellte Objekt über­ge­ben. Die URL setzt sich aus der kom­plet­ten Adresse des Blogs und der Datei xmlrpc.php im Wur­zel­ver­zeich­nis zusammen.

1
2
3
4
<?php
// Klasse für XML-RPC Schnittstelle einbinden und aufrufen
require('./wordpress/wp-includes/class-IXR.php');
$rpc = new IXR_Client('http://example.com/wordpress/xmlrpc.php');

Über die Varia­ble $post wer­den alle Daten des Bei­trags über­ge­ben. Tags wer­den durch Kom­mata getrennt, Kate­go­rien müs­sen in einen Array.

5
6
7
8
9
10
11
12
// das Post construct:
// Metadaten
$post['title'] 		= 'Beitragstitle';
$post['categories'] 	= array('Kategorie 1', 'Kategorie 2');
$post['mt_keywords'] 	= 'tag1, tag2, tag3';
 
// Posttext
$post['description'] 	= 'Hier könnte Inhalt stehen';

Es kön­nen noch wei­tere Para­me­ter mit der $post–Varia­ble über­ge­ben wer­den. Eine Auf­lis­tung ist im Word­Press Codex zu fin­den. Der Inhalt darf natür­lich über meh­rere Zei­len gehen und mit HTML gestal­tet werden.

Über­mit­telt wer­den die Daten über den Befehl query() der Klasse. Der Erste Para­me­ter ist der Name der gewähl­ten Methode. Die Blog ID ist in der Regel 1, Benut­zer­name und Pass­wort müs­sen zu einem Benut­zer pas­sen, dem das Ver­fas­sen von Bei­trä­gen gestat­tet ist. Als vier­tes wird die $post–Varia­ble über­ge­ben und zuletzt lässt sich steu­ern ob der Arti­kel ver­öf­fent­licht (true) oder als Ent­wurf (false) abge­legt wer­den soll.

13
14
15
16
17
18
19
20
21
// query
$status = $rpc->query(
    'metaWeblog.newPost',	// Methode
    1,				// Blog ID, in der Regel 1
    'admin',   			// Benutzer
    'password',			// Passwort
    $post,			// Post construct
    true			// Veröffentlichen?
);

Abschlie­ßend kann auf Erfolg geprüft wer­den und gege­be­nen­falls eine Feh­ler­mel­dung aus­ge­ge­ben werden.

22
23
24
25
26
27
28
29
30
// Ergebnis überprüfen und ggf. eine Fehlermeldung ausgeben
if(!$status) {
    echo 'Error ('.$rpc->getErrorCode().'): '.$rpc->getErrorMessage();
    exit;
}
 
// Sonst: ID des neuen Posts ausgeben
echo 'New Post ID: '.$rpc->getResponse();
?>

Läuft alles feh­ler­frei durch, wird die ID des neu erstell­ten Bei­trags zurück­ge­ge­ben. Mit dem fer­ti­gen Script kann man jetzt bei­spiels­weise regel­mä­ßig Inhalt von einer Seite abgrei­fen, auf­be­rei­ten und als Blog­ein­trag ver­öf­fent­li­chen. So las­sen sich —  cron­job vor­aus­ge­setzt — wöchent­li­che Link­lis­ten von deli­cious erstellen.

Wei­ter­füh­rende Informationen

Book­mark:

  • email
  • Twitter
  • StumbleUpon
  • Identi.ca
  • Facebook
  • MySpace
  • LinkedIn
  • FriendFeed
  • Digg
  • Yigg
  • Reddit
  • del.icio.us
  • Mixx
  • Google Bookmarks
  • Live
  • MisterWong
  • blogmarks
  • Tumblr
  • Posterous
  • Netvibes
  • Ping.fm

Tags, RSS-Feed & Trackback:

Tags: , , , , , | Der Artikel wurde am 22. Dezember 2009 gegen 21:04 Uhr von Felix Triller verfasst und unter „Tipps und Tricks“ abgelegt. Sie können gerne einen Kommentar schreiben. Für einen Trackback benutzen Sie bitte diesen Link. Wenn Ihnen gefällt, was Sie hier lesen, abonnieren Sie doch meinen RSS-Feed.
 

6 Kommentare

  1. Dominik sagt:

    Vie­len Dank für den hilf­rei­chen Bei­trag. Ich konnte lei­der im Word­press Codex keine Infor­ma­tio­nen zu den wei­te­ren $post Para­me­tern fin­den. Könn­test du mir viel­leicht die URL sagen? Ich hab unter ande­rem auch hier nach­ge­se­hen: http://codex.wordpress.org/XML-RPC_wp

  2. Dominik sagt:

    Bzw. gerade erst gese­hen, du hast dort ja einen Link ver­öf­fent­licht: http://codex.wordpress.org/XML-RPC_wp#wp.newPage Die­ser ver­weist zwar auf eine ent­spre­chende Seite — aber die Angabe „cate­go­ries“ ist dort z.B. nicht definiert.

    • Der Codex ist an die­ser Stelle lei­der etwas dürf­tig. Ich habe Tags und Cate­go­ries von irgend­ei­ner ande­ren Seite, die ich damals ergoo­gelt habe. Der Rest sollte unter dem Link auf­ge­führt sein.

      Google mal ach „metaWeblog.newPost“, da fin­den sich in eini­gen Foren noch wei­tere Fel­der. Im Codex ist halt lei­der nur die new­Page ange­ge­ben und Sei­ten unter­schei­den sich ja ein wenig von Posts.

      • Dominik sagt:

        Hi danke für deine Ant­wort. Konnte in Foren zwar eini­ges ähnli­ches fin­den. Mir hat aber nichts wirk­lich wei­ter­ge­hol­fen. Die Doku ist hier echt mise­ra­bel. Ich hab es nun genau ein­mal so gemacht, wie du. Nur bekomm ich immer fol­gende Feh­ler Excep­tion von mei­nem Word­press XML RPC Ser­ver zurück „Error (403): Fal­sche Benutzer/Passwort-Kombination.“. Dabei habe ich die Daten mehr­mals geprüft. Ps. Dein Web­sei­ten­url ist feh­ler­haft und somit hast du in fast jedem dei­ner Kom­men­tare ein Link zu ner 404 Seite. Ein „l“ fehlt ;) .

  3. Dominik sagt:

    Hab es nun soweit, dass alles funk­tio­niert. Bei dem Pass­wort hatte mir der Fire­fox statt des I ein klei­nes L ange­zeigt. Wenn ich aller­dings ein Ver­öf­fent­li­chungs­da­tum ange­ben will, kommt fol­gende Feh­ler­mel­dung: „Error (-32700): parse error. not well for­med“. $post[’dateCreated’] = ‘2010 – 03-04′;. Ich ver­stehe nicht was der hat. Ist doch ISO 8601 konform… :(

    • Wie for­ma­tierst du denn das Datum? Ich glaube es muss in fol­gen­der Form sein: „2007 – 06-27 00:00:31″. Pro­bier es auch mal mit „date_created_gmt“ als Key.

      Und danke für den Hin­weis mit der URL :)

Einen Kommentar schreiben

Mit (*) markierte Felder sind Pflichtfelder.

Durch das Abschicken eines Kommentares stimmen Sie zu, das der von Ihnen verwendete Name, Ihre E-Mail-Adresse, Ihre URL und Ihre derzeitige IP-Adresse zusammen mit dem Kommentar gespeichert werden. Keine dieser Daten werde ich veröffentlichen oder weitergeben. Weitere Informationen.

Erlaubte Tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

© (cc) 2005-2010 Felix Triller. Made on a Mac, hand-coding XHTML & CSS. Powered by WordPress and all-inkl.com.