はじめに
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