Python3の「python-wordpress-xmlrpc」モジュールを使ってwordpressにコマンドラインで投稿する

スポンサーリンク
Python
スポンサーリンク

Visual Studio Codeが快適なので、最近は出来るだけVisual Studio Codeの環境から出ずに済ませたいと思うようになりました。

Visual Studio Codeでオススメの設定、拡張機能、ショートカット
インストールしたVSCodeの設定を色々とイジったのでメモ。随時更新していきます。まず、VSCodeの設定を変更するにはでsettings.jsonを開き、jsonファイルを編集する。設定の編集は、変更したい設定にカーソルを当てると左側に...
Visual Studio CodeとMarkdown記法を使ってブログ記事の執筆を(当社比)3倍高速化!
普段はwordpressの管理画面にログインしてこのブログの記事を書いていますが、エディタが微妙に使いにくいのと効率を上げたいなぁと思ったので、別の方法を模索していました。そんな時、ローカルでMarkdownでブログの記事を書いてwordp...
さらばArduino IDE! Visual Studio Codeの拡張機能でArduino開発環境を整える
この頃、Arduinoを使って電子工作のまね事をやっていますが、公式のIDEが結構使いにくい・・・。と、思っていたらなんとVisual Studio Codeの拡張機能でMicrosoft製の「Visual Studio Code exte...
Visual Studio Codeに統合ターミナルウィンドウへフォーカスするショートカットキーを追加する
最近、大体のことはVisual Studio Code内で済ませてしまうようになってきました。「Ctrl + shift + @」で統合ターミナルが立ち上がりますが、エディタ部と統合ターミナルのフォーカスを移動するためのショートカットがなく...

今、Wordpressで運営しているこのブログは↓のような手順で更新していますが、

  1. Visual Studio Codeでブログの原稿を書く
  2. 使用する画像ファイルをアップロードする
  3. Visual Studio Codeで書いた記事をWordpressの投稿画面にコピペ
  4. タイトル、カテゴリ、タグ、アイキャッチ、All in One SEO Packのディスクリプション等を設定

これを

  1. Visual Studio Codeでブログの原稿を書く
  2. Visual Studio Codeの統合ターミナルから投稿

の様に変更したいと考えていました。

初めは、Visual Studio Codeの拡張機能を探していたのですがなかなか見つからず、コチラ

はてなブログにコマンド一発で投稿するPythonスクリプトを作ってみた - タダケンのEnjoy Tech
はてなブログにPythonで投稿するスクリプトを作成しました。使い方をご紹介します。ブログ投稿が少しでも楽になるといいですね。

を読んで、なければ自分で作ればいいじゃんと思い至りました。幸い、WordpressにはXML-RPCという外部投稿の仕組みがあることを知っていたので、これを利用してWordpressへ投稿するPythonスクリプトを作ってみました。

スポンサーリンク

事前準備

事前準備として

  1. 自分のブログ(WordPress)の認証情報を環境変数に追加
  2. python-wordpress-xmlrpcをインストール

をやっていきます。

自分のブログ(WordPress)の認証情報を環境変数に追加

私はブログを書くためにLinuxマシンを使っていて、Visual Studio Codeの統合ターミナルとしてbashを設定しているので「.bash_profile」に以下の記述を追加しておきます。

export WORDPRESS_URL="ブログのアドレス/xmlrpc.php"
export WORDPRESS_USRNAME="WordpressのID"
export WORDPRESS_PASSWORD="Wordpressのパスワード"
Linuxの環境変数をPythonから参照する方法
Linuxで環境変数を追加して、Pythonのプログラムから参照する方法を説明します。環境OS:Linux mint 17.2Python:Python 3.4.3環境変数の追加・確認・削除Linuxで環境変数を追加す...

python-wordpress-xmlrpcをインストール

pipで「python-wordpress-xmlrpc」をインストールしておきます。

$ pip3 install python-wordpress-xmlrpc

スクリプト作成

Pythonのスクリプトを作っていきます。

【Python】Pythonからwordpressを投稿|Moritasを参考にさせていただき、以下の改良を加えました。

  • ブログURL、ユーザー名、パスワード環境変数から読み込むように変更
  • ブログタイトル、記事本文、タグ、カテゴリjsonファイルに記述し、コマンドラインの引数で渡すように変更
  • 記事本文はmarkdownで別ファイルに作成し、上記のjsonファイルで読み込むように変更

#!/usr/bin/python3
# coding:utf-8

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo
from datetime import datetime
import sys,json,os

args = sys.argv
f = open(args[1],'r')
g = json.load(f)

wp = Client(os.environ["WORDPRESS_URL"], os.environ["WORDPRESS_USRNAME"], os.environ["WORDPRESS_PASSWORD"])

# 投稿する
post = WordPressPost()
# タイトル
post.title = g["title"]

f = open(g["article"],'r')
post.content = f.read()

# タグ
post.terms_names = {
        "post_tag": g["post_tag"],
        "category": g["category"]
        }
 
# 投稿URL
# post.slug = '自分のサイトのURL'

# サムネイルの指定
# post.thumbnail = ここに画像のIDを指定する

# 投稿時間
# 現在時間で投稿
post.date = datetime.now()
 
# 投稿する。
# ステータスを公開済にする。
# post.post_status = 'publish'
post.post_status = 'draft'

wp.call(NewPost(post))

jsonファイルの形式

以下の内容を”post.json”という名前で保存します。

{
    "title" : "記事タイトルここに入力",
    "article" :"記事本文のファイル名をここに入力",
    "post_tag": ["tag1","tag2"],   // 複数の場合はカンマ区切り
    "category": ["cate1"]           // 複数の場合はカンマ区切り
}

投稿してみる

$ python3  wordpress-post.py post.json

ちなみに、この記事は実際にこのPythonスクリプトを使用して投稿したものです。

残課題

残念ながらまだ完成とは言えず、以下の残課題があります。

<残課題>

  • サムネイル(アイキャッチ画像)の指定

    サムネイルの指定は「post.thumbnail = 画像のID(整数値)」で指定出来ることは確認済なのですが、投稿済の画像データのIDを調べる方法がわかっていません。「URLを指定→画像IDに変換」のようなことができないか調査中です。

  • 記事本文中の画像のアップロード

    できれば記事中で使っている画像のアップロードも自動でやりたいと考えています。記事の中の画像リンク先がローカルになっている場合、自動的にアップロードしてリンクを置き換える様にしたい・・・。

  • 投稿後の投稿日時がずれる

    9時間後(GMT?)の値になってしまう

  • ディスクリプションの設定方法がわからない

    SEO対策にAll in One SEO Pluginのディスクリプション設定をしていますが、XML-RPCからの設定方法がわかりません

もし課題の解決方法をご存知の方が入れば教えていただきたいです。