VimからWordPressのエントリを投稿する方法
僕がエントリを投稿するときはいつも Vim で下書きした内容をクリップボードに貼り付け、WordPress の新規投稿ページに貼り付ける、という流れで投稿していますが、 これを Vim の世界だけで完結できないかと思い調べてみました。
WordPress.vim
便利そうな Vim のプラグインを発見
機能概要
一部抜粋。
This is a mirror of http://www.vim.org/scripts/script.php?script_id=3510
VimRepress is a plugin for managing wordpress blog from Vim, a rewritten of vimscript #1953 , which is broken for years.
Now VimRepress lives with more powerful again.
REQUIREMENT
- Vim 7.3+ with python 2.6/2.7 support
- Python Environment matched wtih Vim's support
- python-markdown/python-markdown2 installed
- wordpress 3.0.0 +
翻訳してみました。
これはhttp://www.vim.org/scripts/script.php?script_id=3510のミラーです。
VimRepress は、Vim の WordPress ブログを管理するためのプラグインです。
VimRepress は継続して改良し続けています(?)
利用前提条件
- Python 2.6 / 2.7 をサポートする Vim 7.3 以降
- Python Environment と Vim のサポート
- python-markdown / python-markdown2 がインストールされている
- ワードプレス 3.0.0 +
インストール
僕は Dein を導入しているので、以下の流れでインストールしました。
1) .vimrc に以下の行を追記
call dein#add('vim-scripts/VimRepress')
2) Vim を再起動してから以下のコマンドを叩く
:call dein#check_install()
WordPress へ接続するための設定
WordPress の設定ファイルを準備。$HOME/.vimpressrc
に、次のフォーマットで保存。
[Blog0]
blog_url = https://genzouw.com/
username = xxxxx
password = xxxxx
早速以下のコマンドを叩いてみました。
:BlogList
すると。
E492: エディタのコマンドではありません: BlogList
どうやら Vim8 環境あるいは Python3.x 環境では動作しない模様。
諦めて自前でスクリプトを作成
PHP の実行環境が自分の PC にインストールされているため、PHP のライブラリを使って Post する仕組みを構築。
利用したライブラリ
Packagist.org から見つけてきました。
rolenweb/xml-rpc-wordpress-api - Packagist
インストール
Composer を使って Global にインストールしておく。
$ composer global require "rolenweb/xml-rpc-wordpress-api":"dev-master"
Changed current directory to /Users/genzouw/.composer
1/4: http://repo.packagist.org/p/provider-latest$78a26b432085a9dfaedb51bd1cff21ba02403ca37be768d9a77763b06ceafa2c.json
2/4: http://repo.packagist.org/p/provider-2018-10$599298cdc63481e696c9eb1d095e9ab500797b126dce1feb6828ca63caf1988c.json
3/4: http://repo.packagist.org/p/provider-2019-01$a1f9fdc0a36682e80076f0b9b19c0780e04b3c73bd0f0751077ced9858b81b43.json
4/4: http://repo.packagist.org/p/provider-2017$07b8f0494281eadcafd1a1d4352b061f65f4dc4505b170d5f2d0a42ea60237d7.json
Finished: success: 4, skipped: 0, failure: 0, total: 4
./composer.json has been updated
1/1: http://repo.packagist.org/p/provider-latest$3411cb05ae76e361d730b1bffd10b63ad42ff95b950429b914aef1b5ce272068.json
Finished: success: 1, skipped: 0, failure: 0, total: 1
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing rolenweb/xml-rpc-wordpress-api (dev-master 4177850): Cloning 4177850faf from cache
Package ramsey/array_column is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
エントリ投稿様スクリプトの作成
PATH
の通ったディレクトリにファイルを作成します。
例) wp-post.php
$ cat <<'EOF' >$HOME/bin/wp-post.php
#!/usr/bin/env php
<?php
require getenv('HOME') . '/.composer/vendor/autoload.php';
use Rolenweb\Wpapi\Wp;
$wp = new Wp(getenv('WP_URL'), getenv('WP_USER'), getenv('WP_PASSWORD'));
$lines = explode("\n", file_get_contents('php://stdin'));
$wp->newPost([
'post_type' => 'post',
'post_content' => implode('\n', array_slice($lines, 2)),
'post_title' => preg_replace('/^# +/su', '', $lines[0]),
'post_status' => 'draft',
'custom_fields' => [
[
'key' => 'key',
'value' => 'value',
],
],
]);
EOF
$ chmod 700 $HOME/bin/wp-post.php
使い方
事前に以下の環境変数を設定しておきます。
WP_URL=<https://YOUR-SITE-DOMAIN>
WP_USER=<YOUR_LOGIN_ID>
WP_PASSWORD=<YOUR_LOGIN_PASSWORD>
適当に記事ファイルを作成(1 行目にはタイトル、スペースを開けて 3 行目から本文)。
cat <<EOF > entry.txt
TITLEほげほげ
BODY1
BODY2
BODY3
EOF
これを標準入力としてスクリプトに食わせ。
$ cat entry.txt | wp-post.php
テスト
ちゃんと下書きエントリが増えている、と思ったら思い切り文字化けしている。
2020-05-24 追記 : 対処法を後述 。
2020-05-24 追記
先のライブラリの文字化け解消方法が特定できました。
ラッパーライブラリを自作し対処しました。
Packagist.org で公開したのでもしよかったらお使い下さい。
https://packagist.org/packages/genzouw/xmlrpc-wordpress-api
当面は今までどおりクリップボードに貼り付けてのエントリ投稿ですね 。
なんとか文字化けの問題にも対処できたので、PHP のスクリプトをコマンドラインから呼び出して投稿できました!
ディスカッション
コメント一覧
まだ、コメントがありません