Princip MetaWeblog API

2. díl - Princip MetaWeblog API

Tomáš Herceg       26.04.2007       VB.NET, XML, HTTP/HTML, I/O operace       12864 zobrazení

V minulém díle jsme si naznačili, jak lze snadněji a pohodlněji spravovat obsah na webu a co k tomu budeme potřebovat. V tomto díle se budeme věnovat standardu MetaWeblog API, popíšeme si jeho procedury a jejich parametry. O konkrétní implementaci se pobavíme až příště.

V minulém díle jsme si vysvětlili, co je to MetaWeblog API a k čemu je dobré. Umožňuje, aby aplikace mohly manipulovat s obsahem na blogu nebo nějakém pro tyto účely připraveném webu. Hlavním cílem je podpora obrázků a snadného a pohodlného formátování textu. A tyto účely plní MetaWeblog API velice dobře.

MetaWeblog API je rozšířením staršího Blogger API, které umělo pouze základní funkce, nepočítalo se například s uploadem obrázků. MetaWeblog tyto problémy řeší. Celá komunikace funguje na standardu XML-RPC, což je vzdálené volání procedur pomocí XML a HTTP protokolu. Důležité je, aby blog nebo cílový web obsahoval publikační službu, se kterou bude aplikace komunikovat a na které bude volat procedury. O tom, co by tato služba měla umět, se budeme bavi právě v tomto díle. Otázky konkrétní implementace ještě řešit nebudeme, to až v dílech dalších.

Dokumentaci ke standardu najdete na adrese http://www.xmlrpc.com/metaWeblogApi, ovšem daleko přehlednější popsání procedur, které je třeba implementovat, najdete na MSDN na adrese http://msdn2.microsoft.com/en-us/library/bb259697.aspx.

Kominukace mezi aplikací a webovou službou

Jak tedy komunikace mezi aplikací a webovou službou probíhá? Nejprve si zaregistrujeme v aplikaci účet, vyplníme uživatelské jméno a heslo, zadáme adresu publikační služby (důrazně doporučuji pro přístup k této službě používat HTTPS, protože jméno a heslo se posílá v textové podobě, takže není problém, aby si ho kdokoliv přečetl) a volbu potvrdíme. Aplikace zavolá funkci blogger.getUsersBlogs, která vrátí seznam blogů, do kterých uživatel může přispívat. Pokud má uživatel blogů více, aplikace by se měla zeptat, do kterého chce uživatel přispívat. Windows Live Writer po zjištění cílového blogu vytvoří testovací článek a ihned jej pošle na blog, následně si stáhne stránku s tímto článkem, které jde do prohlížeče a zjistí formátování textu, styl a barvu odstavce, barvu pozadí, zkrátka kompletní vzhled stránky. Tato funkcionalita je dosti sporná, protože MetaWeblog API obsahuje i pro zjištění vzhledu blogu vlastní procedury, ty ovšem nikdo nepoužívá. Navíc pokud si na serveru HTML zpracováváte nebo kontrolujete a pozměníte jej, Windows Live Writer je už na stránce nenajde a šablonu nezjistí, použije se standardní vzhled.

Následně si aplikace zavoláním funkce metaWeblog.getCategories vyžádá seznam kategorií. Jeden článek můžete zařadit do libovolného počtu kategorií.

Pak již můžete psát články, můžete do nich vložit obrázky, tabulky, zkrátka co vás napadne. Jakmile je článek hotov, dojde k publikování. Nejprve se zavolá pro každý přiložený obrázek nebo soubor procedura metaWeblog.newMediaObject, které se jako parametr pošle daný soubor a tato procedura vrátí absolutní URL, kde je soubor k dispozici. Aplikace tyto absolutní URL dosadí do výsledného HTML kódu a pak již jen zavolá proceduru metaWeblog.newPost, kam mimo jiné pošle tento HTML kód.

