如何在Shiny应用程序中嵌入Twitter时间线

时间:2014-10-28 21:52:09

标签: javascript r twitter shiny

我热衷于将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

1 个答案:

答案 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){

}
)
)

enter image description here

相关问题