Я создал приложение Shiny для вызова и получения данных из API, который предоставляет данные о погоде.
Заранее извиняюсь, потому что я не смогу дать функциональный код, так как я работаю над 5 различными сценариями, потому что приложение огромно.
Вот моя проблема, мне дают в качестве входных данных, в дополнение к этому, я прошу пользователя выбрать интересующие его переменные погоды.
Затем я строю свой запрос в JSON, а затем отправляю их один за другим (нужен API) API.
Иногда происходит сбой API (это разрабатываемая версия), и я хотел бы показать пользователю, что произошел сбой API без самого приложения.
Поэтому я протестировал несколько методы, и я сейчас пытаюсь интегрировать все в какое-то время l oop, из которого мы выходим, когда условие "flag ==" continue "" после * кода, если все прошло хорошо, или "flag == FALSE", если мы должны выйти из l oop, и в этом случае мы показываем сообщения пользователю (либо API cra sh, либо ошибка в данных).
Проблема в том, что я не могу останови л oop, даже если у меня есть ошибка API, то отправляются следующие запросы, а остальная часть кода выполняется до тех пор, пока приложение не выйдет из строя.
Я не знаю, связана ли проблема со структурой моего кода или с предпосылками Shiny. Я начал Shiny это только 10 дней go.
Спасибо всем вам.
observeEvent(input$finalConfirm, {
ns <- session$ns
data = as.data.frame(dataCEHUB())
query = requeteCEHUB()
print(query)
withProgress(message = 'Dowload in progress', {
Sys.sleep(1)
N = length(query)
l = list()
flag = TRUE
i =1
while(flag != FALSE | flag !="continue"){
#for (i in 1:length(query)){
a = postQuery(data = data,queries = query[[i]])
print(class(a))
print(length(a))
if (class(a)!="character"){
l[[i]] = a
incProgress(1/N)
i= i+1
if(i == N){
flag = "continue"
}
}
else if (a == "APIissue") {
flag= FALSE
incProgress(N)
remove_modal_spinner()
shinyalert("Informations","Oops it seems that CE HUB has encontred an issue, wait few seconds and try to relaunch the request by cliking again on the button", type = "warning")
l = list()
}
else{ #(!is.data.frame(a) | a != "APIissue")
flag = FALSE
incProgress(N)
remove_modal_spinner()
shinyalert("Error",HTML(paste0("Oops it seems that CE HUB found an error with the data provided: <br>",
'<p style="text-align:left;">The error is the following one :<br>',
a, "<br> If you can't understand the error please contact someone from data science office </p>" ))
, type = "error", html = T)
l = list()
}
}
#}
})
if (flag == "continue"){
remove_modal_spinner()
if(length(l)>0){
listDataCEHUB <- l
print(l)
DataWeatherDownloaded = listDataCEHUB%>%purrr::reduce(left_join)
show_modal_spinner(spin = "cube-grid", color = "red" ,text = HTML("<br>DATA CONSTRUCTION IN PROGRESS.."))
DataWeatherTransformed <- prepMeteo(dataWeather = DataWeatherDownloaded)
if (length(grep("CumSum",colnames(DataWeatherTransformed)))!=0){
shinyalert("Informations", HTML(paste0('<p style="text-align:left;">',"Some new variables have been calculated :<br><br>",
"- 'Cumulated Sum' for aggregated by sum variables requested<br>",
"- 'Day_gap' from the first to the last date for each year-location combinations</p>"
)), type = "info", html = T)
}
else{shinyalert("Informations", HTML(paste0('<p style="text-align:left;">A new variable have been calculated :<br><br>',
"- 'Day_gap' from the first to the last date for each year-location combinations </p>"
)), type = "info", html = T)}
}
output$DataWeatherTransformed <- DT::renderDataTable(DataWeatherTransformed, options = list(scrollX = T), rownames = F)
rv$dataTrans = DataWeatherTransformed
remove_modal_spinner()
output$downloadDataCEHUB <- downloadHandler(
filename = function() {
paste0('weather_data_CEHUB_', Sys.Date(), '.csv')
},
content = function(con) {
write.csv(rv$dataTrans,con, row.names = F,fileEncoding = "UTF-8" )
}
)
}
})