Pokud chcete článek editovat, musí si aplikace nejdříve stáhnout jeho obsah (Windows Live Writer si všechny příspěvky ukládá lokálně k sobě, takže je stahuje pouze v případě, že je nemá). Existují 2 procedury - metaWeblog.getRecentPosts, ta vrátí seznam posledních několika článků, počet článků se předá parametrem, a pak procedura metaWeblog.getPost, které předáte id konkrétního článku a dostanete HTML. Máte ještě k dispozici proceduru blogger.deletePost, která článek smaže.

Článek jednoduše upravíte a aplikace procedurou metaWeblog.editPost pošle upravené HTML a případně před tím pošle znovu soubory a obrázky, které se změnily (mají stejný název jako ty již neaktuální, takže je můžete přepsat).

XML-RPC

Jak jsem již psal dříve, volání těchto procedur funguje na standardu XML-RPC. Webová služba přijme XML data, která obsahují název volané procedury a její parametry, tuto proceduru provede a její návratovou hodnotu pošle zpět také ve formě XML. Podporované datové typy jsou String, Integer, DateTime, Boolean, Base64Array a Struct. Prvních šest je jasných, Struct je něco jako asociativní pole - seznam hodnot, kde každá má svůj unikátní klíč, pomocí něhož k ní přistupujeme.

Ukázkový požadavek:

<?xml version="1.0"?>
<methodCall>
  <methodName>metaWeblog.getPost</methodName>
  <params>
    <param>
      <value>15</value>
    </param>
    <param>
      <value>hell.commiray</value>
    </param>
    <param>
      <value>hell95</value>
    </param>
  </params>
</methodCall>

Ukázková odpověď:

<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>categories</name>
            <value>
              <array>
                <data>
                  <value>Programování</value>
                  <value>Grafika</value>
                </data>
              </array>
            </value>
          </member>
          <member>
            <name>dateCreated</name>
            <value><dateTime.iso8601>20030729T10:59:48</dateTime.iso8601></value>
          </member>
          <member>
            <name>description</name>
            <value>Můj testovací příspěvek.</value>
          </member>
          <member>
            <name>permaLink</name>
            <value>http://www.blog.com/post.aspx?id=15</value>
          </member>
          <member>
            <name>postid</name>
            <value>15></value>
          </member>
          <member>
            <name>title</name>
            <value>Můj testovací příspěvek</value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodResponse>

Je vidět, že struktura požadavků a odpovědí je poměrně složitá, rozhodně chvíli trvá, než se v ní člověk zorientuje.

Pro úplnost přikládám přehled procedur, jejich vstupními parametry a výstupními hodnotami.

Název procedury Vstupní parametry Návratová hodnota Popis funkce dané procedury
 blogger. getUsersBlogs appkey string
username string
password string
array (
    struct {
        url string
        blogid string
        blogName string
    }
)
Zjistí všechny blogy, ke kterým má uživatel přístup. 
url by měla být absolutní adresa blogu, ale vždy se to nedodržuje
blogid je ID blogu a blogName je název blogu.
Přeškrtnuté parametry se ignorují, slouží pouze ke kompatibilitě se staršími službami, nicméně aplikace je posílají.
 metaWeblog. getCategories blogid string
username string
password string
array (
    struct {
        title string
        description string
    }
)
Zjistí seznam kategorií, které jsou na blogu blogid vytvořeny.
title je název kategorie, který se také bude zasílat v procedurách newPost a editPost jako hodnoty pole
description je popis kategorie, ale doporučuji jej dávat stejný jako název,
protože Word zobrazuje v seznamu kategorií description, ale Live Writer title
 metaWeblog. newPost blogid string
username string
password string
struct {
    title string 
    description string
    dateCreated datetime 
    categories array
}
publish boolean
postid string Přidá do blogu blogid nový příspěvek a vrátí jeho ID jako postid.
title je název článku, description je HTML článku, categorie je pole názvů ketegorií,
pokud je publish true, článek se ihned zobrazí návštěvníkům, pokud je false, článek není zatím publikován.
 metaWeblog. editPost postid string
