Výzva - napojení na XML-RPC wordpressu

Pro toho, kdo si píše svůj blog a používá k tomu některý z offline klientů, jako třeba Windows Live Writer tomu nemůže být cizí, že každý rozumný publikační systém má svoje API rozhraní.

Publikační API rozhraní

Většina API rozhraní, která se v současné době používají u publikačních systémů je založena na XML-RPC volání. Těchto API je definováno hned několik a není výjimkou, že se i vzájemně doplňují. Mezi ty známější tak patří:

  • blogger API
  • MovableType API
  • MetaWeblog API
  • a samozřejmě, své API má i WordPress, který rozšiřuje možnosti MetaWeblog API o definici svých metod

XML-RPC v .net

.net framework neobsahuje ve svých assembly třídu, která by umožňovala volání pomocí specifikace XML-RPC. To ovšem nevadí v případě, že znáte knihovnu XML-RPC.net. Tato knihovna umožňuje velice elegantně a rychle vytvořit nejen klienta, ale také server pro vzdálená volání.

V mém případě bylo plně dostačující vytvoření klienta služby a napojení se na vytvořený účet. A že vytvoření klienta je velice jednoduché může demonstrovat následující postup.

Zároveň se stažením knihovny získáváte i zdrojové kódy a to nejen pro samotnou assembly, ale také s definovanými interface pro výše zmíněné publikační API a to i s definicí struktur parametrů.

Po nareferencování knihovny CookComputing.XmlRpcV2.dll jsem tak do projektu přidal i definici interface pro MetaWeblog API a rozšíril jsem jej o implementaci interface IXmlRpcProxy, tak abych mohl vytvořit proxy klienta. Jelikož jsem však potřeboval ještě vytvářet nové kategorie, bylo potřebné doplnit definici metody pro vytvoření nové kategorie. Na stránkách WordPressu jsem v dokumentaci pro vývojáře zjistil, jaký předpis má takové volání a doplnil strukturu a interface metody.

[XmlRpcMethod("wp.newCategory", Description = "Create a new category.")]
object newCategory(string blogid, string username, string password, Category category);
public struct Category
{
  public string name;
  public string slug;
  public int parent_id;
  public string description;
}

Poté již stačí jen vytvořit instanci proxy třídy, a nastavit ji správně Url adresu na servisní stranu publikačního systému. Tím jsme hotovy a můžeme volat vzdálené metody a publikovat tak naše produkty, v mém případě knihy.

IMetaWeblog proxy = XmlRpcProxyGen.Create<IMetaWeblog>();
proxy.Url = URL;
// zde již následuje volání metod nad proxy

Jak by to probíhalo

Tento krok je plně v mé režii. Co vás případně může zaskočit a co je dobré vědět, že jednotlivá volání je možné trasovat. Což pomohlo i mě, kdy definice pro kategorie nebyla přesná a bylo ji třeba upravit dle skutečného stavu, který posílal nainstalovaný WordPress. Jak zajistit možnost odladit jednotlivá volání:

RequestResponseLogger logger = new RequestResponseLogger();
logger.Attach(proxy);

Poté bude již veškerá komunikace logována do samostatných souborů.

Časový odhad

V případě že víte, kam "sáhnout" a nemusíte znovu vynalézat kolo, potom je zprovoznění XML-RPC volání velice jednoduché a rychlé. Mě proklikání se k dokumentaci WordPressu pro jeho rozšířené API, dodefinování metody a odladění volání zabralo asi 35 minut.

2 Comments

  • Radomir said

    Ahoj,

    budou zveřejněny i kody k aplikaci??

    Diky Jardo, za velice zajimavý seriál.

  • Jarda Jirava said

    Ahoj, s tím, zda zveřejnit komplet zdrojové kódy k aplikaci jsem maličko víc bojoval. Myslím, že pro trošku zkušenějšího vývojáře by to neměl být problém sestavit si obdobnou aplikaci, navíc má téměř vše popsané v článcích a snažil jsem se u každého kroku zdůraznit části, které mohou dělat problém..
    Pokud by byl zájem, určitě se nebudu bránit tomu, aplikaci přizpůsobit osobitým potřebám a doupravit ji na zakázku. V takovém případě zdrojové kódy k aplikaci budou přiloženy.
    Jsem rád, že se seriál líbí a snad bude příležitost nějak pokračovat.

Add a Comment