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




今、Wordpressで運営しているこのブログは↓のような手順で更新していますが、
- Visual Studio Codeでブログの原稿を書く
- 使用する画像ファイルをアップロードする
- Visual Studio Codeで書いた記事をWordpressの投稿画面にコピペ
- タイトル、カテゴリ、タグ、アイキャッチ、All in One SEO Packのディスクリプション等を設定
これを
- Visual Studio Codeでブログの原稿を書く
- Visual Studio Codeの統合ターミナルから投稿
の様に変更したいと考えていました。
初めは、Visual Studio Codeの拡張機能を探していたのですがなかなか見つからず、コチラ

を読んで、なければ自分で作ればいいじゃんと思い至りました。幸い、WordpressにはXML-RPCという外部投稿の仕組みがあることを知っていたので、これを利用してWordpressへ投稿するPythonスクリプトを作ってみました。
Contents
事前準備
事前準備として
- 自分のブログ(WordPress)の認証情報を環境変数に追加
- 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のパスワード"

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からの設定方法がわかりません
もし課題の解決方法をご存知の方が入れば教えていただきたいです。