今回のPythonスクリプトは指定したフォルダに入れたテキストファイルのWordPressへの複数の記事の投稿を自動で一括で行ってくれるプログラムです。
このスクリプトがあれば、複数の記事の一括投稿もわずか3秒程度でできるので、自分で投稿する手間を大幅に省くことができます。
フォルダの中に記事がいくつあっても下のように一括で投稿してくれます。(下記ではカテゴリーを”コレステロールの雑学”と設定しました。)
投稿した記事の状態は公開か、下書きを選ぶことが可能です。
カテゴリー指定やタグ指定も可能です。
- WordPressへ記事を自動投稿するプログラムのソースコード
- Pythonでwordpressに自動投稿するプログラムの大まかな解説
- プログラムを実行する前に事前準備が必要
- ソースコードの詳細な解説
WordPressへ記事を自動投稿するプログラムのソースコード
ファイル名:post.py
from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc.methods.posts import GetPosts, NewPost from wordpress_xmlrpc.methods.users import GetUserInfo import os, glob import ssl ssl._create_default_https_context = ssl._create_unverified_context try: wp = Client('URL/xmlrpc.php', 'ID', 'PASS') for filepath in glob.glob("./posts/*.txt"): title = os.path.basename(filepath).replace('.txt','') with open(filepath, encoding='cp932') as f: body = f.read() post = WordPressPost() post.title = title post.content = body post.post_status = 'publish' # 投稿した記事を下書きのままにしたい場合はpublishをdraftに変更 # post.post_status = 'draft' # tagやcategory割当の場合 post.terms_names = { # 'post_tag': ['Python', 'WordPress'], 'category': ['WordPress', 'Python'] } wp.call(NewPost(post)) os.remove(filepath) except Exception as e: print(e)
「#」で始まっている文はコメントアウトされます。(コメントアウトされるとソースコードとして認識されません。)
Pythonでwordpressに自動投稿するプログラムの大まかな解説
まずはじめにソースコードを実行すると、どのように動作するかを大まかに解説していきます。
プログラムを実行される方は、あらかじめPythonをパソコンの中にダウンロードしてインストールしておいて下さい。
【最新】はじめてPythonをインストールするための手順についてOS別(Windows10, Mac)で解説
また、上記ソースコードをテキストにコピペして、ファイル名をpost.txtからpost.pyとして拡張子を変更して保存して下さい。
↓
その次にSSLサイトにアクセスするために必要な記述を書きます。
↓
WordPressにログインするために必要なデータ(URL,ID,パスワード)の取得を行います。
↓
各記事のファイルを取得します。
↓
記事タイトル、本文をcp932で取得します。
↓
記事をワードプレスに投稿(または下書き保存)します。
↓
フォルダから投稿した記事を削除します。
ではここからより詳しい解説をしていきます。
プログラムを実行する前に事前準備が必要
Pythonを使ってWordPressで投稿などの操作をするためには、
wordpress-xmlrpcというライブラリが必要となります。
ライブラリとは、複数の関数を機能ごとにセットとしてパッケージングしたものです。
Pythonでは用意されたライブラリを使うことによって、無駄にプログラムを書く手間が省けます。
Python初学者を卒業するための簡単・便利なライブラリ12選
wordpress-xmlrpcは外部ライブラリ(もともとPythonに標準で備わっていないライブラリ)なので、
プログラム実行前に、wordpress-xmlrpcのライブラリをPythonへインストールする必要があります。
みなさんがスマートフォンで使いたいアプリをダウンロードして、インストールするのと同じ感覚ですね。
wordpress-xmlrpcライブラリをインストール
ライブラリのインストールはプログラムpost.pyの実行前に行う必要があります。
Macの場合はターミナル、Windowsの場合はコマンドプロンプトで
カレントディレクトリー(プログラムpost.pyが置いてあるディレクトリー)に移動して、
pip install python-wordpress-xmlrpc
と入力すればインストールできます。
投稿したいtxtファイルを「posts」フォルダに準備
今回のプログラムでは、「posts」という名前のフォルダにあるtxtファイルが投稿されるようにコードが書かれています。
ですので、postsという名前のフォルダをpost.pyと同じ階層(カレントディレクトリー)に作成します。
その「posts」フォルダに投稿したいtxtファイルを入れておきましょう。
txtファイルの名前が記事タイトルになる
各記事の投稿タイトルは、txtファイルのファイル名になるようプログラミングされています。
「****.txt」というファイルの場合、投稿タイトルは「****」になります。
txtファイルの本文にはタイトルを入れないで、ファイル名に投稿タイトルを付けて下さい。
wordpressのURLとログイン情報をソースコードに記入
10行目:
wp = Client('URL/xmlrpc.php', 'ID', 'PASS')
ソースコードの10行目にwordpressのURL、ID、PASSにログイン情報を記入して上書き保存しておきます。
プログラムを実行する方法
python-wordpress-xmlrpcがインストールできたら、
ターミナルやコマンドプロンプト等で下記のように入力することで実行できます。
python post.py
この操作だけでワードプレスにフォルダの中の記事が一括で投稿されます。
ソースコードの詳細な解説
ではここからソースコードの詳細な解説に移りたいと思います。
まずはpost.pyの中で使うライブラリやクラスのインポートが必要
1行目:
from wordpress_xmlrpc import Client, WordPressPost
今回の場合、記事を自動でワードプレスブログに投稿するために
wordpress_xmlrpcというライブラリを使用するので、1~2行目でimportしています。
Pythonの【モジュール】の使い方!ハイレベルな機能を実装できる
ライブラリを細かくしたもの=クラス
wordpress_xmlrpcライブラリの中では、さらにクラスという単位で機能が細分化されています。
クラスは、処理を実行するための設計図だと思って下さい。
1行目ではClientとWordPressPostという、2つのクラスをimportしています。
ライブラリの中のクラスをインポートする場合、以下のように記述します。
from ライブラリ名 import クラス名
ライブラリの中の複数のクラスをインポートする場合は、
from ライブラリ名 import クラス名1,クラス名2
のように記述します。
post.pyのソースコードの1行目の場合は、下記のようなコードになっています。
from wordpress_xmlrpc import Client, WordPressPost
wordpress_xmlrpcライブラリからインポートしたクラスの役割を解説
まずはwordpress_xmlrpcライブラリの中のクラスについて解説します。
Clientクラス
1行目:
import Client, WordPressPost
Clientクラスは、ブログURLとワードプレスのログイン情報を取得して、XML-RPCを利用して外部から記事を投稿するために必要なクラスです。
プログラム中での記述方法は Client(url,username,pssword) となります。
WordPressPostクラス
1行目:
import Client, WordPressPost
ブログの投稿の際のオブジェクト(投稿id、投稿ユーザー、本文、タイトル、投稿の状態、投稿タイプ…など)を作成するための設計図のようなものです。
今回のソースコードの中ではタイトルと本文、投稿状態(title,content,post_status)を作成するために使われています。
NewPostクラス
2行目:
import GetPosts, NewPost
新しい投稿を作成する設計図のようなものになります。
osライブラリ
4行目:
import os, glob
Pythonに最初から入っている標準ライブラリです。
ファイルやパスの名前といった文字列を操作する時に使われます。
globモジュール
4行目:
import os, glob
こちらもPythonに最初から入っている標準ライブラリです。
指定されたパターンにマッチするファイルを探し出します。
SSLライブラリ
5行目:
import ssl
PythonでPCとWebサーバーをssl接続する際に使われます。
SSL証明書でエラーが出たサイトでもアクセスできるようにする記述
7行目:
ssl._create_default_https_context = ssl._create_unverified_context
WordPressの投稿を行うために、サーバーにアクセスします。
サーバーへアクセスする時には、SSL証明書のチェックが必要になるのですが、
SSL認証エラーが出た際にもサイトにアクセスするためには上記の記述が必要となります。
SSL証明書に問題があるサイトの場合、通常はSSL認証エラーでアクセスできないのですが、
このコードによって、エラーを無視してサイトにアクセスできるようになります。
SSL証明書とは
WebブラウザとWebサーバー間でSSL(Secure Socket Layer)暗号化通信を行うための電子証明書です。
情報通信先のサーバーのサイト運営組織が実在していることを証明しています。
try-exceptでエラー発生時の対処法を決めておく
9行目「try:」から35行目「except」までは、「try-except文」というブロックです。
tryはエラーを承知で行いたい処理
9行目:
try:
エラーが発生するかもしれないが、実行したい処理を記述しています。
通常は例外が発生したら、エラーが起きて、処理が停止してしまいます。
これは想定外のエラーが発生した時に、対処法がわからなくなってしまうからです。
try-exceptを使用すると、tryに記述されたコード中で例外が発生しても、
exceptのコードに移行するため、処理が停止することはありません。
まずはじめに、tryのコード(9~32行目)が実行されます。
エラーが発生しなければ、exceptのコード(34~35行目)は無視されます。
エラーが発生した場合、expectのコード(34~35行目)に移行します。
今回のexpectコードでは、エラー名を出力するようになっています。
exceptはエラーが出た時の対処法
エラーが発生した時に、次に実行する処理を記述しています。
tryで例外が起きたケースに対する、対処法のコードといえます。
34行目:
except Exception as e:
(Exception as e)は、すべての例外という意味になります。
35行目:
print(e)
tryの部分で例外が起こった場合、printでエラー名を出力します。
ClientクラスでURLとログイン情報の取得
10行目:
wp = Client('URL/xmlrpc.php', 'ID', 'PASS')
WordPressに外部からXML-RPCで記事を投稿するには、URLとログイン情報が必要です。
上のコードでは、Clientオブジェクト(URL、ログイン情報)を作成し、wpという変数に代入しています。
Pythonでの変数の使い方と、関数オブジェクトの代入の解説
Client(‘ブログのURL/xmlrpc.php’, ‘ID’, ‘パスワード’)となっているので、
事前にそれぞれ必要な情報を指定しておく必要があります。
要素を1つずつ取り出して処理をくり返す「for文」
12行目:
for filepath in glob.glob("./posts/*.txt"):
ここでは、繰り返し処理の「for文」が使われています。
【書式】
処理
for文では、オブジェクトからデータを1つずつ変数に代入を繰り返して、処理を行っていきます。
マッチするオブジェクトが複数ある場合、filepathという変数に1つずつ代入され、処理を繰り返します。
【例】
glob.glob("./posts/*.txt") = ['1.txt', '2.txt', '3.txt']
このような場合、まず’1.txt’がfilepathに代入され、13~32行目の処理を行います。
次に、また12行目に戻り’2.txt’がfilepathに代入され、13~32行目まで処理します。
for文はこれの繰り返しであり、オブジェクトの数だけ行われます。
投稿したい.txtファイルを探し出す
12行目:
for filepath in glob.glob("./posts/*.txt"):
glob.glob()によって、()内のパターン(./posts/*.txt)にマッチするファイルのリストを取得します。
*.txtの「*」は正規表現というもので、「0文字以上の任意の文字列」という意味。
したがって「./posts/*.txt」は「postフォルダ内のすべての.txtファイルのファイルパス」を指しています。
そして、取得したファイル達はfilepathという変数にリストとして代入されます。
取得したファイル(filepath)には、以降の13~32行目までの処理が行われます。
.txtファイルからタイトルを取得して変数に代入
13行目:
title = os.path.basename(filepath).replace('.txt','')
Pythonの標準ライブラリである、osライブラリを使用します。
12行目の処理により、(filepath)には’./posts/〇〇.txt’が代入されています。
os.path.basename(filepath)
os.path.basename()はファイルパスからファイル名を取得できる関数です。
上記コードでは、os.path.basename(filepath)で、filepath内に代入されたファイルパスから、ファイル名を取得できます。
replace('.txt','')
そして後半は、文字の置き換えの関数replaceを使います。
replace(‘a’,’b’)でaをbに置き換えるという意味になります。
今回の場合、『’〇〇.txt’を、’〇〇’に置き換える』という意味です。
そのため「.txt」部分が消え、’〇〇’という文字だけになります。
この’〇〇’という文字列を、titleという変数に代入しています。
つまり、ファイル名の.txtを除いた部分を投稿タイトルにしています。
.txtファイルから記事を取得してワードプレスに投稿
15~30行目:
with open(filepath, encoding='cp932') as f: body = f.read() post = WordPressPost() post.title = title post.content = body post.post_status = 'publish' # tagやcategory割当の場合 # post.terms_names = { # 'post_tag': ['Python', 'WordPress'], # 'category': ['WordPress', 'Python'] # } wp.call(NewPost(post))
.txtファイルを開きます
15行目:
with open(filepath, encoding='cp932') as f:
ここではwith構文が使われています。with構文はファイルを開くときなどに使われます。
openだけで開くとファイルを閉じる処理も記述しなければいけないのですが、with構文だとファイルを勝手に閉じてくれるので、閉じる操作を記入する必要がありません。
ですので、ファイルを開く操作などによく使われます。
open(filepath, encoding='cp932') as f
の部分では、filepathに代入された.txtファイルをfという名前で開きます。
また、
encoding='cp932'
の部分で.txtファイルを開く際の文字コードを’cp932’に指定しています。
.txtファイルから本文を読み込みます
16行目:
body = f.read()
開いたテキストファイルの中身を読み込みます。
それをbodyという変数に代入しています。
タイトルや投稿内容が設定されます
17行目:
post = WordPressPost()
WordPressPostオブジェクトを作成し、postという変数に代入しています。
このオブジェクトに投稿タイトル、投稿内容、投稿状態の3つを指定していきます。
WordPressPostオブジェクトは「投稿の情報が記載されたモノ」と考えると良いです。
投稿のタイトルが設定されます
18行目:
post.title = title
13行目で取得したtitleをWordPressPostオブジェクトに指定します。
post.titleという書き方はオブジェクトに投稿タイトルを指定するためのルールと考えると良いです。
投稿の本文が入力されます
19行目:
post.content = body
テキストファイルの中身をWordPressPostオブジェクトに指定します。
投稿状態を公開済に設定します
20行目:
post.post_status = 'publish'
投稿状態を’publlish’(公開済)とし、WordPressPostオブジェクトに指定しています。
投稿状態を下書きのままにしておくには、publishの部分をdraftに変更しておきます。
wordpressに新規投稿を作成する
30行目:
wp.call(NewPost(post))
NewPost()は、wordpressに新しい投稿を行う関数です。
今回はWordPressPostオブジェクトに指定された情報を使用して、新規投稿を作成します。
これをwp.call()の()内に指定することで投稿できます。
投稿したtxtファイルを削除
32行目:
os.remove(filepath)
os.remove()で()の中に入っているものを削除します。
上記の操作では、postフォルダに入っているテキストファイルを削除します。
具体的には、filepathで指定されたテキストファイルをそれぞれ削除します。
すぐに使いたい方向けのマニュアル
1.パソコンにPythonをインストールしていない方は、まず下記のリンクを見ながらPythonをインストールします。
2.マイドキュメントなどに適当な名前のフォルダを作り、その中に新規テキストファイル(.txt)を作成、プログラムのソースコードを張り付けて、拡張子を.txtから.pyに変換してpost.pyという名前で保存します。
ソースコードの下記の部分のURL、ID、PASSの部分は自分のワードプレスのURL、ログインID、パスワードを入れておきます。
wp = Client('URL/xmlrpc.php', 'ID', 'PASS')
また、プログラムを置いたフォルダと同じフォルダにpostsという名前のフォルダを作り、そこに自動投稿したい複数のテキストファイルを入れておきます。この時にファイル名を記事タイトルにして、本文には記事タイトルを入れないようにして下さい。
3.Windowsならコマンドプロンプト、Macならターミナルを開きファイルを置いてあるパス(URL)へ移動します。
移動の方法はコマンドプロンプトでもターミナルでも
cd ファイルが置いてあるパス
のコマンドで移動できます。
4.コマンドプロンプト、またはターミナルで
pip install python-wordpress-xmlrpc
のコマンドを入力して、Enterを押します。
するとライブラリのインストールが始まります。
5.コマンドプロンプト、またはターミナルで
カレントディレクトリにいることを確認して
Python post.py
と入力してEnterを押します。
これで記事の投稿が完了していることが確認できたら終了です。
カテゴリーを指定したい場合
カテゴリーを指定したい場合はソースコードの下記の部分の↓
# tagやcategory割当の場合 post.terms_names = { # 'post_tag': ['Python', 'WordPress'], 'category': ['WordPress', 'Python'] }
‘category’:[‘カテゴリー名1’, ‘カテゴリー名2’]
の部分のカテゴリー名のところを自分のワードプレスのカテゴリー名に変更します。
現状だと一つの記事に対して2個のカテゴリーが設定されてしまうことになってしまっています。
一つのカテゴリーだけに記事を投稿したい場合は
category': ['カテゴリー名1']
のように修正して下さい。
※カテゴリーがもしもない場合は新規にカテゴリーを作成してくれます。
また、タグを指定したい場合は
# 'post_tag': ['Python', 'WordPress'],
のシャープを外して下さい。
【記事の編集が楽に!】Pythonで複数のテキスト記事の見出しタグやリストタグを一括で置換してくれるプログラム
※エラー報告はコメント欄にお願いします。
コメント