A graphTV clone
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

95 Zeilen
2.9KB

  1. library(tidyverse)
  2. library(httr)
  3. library(rvest)
  4. library(plotly)
  5. library(jsonlite)
  6. library(knitr)
  7. key <- "?api_key=32e0ed1416c58777f986f3f33751fc22"
  8. tmdb_url <- "http://api.themoviedb.org/3/"
  9. ui <- fluidPage(
  10. inputPanel(width = "20%", height = "100%",
  11. textInput("show_search", "Search show"),
  12. uiOutput("show_choice", width = "50%")
  13. ),
  14. plotlyOutput("show_graph", width = "100%", height = "800px")
  15. )
  16. server <- function(input, output, session)
  17. {
  18. shows <- eventReactive(input$show_search, {
  19. req(input$show_search)
  20. serie <- input$show_search %>% url_escape
  21. GET(str_c(tmdb_url, "search/tv", key, "&query=", serie)) %>%
  22. content(as = "text") %>%
  23. fromJSON -> res
  24. #res$results$poster_path
  25. res$results$id %>%
  26. as.list %>%
  27. setNames(res$results$original_name)
  28. })
  29. output$show_choice <- renderUI({
  30. req(shows())
  31. selectizeInput("show", "Please choose…", shows())
  32. })
  33. output$show_graph <- renderPlotly({
  34. req(input$show)
  35. show_id <- input$show
  36. GET(str_c(tmdb_url, "tv/", show_id, key)) %>%
  37. content(as = "text") %>%
  38. fromJSON -> res
  39. res$backdrop_path
  40. 1:res$number_of_seasons -> seasons
  41. res$vote_average
  42. seasons %>%
  43. map(~ GET(str_c(tmdb_url, "tv/", show_id, "/season/", ., key)) %>%
  44. content(as = "text") %>%
  45. fromJSON) -> res
  46. res %>%
  47. map("episodes") %>%
  48. reduce(bind_rows) %>%
  49. select(season_number, episode_number, name, still_path, vote_average, vote_count) -> episodes
  50. episodes %>%
  51. by(.$season_number, function(x){
  52. fit <- lm(vote_average ~ episode_number, data = x)
  53. x %>%
  54. plot_ly(hoverinfo = "text",
  55. text = ~str_c("S", season_number, "E", episode_number, " - ", name, "<br>",
  56. "Rating: ", vote_average, "(", vote_count, " votes)<br>")) %>%
  57. add_trace(data = x, x = ~episode_number, y = ~vote_average, mode = "markers") %>%
  58. add_trace(data = x, x = ~episode_number, y = fitted(fit), mode = "lines") %>%
  59. layout(xaxis = list(tick0 = 0, dtick = 1),
  60. yaxis = list(title = "Rating"))
  61. }) %>%
  62. subplot(shareY = T, nrows = 1, margin = 0) %>%
  63. hide_legend
  64. # episodes %>%
  65. # arrange(season_number, episode_number) %>%
  66. # add_rownames(var = "ep") %>%
  67. # mutate(ep = ep %>% as.numeric, season_number = season_number %>% as.factor) %>%
  68. # ggplot() +
  69. # aes(x = ep, y = vote_average, group = season_number, color = season_number) +
  70. # geom_point(aes(text = name)) +
  71. # geom_smooth(method = "lm") +
  72. # xlab("Episode") +
  73. # ylab("Rating")
  74. })
  75. }
  76. shinyApp(ui = ui, server = server)