特定的Twitter时间线uiOutput在r Shiny中被反应

时间:2018-01-09 00:53:35

标签: r twitter shiny uioutput

我在Shiny框架中阅读了关于动态ui的所有主题,但我找不到任何有用的东西。我想显示推特时间线。这段代码非常有效:

library(shiny)
library(shinydashboard)

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("Tweets by Andrew Ng",
        class="twitter-timeline",
        href = "https://twitter.com/AndrewYNg"
      )
    )
  )
)
, server = function(input, output, session){

}
)
)

但是,当我试图让它变得反应时,我只有一个链接到Twitter时间线:

library(shiny)
library(shinydashboard)
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(
      uiOutput("mytimeline")
    )
  )
)
, server = function(input, output, session){

  output$mytimeline <- renderUI({
    a("Tweets by Andrew Ng",
      class="twitter-timeline",
      href = "https://twitter.com/AndrewYNg"
    )
  })



}
)
)

1 个答案:

答案 0 :(得分:0)

Twitter脚本仅在第一次运行时加载嵌入的内容。由于脚本位于静态UI中,但时间轴位于动态UI中,因此脚本将始终在插入时间轴之前运行。

Twitter文档有关于此的部分:https://dev.twitter.com/web/javascript/initialization

您可以运行twttr.widgets.load()来扫描页面以查找新添加的嵌入内容。

在插入嵌入内容时运行执行此操作的一种方法是将其包含在脚本标记中:

library(shiny)

twitterTimeline <- function(href, ...) {
  tagList(
    tags$a(class = "twitter-timeline", href = href, ...),
    tags$script("twttr.widgets.load()")
  )
}

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(
      uiOutput("mytimeline")
    )
  )
)
,
server = function(input, output, session) {

  output$mytimeline <- renderUI({
    twitterTimeline("https://twitter.com/AndrewYNg", "Tweets by Andrew Ng")
  })
}
))

有关更多详情的类似问题,请参阅How to enable syntax highlighting in R Shiny app with htmlOutput