Tipps und Tricks • 22.12.2009, 21:04 Uhr • Kommentare: 16

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

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.
 

16 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 :)

  4. Danke für die Anwei­sung, geht ja ein­fach. Lei­der habe ich noch bei einer auto­ma­ti­schen überg­abe in einer Schleife das Pro­blem das bei eini­gen Posts der Feh­ler kommt das es nicht ange­legt wer­den konnte. Kann es sein das die rpc-xml schnitt­stelle nicht gerade die schnellste ist?

  5. Ja super, genau das was ich gesucht habe um die Bei­träge aus dem alten Blog (Eigen­pro­gram­mie­rung) zu übernehmen…

    Danke

  6. So ja ich schon wie­der…
    Anfangs hat das super geklappt… 21 Arti­kel wur­den über­nom­men… Aber der Rest ist angeb­lich „32700 : parse error. not well for­med“ warum das auf einmal?

    ‘date_created_gmt’ => new IXR_Date($zeit)

    führ ich aus… wie gesagt hat auch Anfangs funktioniert…

  7. Ich hab mitt­ler­weile her­aus­ge­fun­den das es wohl am text liegt… wenn ich jetzt rich­tig bin wenn ich richtg bin ist das pro­blem die html tags bzw > und <

    (Nur als Info falls das irgend­wann noch jemand bemerkt…
    und ich meld mich wahr­schein­lich wie­der wenn ich das hin­be­kom­men habe)

  8. und \ macht der auch pro­bleme (zumin­dest UTF-8)

    so wie mach ich ne tabelle ohne html?
    oder wie benutz ich dann fett und sowas?

  9. zwei­mal \n macht der auch nicht hin­ter­ein­an­der… Also im prin­zip ne suber schnitt­stelle, wenn ich nicht meine pro­bleme damit hätte…

  10. Ich kann dein Pro­blem irgend­wie nicht so ganz nach­voll­zie­hen. Ich schreibe hier im Blog über ein Script die letz­ten Links von Delicious.com auto­ma­ti­siert in einen neuen Artikel.

    Das funk­tio­niert bei mir über fol­gen­des Script: https://gist.github.com/826691

    Bei mir ist also mas­sig HTML im Bei­trags­feld. Oder ver­stehe ich dich falsch?

  11. Every one admits that men’s life seems to be not very cheap, howe­ver we need cash for various issues and not every one gets enough cash. Hence to get fast loan or just car loan will be a pro­per way out.

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