Archive for Únor, 2008

Úno 07

Ovládání WordPress-u pomocí XML-RPC v Pythonu

Tento, stejně jako moje jiné blogy, je založen na WordPress-u.Velká výhoda WordPressu, o které sem nevěděl (používám WordPress jenom 3 týdny) je, že se dá ovládat pomocí XML-RPC. Tuhle pěknů vlastnost využívám u jedné mé stránky pro automatizování vkládání článku (v tomhle případě produktů).

Takže, jak to funguje?

V defaultní instalaci WordPress-u se nachází skript xmlrpc.php. Tento skript implementuje víceré API různých blogů -metaBlog, Blogger a jiné. Pokud máte vytvořený účet ve vašem blogu (může to být i defaultní admin) a nastavená příslušná práva, nic vám nebrání tenhle interface využívat. Následující kód v Pythonu se připojí na blog, vytvoří subkategorií a pošle nový článek, ktorý se ihned publikuje.

import xmlrpclib
blog = xmlrpclib.Server('http://www.jmeno-blogu.cz/xmlrpc.php')

Zatím je všechno jasný – naimportujeme si potřebnou knihovnu, v tomhle případě xmlrpclib a připojíme se na náš blog.

nazev_kategorie = "Programování"
cat = blog.wp.suggestCategories(0, 'jmeno_uzivatele', 'heslo_uzivatele', nazev_kategorie)
cat_id = int(cat[0]['cat_ID']['data'])

Tenhle kód nám zjistí, jestli je vytvořená kategorie kde chceme vytvořit naši sub-kategorií (potřebujeme poznate její ID). Příklad předpokládá, že je daná kategorie vytvořená. Nula na prvním parametru znamená, že se jedná o první blog (kdyby jsme používali WordPress MU, použili by jsme číslo našeho blogu).

nazev_sub_kategorie = 'Python'
python_cat_id = serv.wp.newCategory(0, 'jmeno_uzivatele', 'heslo_uzivatele', {'name':nazev_sub_kategorie, 'parent_id':cat_id})

Tak, konečně se dostáváme k „jádru pudla“, vytvořili sme naši sub-kategorií s názvem (název).

struct = { 'title':'Můj první příspěvek', 
           'description':'Tohle je text příspěvku', 
           'categories':[python_cat_id]}
postid = serv.metaWeblog.newPost(0, 'jmeno_uzivatele', 'heslo_uzivatele', struct, 1)

Samotný kód na vložení příspěvku. Ta jednička na konci příkazu znamená, že se má příspěvek ihned publikovat.

Výsledný kód je zde:

import xmlrpclib

#data, které se mají použít
nazev_kategorie = 'Programování'
nazev_sub_kategorie = 'Python'

#připojíme se na wordpress blog
blog = xmlrpclib.Server('http://www.jmeno-blogu.cz/xmlrpc.php')

#zjistíme si ID nadřazené kategorie
cat = blog.wp.suggestCategories(0, 'jmeno_uzivatele', 'heslo_uzivatele', nazev_kategorie)
cat_id = int(cat[0]['cat_ID']['data'])

#vytvoříme sub-kategorií
python_cat_id = serv.wp.newCategory(0, 'jmeno_uzivatele', 
  'heslo_uzivatele', 
  {'name':nazev_sub_kategorie, 'parent_id':cat_id})

#zveřejníme příspěvek uložený v mapě struct
struct = {'title':'Můj první příspěvek', 
  'description':'Tohle je text příspěvku', 
  'categories':[python_cat_id]}

postid = serv.metaWeblog.newPost(0, 'jmeno_uzivatele', 'heslo_uzivatele', struct, 1)

Celou dokumentaci k WordPress XML RPC API naleznete zde a samozřejmě na Google.

P.S.: Dneska vyšla nová verze WordPress 2.3.3 (opravuje závažnou bezpečnostnou chybu právě v XML-RPC API, takže je vhodné upgradovat)

0
comments