もじとばコム

【WP REST API解説】投稿を作成する(POST /posts)

Word PressのAPIを用いて新規投稿を作成する方法について説明します。
あわせて、Pythonで新規投稿を行うプログラムも紹介します。

リクエストURL

[ブログのアドレス]/wp-json/wp/v2/posts

ここでブログのアドレスとは、WordPressを用いたブログのトップページです。

このブログであれば、”http://mojitoba.com/wp-json/wp/v2/posts”がリクエストURLになります。

 

パラメーター

date

投稿日時を指定します。
フォーマットはyyyy-MM-ddThh:mm:ssで、例えば2019/01/21の19:00:00に投稿日時を設定する場合は2019-01-21T19:00:00とします。
指定しない場合委はリクエストを行った時間が自動で設定されます。

date_gmt

dateを世界標準時に直したものを指定します。
フォーマットはdateと同じで、指定しない場合はリクエストをした時間から自動的に設定されます。

password

記事ステータスをprivateにしたとき、この記事を見るのに必要なパスワードです。

slug

いわゆるパーマリンクです。
Word Pressのパーマリンク設定欄に入力するものと同じものを指定します。
この記事であれば、wp_rest_api_postsがslugになります。
指定しない場合は記事タイトルから自動で設定されます。

status

記事のステータスを設定します。
publish(公開), future(公開予約), draft(下書き), pending(非公開), private(限定公開)から一つを選択します。

title

記事タイトルを指定します。

content

記事本文を指定します。

author

記事を公開するユーザーを指定します。
ユーザー名ではなく、ユーザーを表すIDを指定することに注意してください。
指定しない場合は、自動的にid=1がセットされます。
id=1のユーザーは、Word Pressの初期設定を行ったユーザーです。

excerpt

記事の引用時に表示されるテキストを指定します。

featured_media

アイキャッチ画像のIDを指定します。
画像のIDはメディアの「詳細な編集」のURLから確認できます。

関連:【WP REST API解説】画像IDの調べ方(featured_media)

comment_status

コメントを受け付けるかどうかを指定します。
open(受け付ける)、closed(受け付けない)のうちどちらかを指定します。
指定しない場合、ブログの設定が優先されます。

ping_status

トラックバックを受け付けるかどうかを指定します。
open(受け付ける)、closed(受け付けない)のうちどちらかを指定します。

format

記事のフォーマットを指定します。
指定しない場合はstandardになります。
次のうちいずれか: standard, aside, chat, gallery, link, image, quote, status, video, audio

sticky

公開状態の「この投稿を先頭に固定表示」にあたるパラメータです。
True, Falseのbool値を指定します。

categories

記事のカテゴリーをIDで設定します。
slugではないことに注意してください。
また、IDのセットを引数として渡すことにも注意が必要です。
以下で具体例を挙げているため、確認してください。
指定しない場合、未設定が適用されます。

tags

記事のタグを指定します。

 

Pythonによる実装

Pythonによる投稿リクエストの例をご紹介します。
投稿するためには、API用のパスワードが必要になります。
まだ取得していない場合はこちらの記事で解説していますので、サクッと発行しましょう!

参考:【WP REST API】Word Press APIのパスワード設定方法

例では以下のような記事を投稿してみます。

タイトル:テスト
記事内容:この記事はテスト用投稿です。
カテゴリー:1と2
公開状態:公開
コメント:受け付けない

また、投稿に必要な情報は以下のようにします。
こちらの情報は、自分のブログの情報に書き換えてください。

ブログのURL: mojitoba.com
ユーザー: hogehoge
パスワード: xxxx xxxx xxxx xxxx xxxx xxxx

### 投稿に必要な情報 ###
# ユーザーID
user_id = "hogehoge"

# APIパスワード
passward = 'xxxx xxxx xxxx xxxx xxxx xxxx'

# リクエストURL
end_point_url ="http://mojitoba.com/wp-json/wp/v2/posts"

### パラメータ ###
# タイトルを指定
title = 'テスト'

# 本文を指定
content = 'この記事はテスト用投稿です。'

# 公開状態を指定
status = 'publish'

# コメントの状態を指定
comment_status = 'closed'

# パラメータをまとめる
payload = {
  'title': title ,
  'content' : content ,
  'status' : status,
  'categories' : [1,2],
  'comment_status': 'closed'
}

# 投稿
headers = {'content-type': "Application/json"}
r = requests.post( end_point_url, data=json.dumps(payload) , headers=headers, auth=(user_id, passward) )

# 確認
print(r.status_code) # 201が表示されれば成功