我热衷于将Twitter时间线嵌入Shiny App中。我有相关的代码片段
<a class="twitter-timeline" href="https://twitter.com/pssGuy/timelines/524678699061641216"
data-widget-id="524686407298596864">Soccer</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s) [0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
我创建了一个twitter.js文件(上面减去了脚本标签)和一个ui.R,如下所示
library(shiny)
shinyUI(fluidPage(
tags$head(includeScript("twitter.js")),
titlePanel(""),
sidebarLayout(
sidebarPanel(
),
mainPanel(
a("Soccer", class="twitter-timeline", href="https://twitter.com/pssGuy/timelines/524678699061641216", data-widget-id="524686407298596864")
)
)
))
这会产生错误
ERROR: C:\Users\pssguy\Documents\R\testGoogleTwitter/ui.R:19:124: unexpected '='
18: mainPanel(
19: a("Soccer", class="twitter-timeline", href="https://twitter.com/pssGuy/timelines/524678699061641216", data-widget-id=
如果我省略了data-widget-id =&#34; 524686407298596864&#34;,我会得到一个链接,当点击该链接时,会打开一个包含正确时间轴的浏览器窗口
我注意到的一件事是给出的脚本与twitters开发教程https://dev.twitter.com/web/embedded-timelines中的脚本不完全相同
<script type="text/javascript">
window.twttr = (function (d, s, id) {
var t, js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id; js.src= "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
return window.twttr || (t = { _e: [], ready: function (f) { t._e.push(f) } });
}(document, "script", "twitter-wjs"));
</script>
TIA
答案 0 :(得分:9)
您需要引用data-widget-id
,因为它不是语法上有效的名称:
> make.names("data-widget-id")
[1] "data.widget.id"
所以以下内容应该有效:
library(shiny)
runApp(list(ui = fluidPage(
tags$head(tags$script('!function(d,s,id){var js,fjs=d.getElementsByTagName(s) [0],p=/^http:/.test(d.location)?\'http\':\'https\';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");')),
titlePanel(""),
sidebarLayout(
sidebarPanel()
, mainPanel(
a("Soccer", class="twitter-timeline"
, href = "https://twitter.com/pssGuy/timelines/524678699061641216"
, "data-widget-id" = "524686407298596864")
)
)
)
, server = function(input, output, session){
}
)
)