username string
password string
struct {
    title string 
    description string
    dateCreated datetime 
    categories array (string)
}
publish boolean
true Upraví příspěvek s ID postid v blogu. 
title je název článku, description je HTML článku, categories je pole názvů ketegorií,
pokud je publish true, článek se ihned zobrazí návštěvníkům, pokud je false, článek není zatím publikován.
 blogger. deletePost appkey string
postid string
username string
password string
publish boolean
true Odstraní příspěvek s ID postid z blogu.
Přeškrtnuté parametry se ignorují, slouží pouze ke kompatibilitě se staršími službami, nicméně aplikace je posílají.
 metaWeblog. getRecentPosts blogid string
username string
password string
numberOfPosts integer
array (
    struct {
        postid string
        title string 
        description string
        dateCreated datetime
        permaLink string
        publish boolean 
        categories array (string)
    }
Stáhne požadovaný počet (numberOfPosts) posledních příspěvků z blogu blogid
title je název článku, description je HTML článku, categories je pole názvů kategorií,
publish je true, pokud je článek zobrazen návštěvníkům, permaLink je absolutní URL článku na webu 
 metaWeblog. getPost postid string
username string
password string
struct {
    postid string
    title string 
    description string
    dateCreated datetime
    permaLink string
    publish boolean 
    categories array (string)
}
Stáhne příspěvek s ID postid.
title je název článku, description je HTML článku, categories je pole názvů kategorií,
publish je true, pokud je článek zobrazen návštěvníkům, permaLink je absolutní URL článku na webu 
 metaWeblog. newMediaObject blogid string
username string
password string
struct {
    name string
    type string
    bits base64
}
struct {
    url string
}
Přidá do blogu blogid soubor přílohy. Vrátí absolutní URL, pod kterou je soubor dostupný.
name je název souboru na klientovi (pokud v daném blogu soubor s takovým názvem existuje, bude přepsán),
type je MIME typ souboru, např. image/png,
bits je binární obsah souboru zapsaný v kódování base64

 Parametry username a password jsou uživatelské jméno a heslo uživatele, posílají se v nešifrované podobě (někdy čistý text, někdy base64, což ale není šifra a hodnota jde snadno získat), opravdu vřele tedy doporučuji použít SSL pro přístup k publikační službě. U parametrů záleží na pořadí, pokud je ale parametr ve struktuře, na pořadí nezáleží, protože se spolu s hodnotou předává i název parametru. U parametrů, které ve struktuře nejsou, se název parametru nepředává.

To je protentokrát vše, v příštím díle si ukážeme, jak takovou službu implementovat a poukážeme na některá úskalí, se kterými se můžeme potkat.

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

3. Jechoduchý MetaWeblog 06.05.2007
2. Princip MetaWeblog API 26.04.2007
1. Snadnější publikování na webu 26.04.2007

 

Mohlo by vás také zajímat

Windows Presentation Foundation (WPF) - díl 7.: Grid

Grid je jedna z nejdůležitější a nejpoužívanějších pozicovacích komponent ve WPF. Ulehčuje návrh formulářů a své uplatnění nachází v řadě scénářů.

Práce s časovými pásmy a letním časem v aplikaci a databázi - díl 3.: DateTimeOffset v .NET Frameworku

DateTimeOffset je méně využívanou alternativou struktury DateTime v .NET Frameworku. Navíc dovoluje ukládat časové pásmo a pohodlně s ním pracovat.

Hledáme .NET vývojáře (Praha, Brno, Frýdek-Místek)

 

 

Nový příspěvek

 

Diskuse: Princip MetaWeblog API

nějak se mi to nepovedlo a zdá s emi že to tam hodně chybí.

nahlásit spamnahlásit spam 11 / 11 odpovědětodpovědět

Můžeš být konkrétnější? Co mi tam chybí?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback