music.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. /*
  3. Initialize random shit
  4. */
  5. include "data/config.php";
  6. include "lib/frontend.php";
  7. $frontend = new frontend();
  8. [$scraper, $filters] = $frontend->getscraperfilters("music");
  9. $get = $frontend->parsegetfilters($_GET, $filters);
  10. /*
  11. Captcha
  12. */
  13. include "lib/captcha_gen.php";
  14. new captcha($frontend, $get, $filters, "music", true);
  15. $payload = [
  16. "class" => "",
  17. "right-left" => "",
  18. "right-right" => "",
  19. "left" => ""
  20. ];
  21. try{
  22. $results = $scraper->music($get);
  23. }catch(Exception $error){
  24. $frontend->drawscrapererror($error->getMessage(), $get, "music");
  25. }
  26. $categories = [
  27. "song" => "",
  28. "author" => "",
  29. "playlist" => ""
  30. ];
  31. /*
  32. Set the main container
  33. */
  34. $main = null;
  35. if(count($results["song"]) !== 0){
  36. $main = "song";
  37. }elseif(count($results["author"]) !== 0){
  38. $main = "author";
  39. }elseif(count($results["playlist"]) !== 0){
  40. $main = "playlist";
  41. }else{
  42. // No results found!
  43. echo
  44. $frontend->drawerror(
  45. "Nobody here but us chickens!",
  46. 'Have you tried:' .
  47. '<ul>' .
  48. '<li>Using a different scraper</li>' .
  49. '<li>Using fewer keywords</li>' .
  50. '<li>Defining broader filters (Is NSFW turned off?)</li>' .
  51. '</ul>' .
  52. '</div>'
  53. );
  54. die();
  55. }
  56. /*
  57. Generate list of songs
  58. */
  59. foreach($categories as $name => $data){
  60. foreach($results[$name] as $item){
  61. $greentext = [];
  62. if(
  63. isset($item["date"]) &&
  64. $item["date"] !== null
  65. ){
  66. $greentext[] = date("jS M y @ g:ia", $item["date"]);
  67. }
  68. if(
  69. isset($item["views"]) &&
  70. $item["views"] !== null
  71. ){
  72. $views = number_format($item["views"]) . " views";
  73. $greentext[] = $views;
  74. }
  75. if(
  76. isset($item["followers"]) &&
  77. $item["followers"] !== null
  78. ){
  79. $greentext[] = number_format($item["followers"]) . " followers";
  80. }
  81. if(
  82. isset($item["author"]["name"]) &&
  83. $item["author"]["name"] !== null
  84. ){
  85. $greentext[] = $item["author"]["name"];
  86. }
  87. $greentext = implode(" • ", $greentext);
  88. if(
  89. isset($item["duration"]) &&
  90. $item["duration"] !== null
  91. ){
  92. $duration = $frontend->s_to_timestamp($item["duration"]);
  93. }else{
  94. $duration = null;
  95. }
  96. $tabindex = $name == $main ? true : false;
  97. $customhtml = null;
  98. if(
  99. $name == "song" &&
  100. $item["stream"]["endpoint"] !== null
  101. ){
  102. $customhtml =
  103. '<audio src="' . $item["stream"]["endpoint"] . '?s=' . urlencode($item["stream"]["url"]) . '" controls autostart="false" preload="none">';
  104. }
  105. $categories[$name] .= $frontend->drawtextresult($item, $greentext, $duration, $get["s"], $tabindex, $customhtml);
  106. }
  107. }
  108. $payload["left"] = $categories[$main];
  109. // dont re-draw the category
  110. unset($categories[$main]);
  111. /*
  112. Populate right handside
  113. */
  114. $i = 1;
  115. foreach($categories as $name => $value){
  116. if($value == ""){
  117. continue;
  118. }
  119. if($i % 2 === 1){
  120. $write = "right-left";
  121. }else{
  122. $write = "right-right";
  123. }
  124. $payload[$write] .=
  125. '<div class="answer-wrapper">' .
  126. '<input id="answer' . $i . '" class="spoiler" type="checkbox">' .
  127. '<div class="answer">' .
  128. '<div class="answer-title">' .
  129. '<a class="answer-title" href="?s=' . urlencode($get["s"]);
  130. switch($name){
  131. case "playlist":
  132. $payload[$write] .=
  133. '&type=playlist"><h2>Playlists</h2></a>';
  134. break;
  135. case "author":
  136. $payload[$write] .=
  137. '&type=people"><h2>Authors</h2></a>';
  138. break;
  139. }
  140. $payload[$write] .=
  141. '</div>' .
  142. $categories[$name] .
  143. '</div>' .
  144. '<label class="spoiler-button" for="answer' . $i . '"></label></div>';
  145. $i++;
  146. }
  147. if($i !== 1){
  148. $payload["class"] = " has-answer";
  149. }
  150. if($results["npt"] !== null){
  151. $payload["left"] .=
  152. '<a href="' . $frontend->htmlnextpage($get, $results["npt"], "music") . '" class="nextpage">Next page &gt;</a>';
  153. }
  154. echo $frontend->load("search.html", $payload);