我已经建立了一个闪亮的应用程序,基于selceted数据knitr的降价PDF的。生成的报告需要在会议中引用某种唯一ID。 我知道我可以使用会话ID,但我需要一种方法来计算每个会话的下载次数。 有没有一种方法可以计算会话之外的事件或计算自首次部署以来会话ID的数量?shinyapps.io下载次数
回答
我需要这样做一次,所以我有一些代码躺在。它基本上跟踪了我追加的csv中的所有内容。在这里,我将它建成了一个闪亮的测试平台。
- 它采用了
session$token
的ID(也许有更好的东西) - 它使用
write.table
和read.table
,因为它们的行为与append
选项更好。 - 它由闪亮的下载处理程序呼唤
writetolog
递增计数,但您也可以手动一个额外的按钮增加计数(仅做显然测试目的) - 它有两个输出,一个是总结另一个是日志内容的转储。这些用于调试,因为
downloadHandler
在与所有这些反应性进行交互时可能有点“具有挑战性”。
下面是代码修改为一个例子像你需要什么:
library(shiny)
logfname <- "log.csv"
writetolog <- function(newcount,newsessionid,operation){
time <- format(Sys.time(), "%Y-%m-%d %H:%M:%S %Z")
df <- data.frame(time=time,count=newcount,sessionid=newsessionid,operation=operation)
doappend <- file.exists(logfname)
if (doappend){
write.table(df,logfname,append=T,quote=F,col.names=F,sep=",",row.names=F)
} else {
write.table(df,logfname,append=F,quote=F,sep=",",row.names=F)
}
}
getcounts <- function(){
if (!file.exists(logfname)){
return(list(count=0,sessioncount=0))
}
df <- read.table(logfname,header=T,sep=",")
nr <- nrow(df)
rlst <- list(count=sum(df$count),sessioncount=length(unique(df$sessionid)),
lastop=df$operation[nr],lasttime=df$time[nr])
return(rlst)
}
ui <- fluidPage(
titlePanel("Keep a download log"),
sidebarLayout(
sidebarPanel(
actionButton("inccount","Increment Count"),
actionButton("getcount","Refresh Summary"),
actionButton("showlog","Show Log"),
downloadButton("dodownload", "Save to .csv")
),
mainPanel(
h2("Summary of Download Log"),
verbatimTextOutput("showcount"),
h2("Dump of Download Log"),
verbatimTextOutput("loglog")
)
)
)
server <- function(input, output,session) {
observeEvent(input$inccount,{
print("writetolog")
writetolog(1,session$token,"inc count")
})
output$showcount <- renderPrint({
input$getcount
rv <- getcounts()
time <- format(Sys.time(), "%Y-%m-%d %H:%M:%S %Z")
print(sprintf("%s - count:%d sessioncount:%d",time,rv$count,rv$sessioncount))
})
output$loglog <- renderPrint({
input$showlog
if (!file.exists(logfname)) return(NULL)
ldf <- read.csv(logfname)
print(ldf)
})
output$dodownload<-downloadHandler(
filename = function() {
paste(input$table_name, '.csv', sep='')
},
content = function(file) {
write.csv(mtcars, file)
writetolog(1,session$token,"save file")
}
)
}
shinyApp(ui = ui, server = server)
屏幕快照: “shinyapp.oi”
在csv中存储会话值是有意义的,并且为唯一ID进行过滤对于下载计数器来说非常合适。我发现'downloadButton'工作在w /'downloadHandler'而不是'actionButton','observeEvent'不会听'downloadButton'或'downloadHandler'。任何想法如何让'observeEvent'听'downloadButton'? –
谢谢加载!完美的作品,但它必须触发'写入(1,会话$令牌)'两次。点击按钮后,点击次数会增加,点击保存时再次点击。 –
当然,你不要在两个地方调用它? –
- 1. 下载次数Windows商店
- 2. 下载次数SQL查询
- 3. 如何在android中添加下载计数器(下载次数)?
- 4. Drupal下载计数模块 - 如何计算下载次数
- 5. 多次下载flex
- 6. Apk下载次数Google Play Store?
- 7. 找出ios应用程序安装次数/下载次数
- 8. silverlight XAP每次都下载
- 9. cordova下载插件两次
- 10. 多次下载的NSnotifications
- 11. ImageResizer多次下载图像?
- 12. shinyapps.io和github软件包
- 13. shinyapps.io不绘制地块
- 14. includeHTML for shiny,shinyApps.IO和Dropbox
- 15. ShinyApps.io与Github的对比
- 16. GGPLOT2图形质量上shinyapps.io
- 17. 上传CSV文件shinyApps.io
- 18. R shiny部署上shinyApps.io
- 19. 下载文件 - 防止第二次下载,直到第一次完成
- 20. java下载文件,防止第二次下载,直到第一次完成
- 21. Android让下载管理器一次下载一个文件?
- 22. 安卓下载管理器下载文件一次
- 23. 使用PHP下载文件 - 一次只下载一个文件!
- 24. 跟踪文件下载ASP.Net中的点击次数/计数
- 25. 下载数据
- 26. JSPDF第一次下载空白pdf文件,但下一步它下载正确
- 27. 如何下载音频一次?
- 28. 返回文件下载请求两次
- 29. 单次使用密码下载
- 30. 不止一次为Firebase下载Googleservices-info.plist
是什么 –
对不起,我的意思是[https://www.shinyapps.io/](https://www.shinyapps.io/) –
哦,我没有意识到这是在该网站上运行。这可能与重复计数有关。 –