R Markdown を使うと、Rによる分析結果を簡単にHTML化することができます。
その HTML をそのまま WordPress に投稿できれば、
日々の分析結果を自動でブログに公開することができますね。
R から WordPress を操作するためのパッケージ「RWordPress」を使えば、
この自動投稿ができるのですが、
よくあるチュートリアルに従うと、
上手く動かない場合もあるようです。
今回は、そんなうまく動かない場合の使い方をまとめておくことにします。
RWordPress のインストール
R WordPress のインストールは、次のコマンドで、
github 経由で行います。
install_github("duncantl/XMLRPC") install_github("duncantl/RWordPress")
WordPress のリモート操作にXML-RPCを利用していて、
一つ目のパッケージのそのためのものです。
普通の使い方
普通の使い方をする場合は、
まず、投稿予定の R Markdown のファイルを用意したら、
options(WordpressLogin = c(user = 'Password'), WordPressURL = 'http://[domain]/xmlrpc.php') knit2wp('forsubmit.Rmd', title = 'title', publish = FALSE)
ユーザーIDとパスワードは、WordpressLogin
に指定していて、
user
にユーザーID,Password
にパスワードを入力しておきます。
WordPress のアドレスは、WordPressURL
の [domain]
の部分に指定します。
forsubmit.Rmd
は投稿するための R Markdown ファイルで、
title
でタイトルを指定します。
publish
が FALSE
なら、一旦、下書きに投稿され、
TRUE
なら、そのまま投稿されます。
これで正しく動作すればいいのですが、
上手く動かない場合があります。
knit2wp のエラー
knit2wp を使うと、次のようなエラーが出る場合があります。
エラーの解決には至っていないので、
この記事では別の対応策を取ります。
エラー1: Incorrect username or password
ユーザー名とパスワードが間違えているというメッセージなので、
確認してみてください。
確認しても正しいよという場合もあります。
ここで指定できるのは、どうやらWordpress 公式の
「Wordpress.com アカウント」**のようです。
エラー2: You are not allowed to publish posts on this site
公式アカウントを設定すると上の認証の問題は回避されますが、
次は投稿が許可されていないとのエラーです。
公式アカウントと連携していてもこのエラーになってしまうので、
解決方法は不明です。。。
そのため、knit2wp を使わない方法を下で紹介します。
newPost で投稿する
上のようなエラーが出るので、knit2wp で投稿することができないのですが、
なぜか、 newPost 関数からは投稿できるので、
こちらを使うこととしましょう。
content を生成する
newPost では引数に記事の中身のHTMLデータを直接指定して投稿するので、
R Markdown のコンパイル部分は別に実行する必要があります。
knit2wp の中身を参考にして、content を作る関数を次のように用意しておきます。
make_content = function(input,encoding=getOption("encoding"),envir=parent.frame()){ out = knit(input, encoding = encoding, envir = envir) on.exit(unlink(out)) con = file(out, encoding = encoding) on.exit(close(con), add = TRUE) content = readLines(con, warn = FALSE) content = paste(content, collapse = "\n") content = markdown::markdownToHTML(text = content, fragment.only = TRUE) return(content) }
このmake_content
を呼び出せば、
HTMLデータが文字列として得られます。
content = make_content("Rmarkdown/intro_website.Rmd")
記事を投稿する
投稿する中身ができれば、後は newPost で投稿するだけです。
WordpressURL = "https://[domain]/xmlrpc.php" login = c(user = "Password") newPost(content=list(description=content,title = title), publish = F,blogid = 0, login = login,.server = WordpressURL)
URLや、login情報の指定の仕方は同じですが、
.server = WordpressURL
で明示的に指定することに注意しましょう。
指定されなくても勝手に読み込むことになっているようですが、
そのデフォルトの指定の場合に、knit2wpと同様のエラーが確認できました。