videos.php 4.2 KB

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