如何从闪亮的书签按钮中提取 URL 并创建我自己的可以缩短 URL 的操作按钮?

How to extract the URL from the Shiny Bookmark Button and Create My Own Action Button That Can Shorten the URL?

我想知道是否可以提取由 Shiny Bookmark 按钮创建的 URL?我知道书签按钮是一个特殊的操作按钮,可以创建一个 URL 记录 Shiny 应用程序的所有输入字段。除了默认行为之外,我想将此 URL 保存到我的 Shiny 应用程序中以供进一步应用。

我的最终目标是看看我是否可以将书签 URL 提供给 urlshorteneR 包以创建缩短 URL 并向用户报告。当 Shiny 应用程序包含大量输入字段时,书签 URL 变得冗长。这就是为什么我认为能够自动缩短 URL 会很方便。

下面是一个例子。以下脚本是 enableBookmarking 文档中的示例。我将它上传到 shinyapps.io 并创建了这个 link (https://yuchenw.shinyapps.io/Bookmark_Example/).

# Basic example with state encoded in URL
ui <- function(request) {
  fluidPage(
    textInput("txt", "Text"),
    checkboxInput("chk", "Checkbox"),
    bookmarkButton()
  )
}
server <- function(input, output, session) { }
enableBookmarking("url")
shinyApp(ui, server)

现在如果我想保存 CheckboxTRUE 的状态。我可以单击书签按钮并复制 URL (https://yuchenw.shinyapps.io/Bookmark_Example/?inputs&chk=true&txt=%22%22).

之后,我可以使用 urlshorteneR 包来缩短 URL 如下。

library(urlshorteneR)

url <- "https://yuchenw.shinyapps.io/Bookmark_Example/?_inputs_&chk=true&txt=%22%22"

isgd_LinksShorten(longUrl = url, showRequestURL = TRUE)

这很好用。如果我可以提取书签 URL 并自动执行此过程,那就太好了。预先感谢您的任何帮助或建议。

使用您的示例应该这样做:

library(shiny)
library(urlshorteneR)

# Basic example with state encoded in URL
ui <- function(request) {
  fluidPage(
    textInput("txt", "Text"),
    checkboxInput("chk", "Checkbox"),
    bookmarkButton(),
    htmlOutput("URLs")
  )
}

server <- function(input, output, session) {
  URL <- reactiveVal()

  onBookmarked(function(url) {
    URL(url)
  })

  output$URLs <- renderText({
    paste("Current URL:", URL(), br(), "Shortened URL:", isgd_LinksShorten(longUrl = URL(), showRequestURL = TRUE))})
}

enableBookmarking("url")
# enableBookmarking("server") # alternative

shinyApp(ui, server)

但是,如评论中所述,我建议使用 enableBookmarking = "server"