第53回R勉強会@東京(#TokyoR)で発表しました。タイトル通り R で LINE の BOT を作ったという話です。
ソースコードは gist に公開しています。ちなみにコード上部に「ここにボットの動作を設定する」というコメントがありますが、これは会社で営業の人に BOT を作ってもらおうと努力した結果、ここに処理を集約する形になったものです。独自に作っていたらもっと違う形になっていたかもしれません。
言いたかったのは 2 点で shadowy 便利だよということと httr で JSON を組み立てるときは I
関数をうまく使おうということです。後者について軽く補足します。
以下のような JSON を POST したいとします。
{
"foo": ["bar"],
"hoge": "fuga"
}
R では全ての文字列はベクトルになるので、 1 要素のベクトルを JSON で配列にするかしないかを自動では決定できません。 httr ではデフォルトで 1 要素の場合に配列ではなく単一の文字列として扱うのですが、これでは上記の JSON は構築できません。このような場合に以下のように I
関数を利用します。
payload <- list("foo" = I("bar"), "hoge" = "fuga") POST(endpoint, body = payload, ...)
I
関数をつけたオブジェクトは AsIs
というクラスになります。 R では文字列はベクトルなので、ベクトルをそのまま (as-is) JSON で表現するには配列が適当ということになります。
HTTP リクエスト・レスポンスを構築する際に複雑な JSON を作りたくなった場合には必ず必要となるので、覚えておきたいですね。