Blame | Last modification | View Log | Download
<?php/************************************************************** TorrentFlux PHP Torrent Manager* www.torrentflux.com**************************************************************//*This file is part of TorrentFlux.TorrentFlux is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.TorrentFlux is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with TorrentFlux; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*//*v 1.01 - change in parsing routinev 1.02 - Mar 19, 06 - another change in the parsing. and updated paging*/class SearchEngine extends SearchEngineBase{function SearchEngine($cfg){$this->mainURL = "torrentportal.com";$this->altURL = "tp.searching.com";$this->mainTitle = "TorrentPortal";$this->engineName = "TorrentPortal";$this->author = "kboy";$this->version = "1.02";$this->updateURL = "http://www.torrentflux.com/forum/index.php?topic=875.0.html";$this->Initialize($cfg);}//----------------------------------------------------------------// Function to Get Main Categoriesfunction populateMainCategories(){$this->mainCatalog["0"] = "(all types)";$this->mainCatalog["1"] = "Games";$this->mainCatalog["2"] = "Movies";$this->mainCatalog["3"] = "TV";$this->mainCatalog["4"] = "Videos";$this->mainCatalog["5"] = "Apps";$this->mainCatalog["6"] = "Anime";$this->mainCatalog["7"] = "Audio";$this->mainCatalog["8"] = "Comics";$this->mainCatalog["9"] = "Unsorted";$this->mainCatalog["10"] = "Porn";}//----------------------------------------------------------------// Function to Make the Request (overriding base)function makeRequest($request){return parent::makeRequest($request, false);}//----------------------------------------------------------------// Function to get Latest..function getLatest(){$cat = getRequestVar('subGenre');$count = getRequestVar('count');if (empty($cat)) $cat = getRequestVar('cat');if(empty($cat) && empty($this->pg)){$request = "/new-torrents.php";}else{$request = "/torrents.php";}if(!empty($cat)){if(strpos($request,"?")){$request .= "&cat=".$cat;}else{$request .= "?cat=".$cat;}}if(!empty($count)){if(strpos($request,"?")){$request .= "&count=".$count;}else{$request .= "?count=".$count;}}if (!empty($this->pg)){if(strpos($request,"?")){$request .= "&page=" . $this->pg;}else{$request .= "?page=" . $this->pg;}}if ($this->makeRequest($request)){return $this->parseResponse();}else{return $this->msg;}}//----------------------------------------------------------------// Function to perform Search.function performSearch($searchTerm){$searchTerm = str_replace(" ", "+", $searchTerm);$request = "/torrents-search.php?search=".$searchTerm;if(!empty($cat)){$request .= "&cat=".$cat;}$count = getRequestVar('count');if(!empty($count)){$request .= "&count=".$count;}$onlyname = getRequestVar('onlyname');if (empty($onlyname)) $onlyname = "no";$request .= "&onlyname=".$onlyname;$incldead = getRequestVar('incldead');if (empty($incldead)) $incldead = "0";$request .= "&incldead=".$incldead;$request .= "&submit=";if (!empty($this->pg)){$request .= "&page=" . $this->pg;}if ($this->makeRequest($request,true)){return $this->parseResponse();}else{return $this->msg;}}//----------------------------------------------------------------// Override the base to show custom table header.// Function to setup the table headerfunction tableHeader(){$output = "<table width=\"100%\" cellpadding=3 cellspacing=0 border=0>";$output .= "<br>\n";$output .= "<tr bgcolor=\"".$this->cfg["table_header_bg"]."\">";$output .= " <td> </td>";$output .= " <td><strong>Torrent Name</strong> (";$tmpURI = str_replace(array("?hideSeedless=yes","&hideSeedless=yes","?hideSeedless=no","&hideSeedless=no"),"",$_SERVER["REQUEST_URI"]);// Check to see if Question mark is there.if (strpos($tmpURI,'?')){$tmpURI .= "&";}else{$tmpURI .= "?";}if($this->hideSeedless == "yes"){$output .= "<a href=\"". $tmpURI . "hideSeedless=no\">Show Seedless</a>";}else{$output .= "<a href=\"". $tmpURI . "hideSeedless=yes\">Hide Seedless</a>";}$output .= ")</td>";$output .= " <td><strong>Category</strong></td>";$output .= " <td align=center><strong> Size</strong></td>";$output .= " <td><strong>Seeds</strong></td>";$output .= " <td><strong>Peers</strong></td>";$output .= " <td><strong>Health</strong></td>";$output .= "</tr>\n";return $output;}//----------------------------------------------------------------// Function to parse the response.function parseResponse(){$output = $this->tableHeader();$thing = $this->htmlPage;// We got a response so display it.// Chop the front end off.while (is_integer(strpos($thing,">Health"))){$thing = substr($thing,strpos($thing,">Health"));$thing = substr($thing,strpos($thing,"<tr"));$tmpList = substr($thing,0,strpos($thing,"</table>"));// ok so now we have the listing.$tmpListArr = split("<tr>",$tmpList);$bg = $this->cfg["bgLight"];foreach($tmpListArr as $key =>$value){$buildLine = true;if (strpos($value,"/download/")){$ts = new tPort($value);// Determine if we should build this outputif (is_int(array_search($ts->MainCategory,$this->catFilter))){$buildLine = false;}if ($this->hideSeedless == "yes"){if($ts->Seeds == "N/A" || $ts->Seeds == "0"){$buildLine = false;}}if (!empty($ts->torrentFile) && $buildLine) {$output .= trim($ts->BuildOutput($bg, $this->searchURL()));// ok switch colors.if ($bg == $this->cfg["bgLight"]){$bg = $this->cfg["bgDark"];}else{$bg = $this->cfg["bgLight"];}}}}// set thing to end of this table.$thing = substr($thing,strpos($thing,"</table>"));}$output .= "</table>";// is there paging at the bottom?/*<p align="center"><b>1 - 25</b> | <a href="?search=test&count=87&page=1"><b>26 - 50</b></a> | <a href="?search=test&count=87&page=2"><b>51 - 75</b></a> | <a href="?search=test&count=87&page=3"><b>76 - 87</b></a><br /><b><< Prev</b> <a href="?search=test&count=87&page=1"><b>Next >></b></a></p>*/if (strpos($thing, "page=") != false){// Yes, then lets grab it and display it! ;)$thing = substr($thing,strpos($thing,"<p align=\"center\">")+strlen("<p align=\"center\">"));$pages = substr($thing,0,strpos($thing,"</p>"));//$output .= $pages;if(strpos($this->curRequest,"LATEST")){if(strpos($pages,"cat=")){$pages = str_replace("page=","pg=",str_replace("?",$this->searchURL()."&LATEST=1&",$pages));}else{$pages = str_replace("?page=",$this->searchURL()."&LATEST=1&pg=",$pages);}}else{if(strpos($pages,"\"?")){$pages = str_replace("?",$this->searchURL()."&",$pages);}if(strpos($pages,"?search=")){$pages = str_replace("?search=",$this->searchURL()."&searchterm=",$pages);}if(strpos($pages,"search=")){$pages = str_replace("search=","searchterm=",$pages);}}if(strpos($pages,"torrents.php?")){$pages = str_replace("torrents.php?",$this->searchURL()."&",$pages);}if(strpos($pages,"torrents-search.php?")){$pages = str_replace("torrents-search.php?",$this->searchURL()."&",$pages);}$pages = str_replace("page=","pg=",$pages);$output .= "<div align=center>".$pages."</div>";}return $output;}}// This is a worker class that takes in a row in a table and parses it.class tPort{var $torrentName = "";var $torrentDisplayName = "";var $torrentFile = "";var $torrentSize = "";var $torrentStatus = "";var $MainId = "";var $MainCategory = "";var $fileCount = "";var $Seeds = "";var $Peers = "";var $Data = "";var $torrentRating = "";function tPort( $htmlLine ){if (strlen($htmlLine) > 0){$this->Data = $htmlLine;// Cleanup any bugs in the HTML$htmlLine = eregi_replace("</td>\n</td>",'</td>',$htmlLine);// Chunck up the row into columns.$tmpListArr = split("<td ",$htmlLine);if(count($tmpListArr) > 8){$tmpStr = substr($tmpListArr["1"],strpos($tmpListArr["1"],"href=\"")+strlen("href=\"")); // Download Link$this->torrentFile = "http://www.torrentportal.com".substr($tmpStr,0,strpos($tmpStr,"\""));$this->MainCategory = $this->cleanLine("<td ".$tmpListArr["3"]."</td>"); // MainCategory$tmpStr = substr($tmpListArr["2"],strpos($tmpListArr["2"],"cat=")+strlen("cat=")); // Main Id$this->MainId = substr($tmpStr,0,strpos($tmpStr,"\""));$this->torrentName = $this->cleanLine("<td ".$tmpListArr["4"]."</td>"); // TorrentName$this->torrentRating = $this->cleanLine("<td ".$tmpListArr["5"]."</td>"); // Rating$this->torrentSize = $this->cleanLine("<td ".$tmpListArr["6"]."</td>"); // Size of File$this->Seeds = $this->cleanLine("<td ".$tmpListArr["7"]."</td>"); // Seeds$this->Peers = $this->cleanLine("<td ".$tmpListArr["8"]."</td>"); // Leech$tmpStr = substr($tmpListArr["9"],strpos($tmpListArr["9"],"Health ")+strlen("Health ")); // Health$tmpStr = substr($tmpStr,0,strpos($tmpStr,"\""));$tmpArr = split("/",$tmpStr);if ($tmpArr["1"] > 0 ){$this->torrentStatus = ($tmpArr["0"] / $tmpArr["1"]) * 100 . "%";}else{$this->torrentStatus = "0%";}if ($this->Peers == ''){$this->Peers = "N/A";if (empty($this->Seeds)) $this->Seeds = "N/A";}if ($this->Seeds == '') $this->Seeds = "N/A";$this->torrentDisplayName = $this->torrentName;if(strlen($this->torrentDisplayName) > 50){$this->torrentDisplayName = substr($this->torrentDisplayName,0,50)."...";}}}}function cleanLine($stringIn,$tags=''){if(empty($tags))return trim(str_replace(array(" "," ")," ",strip_tags($stringIn)));elsereturn trim(str_replace(array(" "," ")," ",strip_tags($stringIn,$tags)));}//----------------------------------------------------------------// Function to build output for the table.function BuildOutput($bg, $searchURL = ''){$output = "<tr>\n";$output .= " <td width=16 bgcolor=\"".$bg."\"><a href=\"index.php?url_upload=".$this->torrentFile."\"><img src=\"images/download_owner.gif\" width=\"16\" height=\"16\" title=\"".$this->torrentName."\" border=0></a></td>\n";$output .= " <td bgcolor=\"".$bg."\"><a href=\"index.php?url_upload=".$this->torrentFile."\" title=\"".$this->torrentName."\">".$this->torrentDisplayName."</a></td>\n";if (strlen($this->MainCategory) > 1){$genre = "<a href=\"".$searchURL."&mainGenre=".$this->MainId."\">".$this->MainCategory."</a>";}else{$genre = "";}$output .= " <td bgcolor=\"".$bg."\">". $genre ."</td>\n";$output .= " <td bgcolor=\"".$bg."\" align=right>".$this->torrentSize."</td>\n";$output .= " <td bgcolor=\"".$bg."\" align=center>".$this->Seeds."</td>\n";$output .= " <td bgcolor=\"".$bg."\" align=center>".$this->Peers."</td>\n";$output .= " <td bgcolor=\"".$bg."\" align=center>".$this->torrentStatus."</td>\n";$output .= "</tr>\n";return $output;}}?>