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.