2014-10-28 78 views
7

我渴望将Twitter时间线嵌入到Shiny应用的一部分中。我有如何在Twitter应用中嵌入Twitter时间线

<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= 

如果我省略了数据控件-ID =“524686407298596864”,我得到一个链接,,单击时,打开与正确的时间轴浏览器窗口

有一件事我注意到的是,给出的脚本是不太一样的是,在Twitter的开发教程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

回答

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