C# で Worpdress の API を使って記事を投稿する

WordpressAPI が備わっていることはこれまでも記事で紹介していますが、今回は具体的に使う場合のコードのメモになります。

API では JSON でデータをやり取りしますので、DynamicJson を使用することにします。NuGet でインストールするかソースコードを取り込んで、 DynamicJson を使用できるようにします。

コードです。まず、送信するデータのもととなる匿名オブジェクトを作成します。

var postContent = new
{
    title = <記事タイトル>,
    content = <記事本文>,
    status = "publish", // 公開は"publish" 下書きは"draft"
    categories = "1,2,3", // カテゴリのIDをカンマ区切り
    tags = "4,5" // タグのIDをカンマ区切り
}

content には、普通に HTML タグを含む投稿の本文を文字列で指定します。

categories や tags などは不要であれば指定しなくてかまいません。
status も指定しなければデフォルトで公開状態になります。これらの他にもパラメタを指定でき、それは こちら で確認できます。

この匿名オブジェクトを JSON 形式の文字列に変換するのに、DynamicJson を使用します。

var serialized = DynamicJson.Serialize(postContent);

あとは送信するだけです。

var postData = Encoding.UTF8.GetBytes(serialized);

var req = HttpWebRequest.Create("<サイトのURL>/wp-json/wp/v2/posts") as HttpWebRequest;
req.Method = "POST";
req.ContentLength = postData.Length;
req.ContentType = "application/json"; // 送信するコンテントタイプを application/json にするのを忘れないこと

using (var reqs = req.GetRequestStream())
{
    reqs.Write(postData, 0, postData.Length);
}

using (var resp = req.GetResponse() as HttpWebResponse)
using (var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
{
    var s = reader.ReadToEnd();
}

最後の変数 s には、API のレスポンスが JSON 形式の文字列で格納されています。

これをまた DynamicJson で扱うなら、

var post = DynamicJson.Parse(s);

こうすればOKです。こうすると、例えば投稿IDは post.id で取得できます。何が取得できるかはこちらで確認できます。