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))
参考
0 Comments