我有一个Shiny Dashboard,可以输出几个图形。有没有一种方法可以添加“共享社交媒体”,用户可以按此按钮将图形作为帖子上传到他的Facebook或Twitter?
例如,我想有一个按钮,一旦单击它就会在Twitter上共享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")
)
)
)
服务器
# 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")
)
)
)
最佳答案
下面显示了如何发布包含图片的推文。
对于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)
。
为了能够在R中使用您的Twitter开发者帐户,请遵循以下详细说明:https://rtweet.info/articles/auth.html#rtweet。初始设置就足够了,可以使用rtweet::get_token()
进行确认,请参见下面的代码。
小步走:rtweet::post_tweet
允许您从R内部发布推文。它在media参数中从磁盘拍摄图片。如果在闪亮的应用程序中生成绘图/图片,则使用数据URI方案。意思是,该图没有(必要吗?)保存到磁盘上,而是嵌入到页面中。由于rtweet::post_tweet
在media参数中使用File path to image or video media to be included in tweet.
,因此可能必须先将图保存到磁盘。也可以尝试将“ data-uri-path”()切换到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)