c# XML-RPCでWordPressのカテゴリやタグの一覧を取得する

前回 XML-RPC で WordPress に投稿してみた。

c# XML-RPCでWordPressに投稿する

実際アプリケーションを作る場合は既存カテゴリやタグの一覧を取得することもあるかと思ったのでついでにやってみる。

インターフェイス定義

前回作成したインターフェイス(IWordPress)に wp.getTerms を追加。

    public interface IWordpress : IXmlRpcProxy
    {
        [XmlRpcMethod("wp.newPost")]
        string newPost(int blog_id, string username, string password, WpContent content);

        [XmlRpcMethod("wp.getTerms")]
        WpTerm[] getTerms(int blog_id, string username, string password, string taxonomy);
    }

使い方は taxonomy に名称を指定して取得。

  • 「category」 => カテゴリー
  • 「post_tag」 => タグ

構造体定義

wp.getTerms の戻り値で使用する WpTerm を定義。

    public struct WpTerm
    {
        public string term_id;
        public string name;
        public string slug;
        public string term_group;
        public string term_taxonomy_id;
        public string taxonomy;
        public string description;
        public string parent;
        public int count;
    }

使う部分だけでも良さそうだけど、今回は全部定義してみた。

主要な部分は↓あたり。

  • 「term_id」 => ID
  • 「name」 => 名前
  • 「slug」 => スラッグ

使い方

実際にカテゴリを取得するコンソールアプリケーションのソース。

        static void Main(string[] args)
        {
            IWordpress proxy = XmlRpcProxyGen.Create<IWordpress>();
            proxy.Url = "http://HOGE.com/xmlrpc.php";

            WpTerm[] terms = proxy.getTerms(1, "username", "password", "category");
            foreach (WpTerm t in terms)
            {
                Console.WriteLine("{0}:{1}", t.term_id, t.name);
            }
        }

インスタンスの作成とURLの指定は前回と同じ。

6行目でカテゴリーを取得して forearch でループしながらIDと名前を出力。

タグを取得する場合は引数 taxonomy を post_tag にする。

            WpTerm[] terms = proxy.getTerms(1, "username", "password", "post_tag");

まとめ

XML-RPC.NET のおかげで簡単に取得できた。

その他のAPIを使う場合も同様に IXmlRpcProxy を継承したインターフェイスに追加していけば良いようだ。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク

コメント

  1. Shoma より:

    今までgetTagを使ってたので大変参考になりました!
    ところでタグを取得するときのtaxonomyはpost-tagではなくpost_tagでないでしょうか?

  2. ぬっき~ より:

    Shoma さま

    コメント&ご指摘ありがとうございます。

    おっしゃるとおり「post-tag」ではなく投稿時と同じように「post_tag」を使用するのが正しい方法です。

    こっそり修正させていただきましたw