Как передать параметры блестящему приложению через URL

В веб-браузерах вы передаете веб-сайту параметры, например

www.mysite.com/?parameter=1

У меня есть блестящее приложение, и я хотел бы использовать в расчетах параметр, переданный на сайт, в качестве входных данных. Так можно ли сделать что-то вроде www.mysite.com/?parameter=1, а затем использовать параметр input!?

Можете ли вы предоставить образец кода или ссылки?

Спасибо


person user3022875    schedule 30.09.2015    source источник
comment
См. Также состояние закладки на блестящем веб-сайте (см. этот ответ SO). Он позволяет использовать URL-адреса в форме: gallery.shinyapps.io/113 -bookmarking-url /? _ inputs_ & n = 149.   -  person Paul Rougieux    schedule 20.02.2018


Ответы (3)


Вам придется обновить ввод самостоятельно, когда приложение инициализируется на основе URL-адреса. Вы должны использовать переменную session$clientData$url_search для получения параметров запроса. Вот пример, вы можете легко расширить это под свои нужды

library(shiny)

shinyApp(
  ui = fluidPage(
    textInput("text", "Text", "")
  ),
  server = function(input, output, session) {
    observe({
      query <- parseQueryString(session$clientData$url_search)
      if (!is.null(query[['text']])) {
        updateTextInput(session, "text", value = query[['text']])
      }
    })
  }
)
person DeanAttali    schedule 30.09.2015
comment
Можно ли обновить ввод прямо в приложении? Я пытаюсь, но значение URL автоматически меняется. Например, в URL-адресе я выбираю text = 'abc', а затем в приложении я хочу определить text = 'def'. - person hsilva; 31.08.2017
comment
И как бы вы это сделали, не вводя данные в пользовательский интерфейс? Люди могут не захотеть, чтобы пользователь вмешивался в передаваемые значения. - person randy; 15.08.2018
comment
Входные данные - это просто демонстрация того, что вы можете делать с параметром. Абсолютно не требуется - person DeanAttali; 22.09.2018

Основываясь на daattali, он принимает любое количество входов и назначает значения для нескольких различных типов входов:

ui.R:

library(shiny)

shinyUI(fluidPage(
textInput("symbol", "Symbol Entry", ""),

dateInput("date_start", h4("Start Date"), value = "2005-01-01" ,startview = "year"),

selectInput("period_select", label = h4("Frequency of Updates"),
            c("Monthly" = 1,
              "Quarterly" = 2,
              "Weekly" = 3,
              "Daily" = 4)),

sliderInput("smaLen", label = "SMA Len",min = 1, max = 200, value = 115),br(),

checkboxInput("usema", "Use MA", FALSE)

))

server.R:

shinyServer(function(input, output,session) {
observe({
 query <- parseQueryString(session$clientData$url_search)

 for (i in 1:(length(reactiveValuesToList(input)))) {
  nameval = names(reactiveValuesToList(input)[i])
  valuetoupdate = query[[nameval]]

  if (!is.null(query[[nameval]])) {
    if (is.na(as.numeric(valuetoupdate))) {
      updateTextInput(session, nameval, value = valuetoupdate)
    }
    else {
      updateTextInput(session, nameval, value = as.numeric(valuetoupdate))
    }
  }

 }

 })
})

Пример URL для тестирования: 127.0.0.1:5767/?symbol=BBB,AAA,CCC,DDD&date_start=2005-01-02&period_select=2&smaLen=153&usema=1

person Jason S    schedule 15.01.2016
comment
Привет, Джейсон, я пытаюсь передать два аргумента в updateselectinput, но безуспешно, stackoverflow.com/questions/65520716/ - person Andrew; 31.12.2020

Блестящее приложение: как передать несколько токенов / параметров через URL

Стандартным разделителем для токенов, передаваемых через url-адрес блестящего приложения, является символ &.

Пример блестящего кода приложения:

server <- function(input, output, session) {
  observe({
    query <- parseQueryString(session$clientData$url_search)
    if (!is.null(query[['paramA']])) {
        updateTextInput(session, "InputLabel_A", value = query[['paramA']])
    }
    if (!is.null(query[['paramB']])) {
        updateTextInput(session, "InputLabel_A", value = query[['paramB']])
    }
  })
  # ... R code that makes your app produce output ..
}

Пример основного URL: http://localhost.com/?paramA=hello&?paramB=world

Ссылка: parseQueryString Docs

person Jake Lester    schedule 03.01.2021