はじめに
Python使いなら,Jupyter Notebookの出力をそのままブログに投稿したくなると思います.
文章と数式はMarkdownで書いておいておけば良いし,もちろんコードと実行結果をセットで見せられるので魅力的.
今回はJupyter NotebookからWordPressへの投稿ができるjupy2wp
モジュールの紹介です.
あと,jupy2wp
だけだと,Notebook中のMarkdown中のTeX数式がうまく表示されないので,それに対応するためのWordPressプラグインもMathjax-Latex
も紹介します.
Notebook の実行結果 WordPressに投稿する
Notebookの実行結果をWordPressに投稿する方法は主に以下のふたつ.
Export as HTML
からHTMLコードを出力し,WordPress投稿にコピペするJupy2wp
モジュールを使う
前者は,楽なのだがCSSコードも直に記述されていて長いし重い.画像もBase64形式でHTMLに直に記述されてしまう.Notebook側としては,ひとつのhtmlファイルで完結させたい思惑なのだろう.これはこれで助かる局面もあるのだが,WordPressに貼り付けるとなると少し面倒.
それに対し後者のJupy2wp
モジュールは,コマンドひとつで下書き投稿をしてくれて,画像はpngファイルとしてWordPressのメディアフォルダに勝手に投げてくれる.
Jupy2wpの導入
今回は,Jupy2wp
モジュールの導入方法を紹介する.
基本的にはGithubの公式ページ(GitHub – Pybonacci/jupy2wp)に従えばよい.
Jupy2wp
はnbconvert
というモジュールに依存しているのだが,ここら辺でバージョンによって互換性のないことがあるので注意が必要.
結論としてはnbconvert 4.2.0
であればたぶん問題なし.(nbconvert 5系だとうまく動作しないぽいJupyterの結果をそのままwordpressに投稿する[jupy2wp] | On Your Mark . Tokyo)
pip
でinstallする場合は,
pip install git+https://github.com/Pybonacci/jupy2wp.git
git
が導入していないなら,Githubページからzip
ファイルをダウンロードしてきても良い.
ローカルのパッケージをpip
に取り込む場合は,zip
を解凍して,setup.py
のあるディレクトリで
pip install .
をすれば良い.
投稿方法
基本的には,投稿したい.ipynb
ファイルがあるディレクトリで以下コマンドを実行する.
python -m jupy2wp.jupy2wp --xmlrpc-url https://takala.tokyo/takala_wp/xmlrpc.php --user XXXX --password YYYY --nb ZZZZ.ipynb --title TEST
オプションの説明
--xmlrpc-url https://takala.tokyo/takala_wp/xmlrpc.php
: 仕組みはさておき,本ブログhttps://takala.tokyo/takala_wp/xmlrpc.php
のようにWordPress導入サイトURL+xmlrpc.php
を指定する--user XXXX
: WordPressのUser名XXXX
を指定--password YYYY
: WordPressのパスワードYYYY
を指定--nb ZZZZ.ipynb
: 投稿したいファイル名ZZZZ.ipynb
を指定--title TEST
: 投稿タイトルTEST
を指定
以上が最低限必要なオプションである.上のXXXX
とかを書き換えればOK.この他に投稿カテゴリーとかを指定できたりする.
実行し無事成功すると,
It seems all worked fine!! Check your wordpress site admin.
と表示される.なお,この時点では下書き投稿されるだけなので,WordPressの投稿管理画面から体裁を確認して公開する必要がある.
CSSの調整
さて,ここで投稿された下書きの中身を見ればわかるようにCSSは記述されていないので,自分で体裁を整える必要がある.
まあ,めんどくさい..
裏技としては,NotebookをExport HTML
したときにHTMLファイルの頭に長々と書いてるCSSコードを流用する方法が一番簡単.これを,WordPressテーマの追加CSSにコピペしてしまえば良い.
が長いし解読が難しい..自分で凝りたい人は以下などを参考にするとよい
これもとりあえずコピペして,コツコツカスタマイズになる.
TeX数式の対応
さらに調整が必要な点として,Markdown数式(TeX)がある.これはWordpressプラグインで対応する.
Mathjax-Latexプラグインの導入
WordPressの数式問題は記事が多いわりにレベルが低い.一方この記事WordPress の数式整形プラグイン | 永田 晴久は内容が濃いので,読むべし.
結論から言えば,MathJax-LaTeX
プラグインを導入すればよい.
ただし,最新版はPHP7.0にしか対応していないので注意して欲しい(2018/10/16現在).WordPressが置いてあるサーバーのPHPバージョンを確認する必要がある.PHP5.0ならば,MathJax-LaTeX | WordPress.orgページからRecent Versionを落としてくる必要がある.(少なくともMathJax-LaTeX 1.3.8
はPHP5.0に対応している)
ローカルのWordPressプラグインの導入方法は割愛.(ぐぐって欲しい)
あとMathJax-LaTeX
の使いかたも他の記事に譲る.基本的には記事の最初に[mathjax]
と宣言すればよい.
追加の修正
WordPress の数式整形プラグイン | 永田 晴久 でも言及されていたが,inline数式とdisplayed数式を区別を実装するの肝.
両者を併用したいがMathJax-LaTeX
のデフォルトだとたぶん難しい(どちらかになってしまう)
Markdownの場合$ x $
でinline数式,$$ y=x^2 $$
でdisplayed数式になる.これをそのまま実現する.
たぶんいろいろ策はあるが,Mathjax inline mode not rendering – TeX – LaTeX Stack Exchangeの方法を採用した.
投稿の先頭に[mathjax]
と合わせて,以下のように記述してやればOK.
[mathjax]
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true
}
});
</script>
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
おわりに
いちおうこれで,一通りの環境は構築できると思う.快適な技術ブログ執筆環境で,どんどん記事を書いていこう.
3