首页 > 解决方案 > 如何从闪亮的书签按钮中提取 URL 并创建我自己的可以缩短 URL 的操作按钮?

问题描述

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

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

下面是一个例子。以下脚本是enableBookmarking文档中的一个示例。我将它上传到shinyapps.io并创建了这个链接(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)

现在,如果我想保存 is 的Checkbox状态TRUE。我可以单击书签按钮并复制 URL(https://yuchenw.shinyapps.io/Bookmark_Example/?输入&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 并自动执行此过程,那就太好了。提前感谢您的任何帮助或建议。

标签: rshinyurl-shortener

解决方案


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

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"


推荐阅读