R Markdownのhtml出力にスライドを埋め込む方法
タイトルのまんまです。
やりたかったこと
R Markdownで解説ページをしていると,slideshareやspeakerdeck,あるいはrevealjsなどで作成したhtmlスライドを埋め込みたいと思うことが頻出しました。大抵のslide公開サービスだと埋め込み用のタグを生成してくれたりするのですが,どうも面倒に感じたため,色々調べたり実装したりしてみました。
成果
自分専用にコツコツ作ってきたzousanパッケージに,embed_slide()
関数を準備しました。cranにはないので以下のようにインストールします:
# devtoolsの場合
devtools::install_github("kazutan/zousan")
# githubinstallでもOK
githubinstall::githubinstall("zousan")
以下のように閲覧用のurlを渡すと,html出力した際に自動で埋め込まれます:
library(zousan)
embed_slide("http://www.slideshare.net/makotohirakawa3/osakastan2-chap51")
embed_slide("https://speakerdeck.com/yamano357/tokyor49-stringr-stringi")
embed_slide("https://kazutan.github.io/methoken201702/Rmd_workshop.html#/")
解説
knitr::include_url()
という関数があり,この関数にurlを渡すとそのアドレスをiframeでいい感じで埋め込むように加工してtagオブジェクトを返してくるようになってます。これを応用しました。
SpeakerDeckについて
SpeakerDeckの埋め込み用URLは中々に面倒で,はじめからoEmbedのAPIを利用しました:
ただ,これで取得したとしても中々うまく出力してくれず,試行錯誤してなんとか実装しました。
その他のHTMLスライドについて
revealjsなどのスライドはhtmlファイルなので,普通にknitr::include_url()
でそのまま引き渡しました
実際の関数のコードについて
具体的なコードはGitHubの該当ファイルを参照してしてください:
urlを見て,slideshareのサイトならそれ用に,SpeakerDeckのサイトならそれ用にoEmbedを利用して整形してtagオブジェクトとなるようにしています。パイプ演算子つかってたりその他かなり雑ですが,今のところうまくいっているのでいいかなと。
ToDo
- 埋め込みのサイズ調整
- 他のプラットフォームへの対応(リクエストと技術的にいけるなら)
Enjoy!