python-wordpress-xmlrpc:ワードプレスへ記事投稿

PythonでFTPサーバーに設置したワードプレスの操作方法です。

python-wordpress-xmlrpc公式サイト

Clientメソッド

from wordpress_xmlrpc import Client

wp = Client('WordPress設置URL/xmlrpc.php','ユーザー名','パスワード')

#操作の前提としてClientクラスのインスタンスを生成します。

#当記事では上記を下記のとおり省略して記載します

wp = Client(...)

NewPostメソッド(記事の新規投稿)

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import NewPost

wp = Client(...)

post = WordPressPost()

post.title = "記事タイトル"

post.content = "記事本文"

post.terms_names = {
	'category': ["カテゴリー名1","カテゴリー名2"]
	'post_tags':["タグ名1","タグ名2"]
	}

post.post_status = 'publish'

post.thumbnail = 1

wp.call(NewPost(post))

WordPressPostクラスのオブジェクトによって、記事の設定を行います。以下はよく使うものです。

title 記事タイトル
content 記事本文
excerpt 記事一覧ページでの抜粋文
post_status 公開状態 参考
comment_status コメント状態 open or close
terms_names タクソノミーを辞書型で設定
thumbnail サムネイル画像をイメージIDで設定
slug スラッグ

GetPostsメソッド(記事一覧の取得)

戻り値:WordPressPostインスタンスのリスト


from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts
from wordpress_xmlrpc.methods.posts import GetPosts

wp = Client(...)

result = wp.call(posts.GetPosts())

#全記事のタイトルを出力
for post in result:
	print(post)


#全記事のIDを出力、Pythonの原則通りインスタンスのアトリビュート(プロパティ)にアクセス
for post in result:
	print(post.id)


#辞書型により抽出条件の設定
result = wp.call(posts.GetPosts({'post_status':'private'})) 

for post in result:
	print(post)

WordPressPostインスタンスの持つアトリビュートについては公式を参照

GetPosメソッド(記事の取得)

戻り値:WordPressPostインスタンス


from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPost
from wordpress_xmlrpc.methods import posts

wp = Client(...)

result = wp.call(posts.GetPost(記事ID))

#ここではWordPressPostインスタンスの持つアトリビュートと、その値を取得してみます

 
attribute_list = dir(result) #dir関数により、全アトリビュートを取得

end = len(attribute_list) #アトリビュート数を取得

for a in range(27,end): #26番目まではワードプレスとは無関係なので除外
	
	print(attribute_list[a]) #アトリビュート名を取得
	
	print(getattr(result,attribute_list[a])) #getattr関数により各アトリビュートの値を取得




後で調べましたが__dict__メソッドで簡単に全アトリビュートを取得できるようです。









ユーザー名の取得


result = wp.call(GetUserInfo())

print(result)






EditPostメソッド(投稿済記事の編集)

下記では例として、投稿済記事の公開状態の変更を行います。

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts

wp = Client(...)

post.post_status = 'private'

wp.call(posts.EditPost(記事ID, post))

#ただしこのままでは記事タイトルが消され、nontitleになってしまします。(バグ?)
#よって一度記事タイトルを取得し、記事タイトルと共に編集内容を代入します

post_id = 記事ID

result = wp.call(posts.GetPost(post_id))

post = WordPressPost()

post.title = result.title #記事タイトル
post.post_status = "publish" #公開状態

wp.call(posts.EditPost(post_id, post))






















参考