如何在 R 闪亮应用程序中显示嵌入的推文?

How to show embedded tweet in R shiny app?

我正在完成我的自动取款机仪表板,我正在尝试在我的页面上显示一条推文。我正在使用 tweetrmd 包来执行此操作,但它似乎不起作用

这是我的 UI 代码的一部分

library(tidyverse)
library(shiny)
library(rtweet)
library(tweetrmd)

screenshot <- tweet_screenshot(tweet_url("Metro", "1251153881209307136"))
# UI

list(
  ui <- tagList(
    includeCSS("style.css"),
    navbarPage("#Corona",
               windowTitle = "#Corona",
                 tabPanel("Twitter",
                          sidebarLayout(
                            sidebarPanel(
                              h2("Algemene twitter data", align = "left"),
                              ),
                            mainPanel(
                              tabsetPanel(
                                id = "Tabs", 
                                  tabPanel(
                                  title = "Kranten",
                                  h3("Frequentie tweets over corona door populaire kranten", align = "center"),
                                  plotOutput("plot1")%>% withSpinner(color="#dca108"),
                                  div(img(src= screenshot, align = "center"), style="text-align: center;", id= "screenshot"),
                                ),                                )
                              )
                            )
                            ))
  )
)

问题是:我可以让 tweet_screenshot 功能在闪亮的应用程序(默认为 rmarkdown)中工作吗?如何做?

如果我查看屏幕截图对象,它会显示:

(screenshot <- tweet_screenshot(tweet_url("Metro", "1251153881209307136")))

file://C:\Users\jolien\AppData\Local\Temp\RtmpKeTPxU\file47383c65585c.html截图完成

提前致谢

使用twitframe.com的解决方案:

library(shiny)

tweet <- "https://twitter.com/Twitter/status/1144673160777912322"
url <- URLencode(tweet, reserved = TRUE)
src <- paste0("https://twitframe.com/show?url=", url)

js <- '
$(window).on("message", function(e) {
  var oe = e.originalEvent;
  if (oe.origin !== "https://twitframe.com")
    return;
  if (oe.data.height && oe.data.element.id === "tweet"){
    $("#tweet").css("height", parseInt(oe.data.height) + "px");
  }
});'

ui <- fluidPage(
  fluidRow(
    tags$head(
      tags$script(HTML(js)),
      tags$style(HTML(
        "
        .content {
          margin: auto;
          padding: 20px;
          width: 60%;
        }"))
    ),

    uiOutput("frame")
  )
)


server <- function(input, output, session) {
  output[["frame"]] <- renderUI({
    tagList(
      tags$div(
        class = "content",
        tags$div(tags$iframe(
          id = "tweet",
          border=0, frameborder=0, height=50, width=550,
          src = src
        ))
      ),
      singleton(tags$script(HTML(
        "$(document).ready(function(){
          $('iframe#tweet').on('load', function() {
            this.contentWindow.postMessage(
              { element: {id:this.id}, query: 'height' },
              'https://twitframe.com');
          });
        });")))
    )
  })
}

shinyApp(ui, server)