【Python】WordPressで記事の自動投稿できるようになる
スクリーンショット_2019-11-12_23

【Python】WordPressで記事の自動投稿できるようになる


WordPressでサイトを運営していると、「記事が自動で投稿できたらなぁ...」と思うタイミングが一度はありますよね。

この記事では、プログラミング未経験の方でもPythonでWordPressに自動投稿できるまでの手順を書いていきます。

すでにWordPressのサイトを持っている方向けの記事なので、まだご自身おWordPressのサイトを持っていない方はWordPressサイトを新規登録してから記事を読んでいただけると!


WordPress自動投稿のために必要なことまとめ

① WordPressにAPIでアクセスできるようになる
② Pythonを使える用意をする
③ PythonでWordPressにAPI経由でアクセスして自動投稿をしてみる

以上の手順でWordPressで自動投稿できるようになります。

ちなみにAPIとは、サイトのデータを取得したり、コンテンツを投稿したりといった操作をボタンでぽちぽち操作しなくてもプログラム経由で行うことができる技術のことです。

言葉で聞くよりも実際に動かしてみた方が理解できるので、よくわからない方もここで理解しようとしなくて大丈夫です。


それでは、さっそくWordPressにAPI経由で投稿できるようになる設定と、記事の投稿を試してみましょう。


① WordPressにAPIでアクセスできるようになる

まずは、WordPressにAPIでアクセスできるようになるための設定をしていきます。

WP REST APIプラグインの有効化

WordPressに登録しているご自身のアカウントでログインし、「ツール > プラグイン」とクリックしていってプラグイン画面を表示します。

スクリーンショット 2019-08-27 21.11.21


画面上部の「プラグインのアップロード」ボタンをクリックします。

スクリーンショット 2019-08-27 21.12.50


「ZIP形式のプラグインファイルをお持ちの場合、...」という箇所に、WordPress REST APIというAPIアクセスできるようになるためのプラグインをアップロードします。

スクリーンショット 2019-08-27 21.12.56


以下のリンク先でREST APIプラグインはダウンロードできます。


画面右下の「Download」ボタンをクリックしてプラグインをダウンロードします。

スクリーンショット 2019-11-12 21.36.51

ダウンロードが完了すると、(Chromの場合)ブラウザの左下にダウンロード済みのファイルが表示されると思います。

表示されていればダウンロード完了です。このライブラリをアップロードします。


ダウンロードしたパッケージをアップロードします。

スクリーンショット 2019-11-12 21.46.18


アップロードしたら、「プラグインを有効化」でプラグインを有効化します。

スクリーンショット 2019-11-12 21.38.36


これで、プラグイン(WP REST API)を利用できるようになりました。


Application Passwordsプラグインの有効化

次に、WP REST APIでWordPressにアクセスして操作できるように、Application Passwordsプラグインを有効化していきます。


プラグインの新規追加で、「Application Passwords」で検索して「今すぐインストール」をクリックします。

スクリーンショット 2019-11-12 21.52.06

「有効」になっていれば有効化できているのでOKです。


Application PasswordsでAPIの認証パスワードの設定

Application PasswordsでWP REST APIにアクセスするときに利用する認証パスワードの登録をしていきます。


まず、WordPress管理画面にアクセスします。

スクリーンショット 2019-11-12 22.20.16


左メニューの「ユーザー」をクリックし、ユーザー名をクリックしてユーザー設定画面に遷移します。

スクリーンショット 2019-11-12 22.22.54


Application Passwordsという項目の「Add New」をクリックし、新規パスワードを登録します。

スクリーンショット 2019-11-12 22.25.08


Passwordを登録すると、REST APIの新規パスワード(「xxxx xxxx xxxx xxxx xxxx xxxx」のように6つの文字列が表示される形式になっていると思います)が表示されます。

スクリーンショット 2019-11-12 22.27.14

こちらをAPIアクセス時に利用するので、外部に漏れないように大切に保管してください。

外部に漏れてしまうとその人が自由にあなたのWordPressに投稿できたりしてしまいます(もし仮に漏れた場合は、迅速にPasswordを無効化して外部からAPIアクセスされないようにしましょう)。


以上で、「① WordPressにAPIでアクセスできるようになる」は完了です。



② Pythonを使える用意をする

次に、Pythonを利用できるようにしておきます。

↓の記事の「Pythonの実行環境の準備」を参考にPythonが実行できるように準備していただければ!



③ PythonでWordPressにAPI経由でアクセスして自動投稿をしてみる

