10

私の最初の光沢のあるアプリを展開します -- ユーザーが html ファイルをアップロードし、それを解析して LinkedIn の共有/メンション/いいね! に関する情報を取得できるシンプルな html パーサー。

アプリはローカルで正常に実行され (デプロイ前にテスト済み)、Rstudio はデプロイでエラーを表示しません。ただし、shinyapps リンクを使用して実行すると、アップロードが完了していないように見え、何も出力されません。

現地での様子

アプリを開く

始める

.html ファイルのアップロード

ここに画像の説明を入力

Shinyapps.io での表示

ここに画像の説明を入力

識別情報が含まれているため、ファイル名を編集しました。

コードは次のとおりです。

library(rvest)
library(shiny)
ui <- fluidPage(
  # theme = "https://bootswatch.com/4/superhero/bootstrap.css",
  title = "LinkedIn Report",

  fluidRow(
    column(12,
           fileInput("infile", "Choose .html file", 
              accept = "text/html", multiple = F) )
  ),

  fluidRow(
    column(12,
           tableOutput("savedLocation") )
  ), 

  fluidRow(
    column(12,
           tableOutput("parsedData") ),
    column(8, 
           downloadButton("downloadData", "Download"))
  )

)


server <- function(input, output){
  dd <- reactive(input$infile)

  output$savedLocation <- renderTable({
    if(is.null(input$infile)){
      return(data.frame(Elapsed = character(), 
                        Time = character(),
                        Name = character(), 
                        Action = character()))
    }else{
      return(dd())
    }
  })

  actual_data <- reactive({
    if(is.null(input$infile)){
      asdad <- data.frame(Elapsed = character(), 
                          Time = character(),
                          Name = character(), 
                          Action = character())
    }else{
      notifications <- read_html(input$infile$datapath)
      name_action <- gsub("\\n", "", notifications %>% html_nodes(".nt-card__text--3-line") %>% html_text())
      tme <- trimws(gsub("\\n", "", notifications %>% html_nodes(".nt-card__time-ago") %>% html_text()))
      action <- notifications %>% html_nodes(".nt-card__text--3-line strong") %>% html_text
      nme <- trimws( sapply(1:length(name_action), function(z) gsub(action[z], "", name_action[z])))


  asdad <- data.frame(Elapsed = tme, Time = elap(tme), Name = nme, Action = action)
    }
    return(asdad)
  })

  output$parsedData <- renderTable({ actual_data()})

  output$downloadData <- downloadHandler(
    filename = "yourdata.csv", 
    content = function(filename){ write.table(actual_data(), file = filename, 
                                              row.names = F, sep = ",")}
  )
}

shinyApp(ui = ui, server = server)

これは、私が無料のアカウントを持っているという事実と関係がありますか? アップロード中のファイルのサイズは 420kb 未満です。

次の質問を見てきましたが、上記には対応していません。

  1. Shinyapps.io での光沢のあるアプリの展開エラー
  2. 光沢のあるアプリのデプロイでエラーが発生しました
  3. 光沢のあるアプリを光沢のあるサーバーにデプロイできません

Rstudio には、 httpsfileInput ://shiny.rstudio.com/articles/upload.html で見つけることができる同様の例があります。

4

2 に答える 2

0

後世のためのもう1つのほぼ無回答。コンテキストとして、shinyapps.io で以前にこの問題に数回遭遇しましたが、RStudio から実行している場合、Mac または Windows では決して遭遇しませんでした。特に、圧縮ファイル (場合によっては圧縮された .txt ファイル、他の場合は ESRI シェープファイル) でこれを取得しました。アップロード進行状況バーに表示されるフォーマットされた HTML を以下に示します。

VPN とプロキシを頻繁に使用する私は、アップロード プロセス中に接続が切断されると、この問題が発生する可能性があることに気付きました。インターネット接続に問題がある可能性がある場合は、調査いたします。


  <!DOCTYPE HTML>
