Есть ли способ добавить кнопки «Поделиться», чтобы сделать участки общедоступными в Shiny? - PullRequest
2 голосов
/ 28 мая 2020

У меня есть Shiny Dashboard, которая выводит пару графиков. Есть ли способ добавить «поделиться в социальных сетях», где пользователь нажимал бы, чтобы загрузить графики в виде сообщения в свой facebook или твиттер?

например, я хочу, чтобы после нажатия кнопки она делится phonePlot on твиттер не ссылка ...

 # Rely on the 'WorldPhones' dataset in the datasets
 # package (which generally comes preloaded).
 library(datasets)

# Use a fluid Bootstrap layout
fluidPage(    

  # Give the page a title
     titlePanel("Telephones by region"),

  # Generate a row with a sidebar
  sidebarLayout(      

    # Define the sidebar with one input
    sidebarPanel(
      selectInput("region", "Region:", 
                  choices=colnames(WorldPhones)),
      hr(),
      helpText("Data from AT&T (1961) The World's Telephones.")
    ),

    # Create a spot for the barplot
    mainPanel(
      plotOutput("phonePlot")  
    )

  )
)

Сервер

# Rely on the 'WorldPhones' dataset in the datasets
# package (which generally comes preloaded).
library(datasets)

# Use a fluid Bootstrap layout
fluidPage(    

  # Give the page a title
  titlePanel("Telephones by region"),

  # Generate a row with a sidebar
  sidebarLayout(      

    # Define the sidebar with one input
    sidebarPanel(
      selectInput("region", "Region:", 
                  choices=colnames(WorldPhones)),
      hr(),
      helpText("Data from AT&T (1961) The World's Telephones.")
    ),

    # Create a spot for the barplot
    mainPanel(
      plotOutput("phonePlot")  
    )

  )
)

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Да, есть способ. Взгляните на этот пример, чтобы включить кнопку общего доступа для Twitter:

url <- "https://twitter.com/intent/tweet?text=Hello%20world&url=https://shiny.rstudio.com/gallery/widget-gallery.html/"

ui <- fluidPage(

  # Application title
  titlePanel("Twitter share"),

  # Sidebar with an actionButton with the onclick parameter
  sidebarLayout(
    sidebarPanel(

      actionButton("twitter_share",
                   label = "Share",
                   icon = icon("twitter"),
                   onclick = sprintf("window.open('%s')", url)) # Combine text with url variable
      # Use the onclick parameter to open a new window to the twitter url
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

server <- function(input, output) {
  output$distPlot <- renderPlot({
                 # generate an rnorm distribution and plot it
                 dist <- rnorm(1:1000)
                 hist(dist)
               })
}

Дополнительные ресурсы здесь: https://shiny.rstudio.com/reference/shiny/1.4.0/bookmarkButton.html

и здесь: Добавьте кнопку поделиться в Twitter на блестящей панели навигации R

Изменить

Я не смог решить проблему, однако мне пришлось отобразить кнопку «Поделиться» на панели управления. OP хочет поставить кнопку "Поделиться" и сделать свой сюжет доступным для совместного использования. У меня нет большого опыта работы с Shiny, но я хотел увидеть ответ на этот вопрос сам.

2 голосов
/ 02 июня 2020

Далее показано, как твит , включая изображение, может быть опубликован. Для facebook я нашел только следующий пакет: https://cran.r-project.org/web/packages/Rfacebook/Rfacebook.pdf, который позволяет вам обновлять свой статус, но, похоже, не принимает медиа-аргументы. Таким образом, совместное использование в facebook не включено в этот ответ.

Чтобы использовать twitter api для программной публикации твитов, вам понадобится учетная запись разработчика и (оптимально) пакет R, который обертывает для вас пост-запрос.

В соответствии с этой страницей: https://rtweet.info/index.html вы можете использовать library(rtweet) (самостоятельная ссылка) или library(twitteR) для этого. В следующем примере используется library(rtweet).

Чтобы иметь возможность использовать свою учетную запись разработчика Twitter из R, следуйте этой подробной инструкции: https://rtweet.info/articles/auth.html#rtweet. Достаточно начальной настройки, и ее можно подтвердить, набрав rtweet::get_token(), см. Код ниже.

Небольшой переход:

rtweet::post_tweet позволяет публиковать твиты изнутри R. Он делает снимки с диска в аргументе СМИ. Если вы создаете график / изображение в своем блестящем приложении, используется схема data-URI. То есть сюжет не (обязательно?) Сохраняется на диск, а встраивается в страницу. Поскольку rtweet::post_tweet принимает File path to image or video media to be included in tweet. в аргументе media, график, вероятно, сначала нужно сохранить на диск. Можно также попытаться передать «data-uri-path» (data:image/png;base64,i....) на rtweet::post_tweet, но я предполагаю, что rtweet::post_tweet не будет принимать данные графика в кодировке base64 (не проверено).

Воспроизводимый пример (при условии, что вы выполнили следующие шаги: https://rtweet.info/articles/auth.html#rtweet):

library(shiny)
library(rtweet)
rtweet::get_token() # check if you have a correct app name and api_key

ui <- fluidPage(

  sidebarLayout(
    sidebarPanel(
      actionButton(
        inputId = "tweet",
        label = "Share",
        icon = icon("twitter")
      ),
      sliderInput(inputId = "nr", label = "nr", min = 1, max = 5, value = 2)
    ),

    mainPanel(
      plotOutput("twitter_plot")
    )

  )

)

plot_name <- "twitter_plot.png"
server <- function(input, output, session) {

  gen_plot <- reactive({
    plot(input$nr)
  })

  output$twitter_plot <- renderPlot({
    gen_plot()
  })

  observeEvent(input$tweet, {
    # post_tweet takes pictures from disk in the media argument. Therefore,
    # we can save the plot to disk and then hand it over to this function.
    png(filename = plot_name)
    gen_plot()
    dev.off()
    rtweet::post_tweet("Posted from R Shiny", media = plot_name)
  })

}

shinyApp(ui, server)
...