ここまでで準備が全て完了しているはずなので、PythonでWord PressにAPIでアクセスして自動投稿してみましょう!


「post_article.py」という名前のファイルを作成し、以下のようなコードを書きます。

post_article.py

# coding=utf-8
import json
import requests
from urllib.parse import urljoin
from datetime import datetime

# WordPressのデータ
WP_URL = 'WordPressサイトのURL'  # 例: 'https://virtual-surfer.com/'
WP_USERNAME = 'WordPressのユーザー名で書き換え'
WP_PASSWORD = 'Application Passwordsで控えておいたパスワードで書き換え'


def post_article(status, slug, title, content, category_ids, tag_ids, media_id):
   """
   記事を投稿して成功した場合はTrue、失敗した場合はFalseを返します。
   :param status: 記事の状態(公開:publish, 下書き:draft)
   :param slug: 記事識別子。URLの一部になる(ex. slug=aaa-bbb/ccc -> https://wordpress-example.com/aaa-bbb/ccc)
   :param title: 記事のタイトル
   :param content: 記事の本文
   :param category_ids: 記事に付与するカテゴリIDのリスト
   :param tag_ids: 記事に付与するタグIDのリスト
   :param media_id: 見出し画像のID
   :return: レスポンス
   """
   # credential and attributes
   user_ = WP_USERNAME
   pass_ = WP_PASSWORD
   # build request body
   payload = {"status": status,
              "slug": slug,
              "title": title,
              "content": content,
              "date": datetime.now().isoformat(),
              "categories": category_ids,
              "tags": tag_ids}
   if media_id is not None:
       payload['featured_media'] = media_id
   # send POST request
   res = requests.post(urljoin(WP_URL, "wp-json/wp/v2/posts"),
                       data=json.dumps(payload),
                       headers={'Content-type': "application/json"},
                       auth=(user_, pass_))
   print('----------\n件名:「{}」の投稿リクエスト結果:{} res.status: {}'.format(title, result, repr(res.status_code)))
   return res


# 記事を下書き投稿する('draft'ではなく、'publish'にすれば公開投稿できます。)
post_article('draft', 'test-api-post', 'テストタイトルだよ', 'テスト本文だよ', category_ids=[], tag_ids=[], media_id=None)

「WP_URL」と「WP_USERNAME」と「WP_PASSWORD」はそれぞれご自身のWordPressの値で書き換えてください。

また、「requests」というHTTPリクエストをするライブラリを利用するので、以下のコマンドでインストールしておきます。

$ pip install requests


以下のコマンドで作成したPythonファイルを実行し、記事の投稿ができるか確認してみます。

$ python wp_post_test.py
----------
件名:「テストタイトルだよ」の投稿リクエスト結果:SUCCESS!! res.status: 201


実際にWordPressに投稿できているか確認します。

スクリーンショット 2019-11-12 22.54.33


投稿できていますね!


以上、「【Python】WordPressで記事の自動投稿できるようになる」でした!


他にもWordPressはAPI経由で記事の一覧取得、画像のアップロード、記事の削除など様々なことができるので、使いこなせるとWordPress運営がめちゃくちゃ効率化できて便利です。


要望ありそうなら、他の操作もプログラム記事書きますね( ・v・)b


# 3. さいごに


Twitterでも、Webエンジニアの方向けの情報とか、プログラミングのこととかツイートしているので、よければフォローしてやってください!


Qiitaではエンジニアの方向けの記事をメインで書いてます。(数回トレンド入り!)


自由気ままに気になったことや試してみたことを雑記ブログにまとめたりもしております( ・v・)b



※ この記事ではプログラミング初心者の方でも分かりやすく、不具合が起きないように注意して文章をまとめています。が、
本チュートリアルによって生じた、データの欠損、不利益などに関して、
本著者は一切の責任を負うことができません。ご了承ください。

この続きをみるには

この続き: 0文字
この記事が含まれているマガジンを購入する
ブログの運用を効率化したい方は必見

Pythonでブログの記事作成・更新・分析などを自動化するプログラムのチュートリアル記事をまとめています。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
リアクションいただき!ありがとうございますー!!
【経歴】文系大学生→動画ITスタートアップ→IT大手ベンチャー(now!) 【現職】Webサーバーサイドエンジニア 【趣味】日常の単純反復作業の自動化、データを眺める。 このnoteではプログラミングチュートリアル、ブログ運営のノウハウに関してよく書きます。