Blog Posts » General » [PHP] 4shared Search Engine

[PHP] 4shared Search Engine

Demo: http://test.anggit.com/search.php

Unfinished project, working!

[search.php]
[Textarea][RAW][Download]

  1. <h2>Search Files</h2>
  2. <form id="searchform" action="search.php" method="get">
  3. <div>
  4. <input type="text" size="20" name="q" value="" />
  5. <input id="searchsubmit" type="submit" value="Submit" />
  6. </div>
  7. </form>
  8. <?php
  9. # (c) 2013 http://anggit.com
  10. function get_contents($url) {
  11. $url = stripos($url, 'http://') === 0 ? $url : 'http://'.$url;
  12. $useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28';
  13. $timeout = 10;
  14. switch(true) {
  15. case function_exists('curl_init'):
  16.     $ch = curl_init();
  17.     curl_setopt($ch, CURLOPT_URL, $url);
  18.     curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  19.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  20.     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  21.     $contents = curl_exec($ch) or die(curl_error($ch));
  22.     return $contents;
  23.     curl_close($ch);
  24. break;
  25. case function_exists('fsockopen'):
  26.     $host = parse_url($url, PHP_URL_HOST);
  27.     $port = parse_url($url, PHP_URL_PORT) ? parse_url($url, PHP_URL_PORT) : 80;
  28.     $path = parse_url($url, PHP_URL_PATH) ? parse_url($url, PHP_URL_PATH) : '/';
  29.     $fp = @fsockopen($host$port$errno$errstr$timeout) or die($errstr);
  30.     stream_set_timeout($fp$timeout);
  31.     $header = "GET $path HTTP/1.0\r\n";
  32.     $header .= "Host: $host\r\n";
  33.     $header .= "User-Agent: $useragent\r\n";
  34.     $header .= "Connection: Close\r\n\r\n";
  35.     fwrite($fp$header);
  36.     while(!feof($fp)) {
  37.     @$contents .= fgets($fp, 1024);
  38.     }
  39.     fclose($fp);
  40.     $contents = substr($contentsstrpos($contents, '<'));
  41.     return $contents;
  42. break;
  43. case function_exists('file_get_contents'):
  44.     $opts = array('http' => array('header' =>  'User-Agent: '.$useragent.''));
  45.     $context = stream_context_create($opts);
  46.     $contents = @file_get_contents($url, false, $context) or die('Error');
  47.     return $contents;
  48. break;
  49. default:
  50.     return 'Please enable curl, fsockopen or file_get_contents!';
  51. break;
  52. }
  53. }
  54. $max = 10; // last search max
  55. $file = 'last.txt'; // last search file
  56. $data = file($file);
  57. $count = count($data);
  58. //* Begin Display Last Search *//
  59. echo '<div><p><b>Last Search:</b><br />';
  60. $titles = array_reverse($data);
  61. foreach($titles as $title) {
  62. $title = rtrim($title);
  63. echo '<a href="search.php?q='.urlencode($title).'">'.htmlspecialchars($title).'</a> / ';
  64. }
  65. echo '</p></div>';
  66. //* End Display Last Search *//
  67. $q = @urlencode($_GET['q']);
  68. $dl = @$_POST['dl'];
  69. if ($q) {
  70. //* Begin Write Last Search *//
  71. $q1 = $_GET['q']."\r\n";
  72. if (in_array($q1$data)) {
  73. unset($data[array_search($q1$data)]);
  74. $write = implode($data).$q1;
  75. $fh = fopen($file, 'w');
  76. fwrite($fh$write);
  77. fclose($fh);
  78. }
  79. else {
  80. if ($count >= $maxarray_shift($data);
  81. array_push($data$q1);
  82. $write = implode($data);
  83. $fh = fopen($file, 'w');
  84. fwrite($fh$write);
  85. fclose($fh);
  86. }
  87. if ($count > $max) {
  88. $fh = fopen($file, 'w');
  89. $write = implode(array_slice($data$count-$max)).$q1;
  90. fwrite($fh$write);
  91. fclose($fh);
  92. }
  93. //* End Write Last Search *//
  94. $p = @intval($_GET['p']);
  95. $start = 10 * $p;
  96. $contents = get_contents('http://search.4shared.com/network/searchXml.jsp?q='.$q.'&start='.$start);
  97. $tf = explode('<total-files>', $contents);
  98. $tf = strtok($tf[1], '<');
  99. $pt = explode('<pages-total>', $contents);
  100. $tp = strtok($pt[1], '<');
  101. $name = explode('<name>', $contents);
  102. $size = explode('<size>', $contents);
  103. $url = explode('<url>', $contents);
  104. $count = count($name) - 1;
  105. echo '<div><b>Files Found:</b> '.$tf.' ('.($start+1).'-'.($start+$count).')</div><ul>';
  106. if ($count) {
  107. for($i=1; $i<=$count$i++) {
  108. $file = strtok($name[$i], '<');
  109. $url_encoded = base64_encode(gzdeflate(trim(strtok($url[$i], '<')), 9));
  110. echo '<li><a href="search.php?q='.urlencode(htmlspecialchars_decode($file)).'">'.$file.'</a> ('.strtok($size[$i], '<').')';
  111. echo (pathinfo(strtolower($file), PATHINFO_EXTENSION) == 'mp3') ? '<ul><li><form action="/search.php" method="post"><div><input type="hidden" name="dl" type="text" value="'.$url_encoded.'" /><input type="submit" value="Download" style="background-color: #FFF; border: 0; padding: 0; color: blue;" /></div></form></li></ul></li>' : '<ul><li>Download</li></ul></li>';
  112. }
  113. }
  114. else {
  115. echo '<li>No file(s) match for "<b>'.htmlspecialchars($_GET['q']).'</b>"</li>';
  116. }
  117. echo '</ul><div id="navigation">';
  118. //* Begin Pagination *//
  119. $lpp = 5; // link pagination to show
  120. $lps = floor($p/$lpp) * $lpp; // link pagination start
  121. $lpf = $lps + $lpp; // link pagination finish
  122. if ($lps > 0) echo '<a href="search.php?q='.$q.'&amp;p='.($lps-1).'">[&lt;]</a> ';
  123. for($lps$lps<$lpf$lps++) {
  124. if ($lps == $p) echo ' ['.$p.'] ';
  125. elseif ($lps < 0) echo '';
  126. elseif ($lps > $tp) echo '';
  127. else echo '<a href="search.php?q='.$q.'&amp;p='.$lps.'">'.$lps.'</a> ';
  128. }
  129. if ($lpf < $tp) echo '<a href="search.php?q='.$q.'&p='.$lpf.'">[&gt;]</a> ';
  130. //* End Pagination *//
  131. echo '</div><!-- navigation -->';
  132. }
  133. elseif ($dl) {
  134. $url = gzinflate(base64_decode(($dl)));
  135. $html = get_contents($url);
  136. libxml_use_internal_errors(true);
  137. $doc = new DomDocument();
  138. $doc->loadHTML($html);
  139. $xpath = new DOMXPath($doc);
  140. $metas = $xpath->query('//meta[@property="og:url"]');
  141. foreach($metas as $meta$property = $meta->getAttribute('content');
  142. echo '<div><a href="'.$property.'">Download now!</a></div>';
  143. }
  144. ?>
  145. <div id="footer">
  146. <p>&copy; 2013 <a href="http://anggit.com">anggit.com</a><p>
  147. </div><!-- footer -->