Блестящее приложение, которое получает данные через URL, работает локально, но не на shinyapps.io

Я написал простое блестящее приложение, чтобы проиллюстрировать проблему получения данных с веб-сайта. Вот код UI:

library(shiny)

shinyUI(fluidPage(

# Application title
titlePanel("Test App"),

# Sidebar with slider inputs 
sidebarLayout(
    sidebarPanel(
        actionButton("button", "Fetch Data")
                ),


    mainPanel(
        tabsetPanel(
            tabPanel("Data", textOutput("crimelist"))
        )
    )
  )
 )
)

А вот код сервера:

library(shiny)

# Define server logic 
shinyServer(function(input, output, session) {

    # Get a list of the different types of crime
    observeEvent(input$button, {
        url <- "https://phl.carto.com/api/v2/sql?format=csv&q=SELECT 
               distinct rtrim(text_general_code) as text_general_code
                            FROM incidents_part1_part2
                            order by text_general_code"
    crimelist <- read.csv(url(url), stringsAsFactors = FALSE)$text_general_code
    output$crimelist <- renderText({crimelist})
    })
})

Получаемые данные описаны по адресу https://cityofphiladelphia.github.io/carto-api-explorer/.

Когда я запускаю это блестящее приложение в моей локальной среде, оно отлично работает. Когда он публикуется в shinyapps.io и запускается, приложение перестает работать, когда я нажимаю кнопку, чтобы получить данные. В блестящем журнале он сообщает следующее:

2017-10-11T14:46:31.242058+00:00 shinyapps[224106]: Warning in 
open.connection(file, "rt") :
2017-10-11T14:46:31.242061+00:00 shinyapps[224106]:   URL 'https://phl.carto.com/api/v2/sql?format=csv&q=SELECT distinct 
rtrim(text_general_code) as text_general_code
2017-10-11T14:46:31.242062+00:00 shinyapps[224106]: FROM incidents_part1_part2
2017-10-11T14:46:31.242063+00:00 shinyapps[224106]: order by text_general_code': status was 'URL using bad/illegal format or missing URL'
2017-10-11T14:46:31.243062+00:00 shinyapps[224106]: Warning: Error in open.connection: cannot open connection

Я действительно в замешательстве - это какой-то блестящий вопрос о сервере? Если у кого-то есть подсказка, я весь в ушах!

1 ответ

Я разместил этот вопрос на нескольких досках, и Джошуа Спивак в группе пользователей Google Shinyapps.io решил мою проблему:

Вам необходимо закодировать URL-адрес, чтобы он был действительным, например, https://phl.carto.com/api/v2/sql?format=csv&q=SELECT%20distinct%20rtrim(text_general_code)%20as%20text_general_code%20FROM%20incidents_part1_part2%20order%20by%20text_general_code

shinyapps.io работает в Linux, поэтому вполне вероятно, что curl используется для получения этого URL. Я предполагаю, что вы используете Windows локально, которая использует менее строгий механизм, который допускает пробелы и переводы строк, которые есть в URL.

После внесения предложенных изменений он работает, как и ожидалось. Спасибо, Джошуа!

Другие вопросы по тегам