Далее показано, как твит , включая изображение, может быть опубликован. Для 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)