How do you pass parameters to a shiny app via URL
Solution 1
You'd have to update the input yourself when the app initializes based on the URL. You would use the session$clientData$url_search
variable to get the query parameters. Here's an example, you can easily expand this into your needs
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']])
}
})
}
)
Solution 2
Building off of daattali, this takes any number of inputs and does the assigning of values for you for a few different types of inputs:
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))
}
}
}
})
})
Example URL to test: 127.0.0.1:5767/?symbol=BBB,AAA,CCC,DDD&date_start=2005-01-02&period_select=2&smaLen=153&usema=1
Solution 3
Shiny App: How to Pass Multiple Tokens/Parameters through URL
The standard delimeter for tokens passed through url to shiny app is the &
symbol.
Example shiny app code:
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 ..
}
Coresponding URL example: http://localhost.com/?paramA=hello&?paramB=world
Reference: parseQueryString Docs
user3022875
Updated on January 04, 2021Comments
-
user3022875 over 3 years
In web browsers you pass parameters to a website like
www.mysite.com/?parameter=1
I have a shiny app and I would like to use the parameter passed in to the site in calculations as an input. So is it possible to do something like www.mysite.com/?parameter=1 and then use input!parameter?
Can you provide any sample code or links?
Thank you
-
hsilva over 6 yearsIs it possible to update the input directly on the app? I'm trying to but it automatically changes to the url value. Eg in url I choose text='abc' and then on the app I want to define text='def'.
-
randy almost 6 yearsAnd how would you do this without having to put an input in the UI? People may not want the user messing with the values that were passed.
-
DeanAttali over 5 yearsThe input is just a demonstration of what you can do with the parameter. It's absolutely not required
-
Andrew over 3 yearsHi Jason, I am trying to something similiar to pass two arguments to updateselectinput, but no success until now, stackoverflow.com/questions/65520716/…