<html lang="en">
   <head>
      <title>Error</title>
      <style type="text/css"> body { color: #222; background: #ddd; font-family: sans-serif; margin: 20px; } h1, h2, pre { margin: 20px; } .box { background: white; overflow: hidden; box-shadow: 1px 1px 8px gray; border-radius: 1px; } .footer { text-align: center; font-family: serif; margin: 10px; font-size: 12px; color: #A7A7A7; } </style>
   </head>
   <body>
      <div class="box">
         <h1>Error</h1>
         <pre>/opt/openresty/luajit/share/lua/5.1/lapis/application.lua:73: attempt to index local &#039;curr&#039; (a string value)</pre>
         <h2>Traceback</h2>
         <pre> stack traceback: /opt/openresty/luajit/share/lua/5.1/lapis/application.lua:73: in function &#039;add_params&#039; /opt/openresty/luajit/share/lua/5.1/lapis/application.lua:394: in function &#039;handler&#039; /opt/openresty/luajit/share/lua/5.1/lapis/application.lua:416: in function &lt;/opt/openresty/luajit/share/lua/5.1/lapis/application.lua:412&gt; [C]: in function &#039;xpcall&#039; /opt/openresty/luajit/share/lua/5.1/lapis/application.lua:412: in function &#039;dispatch&#039; /opt/openresty/luajit/share/lua/5.1/lapis/nginx.lua:181: in function &#039;serve&#039; access_by_lua(nginx.conf:232):1: in function &lt;access_by_lua(nginx.conf:232):1&gt;</pre>
      </div>
      <div class="footer">lapis 1.0.4</div>
   </body>
</html>
于 2021-02-23T10:26:06.450 に答える
0

それは答えではありませんが、それでも役立つかもしれません。あなたのコードを書き直したので、それを実行して、shinyappsio にアップロードすることもできます。

actual_dataリアクティブを次のように書き直しました。

 actual_data <- reactive({
    if(is.null(input$infile)){
      asdad <- data.frame(Elapsed = character(), 
                          Time = character(),
                          Name = character(), 
                          Action = character())
    }else{
      asdad1 <- read_html(input$infile$datapath)
      asdad2 <- html_nodes(x = asdad1, css = "#titleCast span.itemprop")
      asdad <- html_text(asdad2)
  }
    return(asdad)
  })

そして、このウェブサイトのhtmlを使用しました。

アプリをローカルで実行すると問題なく動作しますが、shinyapps.io にアップロードした後、Firefox でエラーが発生します (500 - 内部サーバー エラー):

エラー /usr/share/luajit/share/lua/5.1/lapis/application.lua:73: ローカル 'curr' (文字列値) のインデックスを作成しようとしました

トレースバック

スタック トレースバック:
/usr/share/luajit/share/lua/5.1/lapis/application.lua:73: 関数 'add_params' 内
/usr/share/luajit/share/lua/5.1/lapis/application.lua:394:関数 'handler' 内 /usr/share/luajit/share/lua/5.1/lapis/application.lua:416: 関数内 [C]: 関数 'xpcall' 内
/usr/share/luajit/share/lua/5.1/ lapis/application.lua:412: 関数 'dispatch' /usr/share/luajit/share/lua/5.1/lapis/nginx.lua:181: 関数 'serve' で access_by_lua(redx.conf:162):1:機能中

Linuxでアプリを試しましたか?Shinyapps.io は Linux に基づいており、アプリに他のパッケージを含めたり、Linux システムにソフトウェアをインストールしたりする必要があるかもしれませんが、それが可能かどうかはわかりません。

fileUpload が html ではなく csv ファイルをアップロードすると、ローカルでも、shinyapps.io でも、すべてが期待どおりに機能します。したがって、問題はhtmlファイルまたはhtmlスクレイピングにあるようです。

于 2018-05-22T20:31:32.990 に答える