こんばんは。ヤマモトです。
めっちゃ爆睡して夕方に起きたのだが、相変わらず深夜にバキバキに目が覚めている。
明日は午前中から映画を見る予定だから寝ないといけないのだが、何故かこのタイミングで無性にコーディング欲が湧いたので、今日は目下の宿題にしてた、ジャンプ感想記事投稿の自動化プロジェクトに取り組もうと思う。
前回は連載一覧とジャンプ表紙の画像取得までやってた。
前回までで感想記事に必要なインプットである情報取得はできたので、今回からはアウトプット、つまり記事投稿の自動化に取り組んでいこうと思う。
環境準備
モジュールの用意
今回はXML-RPCプロトコルでトライ。まずはモジュールをインストールする。
モジュール名は python-wordpress-xmlrpc
なのだが、WindowsのAnacondaにはこちらのモジュールが無いのでpipで持ってくる。仮想環境をactivateした状態でpipを使えば仮想環境上にインストールされる。
(py310) C:\Users\ヤマモト>pip install python-wordpress-xmlrpc
Collecting python-wordpress-xmlrpc
Downloading python-wordpress-xmlrpc-2.3.zip (19 kB)
Preparing metadata (setup.py) ... done
...
Installing collected packages: python-wordpress-xmlrpc
Successfully installed python-wordpress-xmlrpc-2.3
(py310) C:\Users\ヤマモト>conda list
...
python-wordpress-xmlrpc 2.3 pypi_0 pypi
...
OK。ちゃんと入ってそう。
モジュールの読み込み
試しにjupyter labでインポートしてみる。
# モジュールを持ってくる
import wordpress_xmlrpc
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-4-a3cc662b25bb> in <module>
1 # モジュールを持ってくる
----> 2 import wordpress_xmlrpc
ModuleNotFoundError: No module named 'wordpress_xmlrpc'
・・・は?? なんでやねん。
コマンドプロンプトで仮想環境のpythonを起動してみて同様にインポートしてみると、ちゃんと成功する。どうやらjupyter lab側で認識できてないっぽい。
調べてみたところ、仮想環境にjupyter labが入っていないとrootのjupyter labが起動するらしい。
なるほど。確かに仮想環境作ってから入れた記憶ないな。
(base) C:\Users\ヤマモト>conda list ju
# packages in environment at C:\Users\ヤマモト\anaconda3:
#
# Name Version Build Channel
jupyter 1.0.0 py37_7
jupyter_client 5.3.4 py37_0
jupyter_console 6.1.0 py_0
jupyter_core 4.6.1 py37_0
jupyterlab 1.2.6 pyhf63ae98_0
jupyterlab_server 1.0.6 py_0
(base) C:\Users\ヤマモト>conda list ju -n py310
# packages in environment at C:\Users\ヤマモト\anaconda3\envs\py310:
#
# Name Version Build Channel
マジだ。入ってない 笑
ということで至急追加。
(py310) C:\Users\ヤマモト>conda install jupyter
jupyter labを起動して、importを再トライ。無事成功。ふう。
コーディング
Clientの呼び出し
記事を投稿するには、WordPressに自分のアカウントでログインする必要がある。
wordpress_xmlrpc
のモジュールでは Client
インスタンスで投稿先のサイト、認証情報を保管する。
# Clientインスタンスを持ってくる。
from wordpress_xmlrpc import Client
url = 'https://arefukeblog.com/xmlrpc.php' # トップページのアドレス末尾に/xmlrpc.phpを付ける
user = 'yamatoXXXXXX' # WordPressのユーザ名
password = 'ABCDXXXXXX' # WordPressのパスワード
client = Client(url, user, password)
ちなみに、サイトのURLが間違っている場合はこのタイミングで「そんなサイトないよ!」とエラーが出るが、ユーザ名、パスワードが間違っていてもここではエラーが出ない。あくまでインスタンスに格納しているだけで、認証はここでは行っていないからだろう。
記事の投稿
投稿のスクリプトを書いてみる。
# 投稿用のモジュール
from wordpress_xmlrpc import Client, methods, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
# 記事のインスタンスを呼び出す
post= WordPressPost()
# 投稿する記事のタイトルを設定
post.title = 'python投稿テスト'
# 下書きで投稿。本番当行の場合は "publish"
post.post_status = "draft"
# 記事の本文を設定。
post.content = 'テストテスト'
# カテゴリーの設定。タグの設定もこちらでできる。
post.terms_names = {
"category": ['週刊少年ジャンプ']
}
# 投稿
client.call(NewPost(post))
意外とあっさりしている。
実行後は返り値が表示されるが、これは記事のIDらしい。
投稿後の確認
WordPressの管理画面から投稿一覧を見てみる。
おおおおおお。
記事の中身を見てみる。
おおおおおおおおおおおおおお。
ちゃんと投稿できてるやん。
参考
感謝しかない。
- Pythonでwordpressに自動で投稿する(python-wordpress-xmlrpc)|NP & Company
- PythonスクリプトからWordPressを操作する(導入編) – XML-RPC【Python】 | BioTech ラボ・ノート
ということで今日はここまで。
意外と簡単だったなあ。
WordPressPostインスタンスも簡単だったけど、他にも記事一覧を取得したりとかできるっぽいし、いろいろ遊べそう。
次は前回作ったジャンプ連載一覧取得のスクリプトとマージして、いよいよ記事投稿のバッチ化だな。
すげえ。順調に進んでる 笑
コメント