| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544 |
- <?php
- /* $Id: TorrentSpyEngine.php 3282 2007-11-18 17:21:19Z warion $ */
- /*************************************************************
- * TorrentFlux PHP Torrent Manager
- * www.torrentflux.com
- **************************************************************/
- /*
- This file is part of TorrentFlux.
- TorrentFlux is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the 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 of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with TorrentFlux; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- /*
- v 1.01 - Changed Main Categories. (removed TV, changed Movies to Video)
- v 1.02 - Mar 19, 06 - Updated pageing.
- v 1.03 - May 16, 06 - They changed there URL for Searching back to their domain.
- v 1.04 - Sep 21, 06 - Fix for Bug found by batmark
- v 1.04a - Nov 18, 07 - Quick fix for 'download.asp?id=' URLs not working anymore.
- */
- class SearchEngine extends SearchEngineBase
- {
- function SearchEngine($cfg)
- {
- $this->mainURL = "torrentspy.com";
- $this->altURL = "www.torrentspy.com";
- $this->mainTitle = "TorrentSpy";
- $this->engineName = "TorrentSpy";
- $this->author = "kboy";
- $this->version = "1.04-tfb";
- $this->updateURL = "http://www.torrentflux.com/forum/index.php/topic,874.0.html";
- $this->Initialize($cfg);
- }
- function populateMainCategories()
- {
- $this->mainCatalog["11"] = "Adult";
- $this->mainCatalog["6"] = "Anime";
- $this->mainCatalog["1"] = "Applications";
- $this->mainCatalog["2"] = "Games";
- $this->mainCatalog["13"] = "Handheld";
- $this->mainCatalog["7"] = "Hentai";
- $this->mainCatalog["8"] = "Linux";
- $this->mainCatalog["9"] = "Macintosh";
- $this->mainCatalog["10"] = "Misc";
- $this->mainCatalog["3"] = "Music";
- $this->mainCatalog["14"] = "Non-English";
- $this->mainCatalog["12"] = "Unsorted/Other";
- $this->mainCatalog["4"] = "Videos";
- }
- //----------------------------------------------------------------
- // Function to Get Sub Categories
- function getSubCategories($mainGenre)
- {
- $output = array();
- if (strpos($mainGenre,'/'))
- {
- $request = '/directory/' . $mainGenre;
- }
- else
- {
- $request = '/directory.asp?mode=main&id=' . $mainGenre;
- }
- $mainGenreName = $this->GetMainCatName($mainGenre);
- if ($this->makeRequest($request))
- {
- $thing = $this->htmlPage;
- while (is_integer(strpos($thing,"href=\"/directory/")))
- {
- $thing = substr($thing,strpos($thing,"href=\"/directory/")+strlen("href=\"/directory/"));
- $tmpStr = str_replace(array("%2f","+")," ",substr($thing,0,strpos($thing,"\"")));
- $tmpStr = str_replace("%2d","-",$tmpStr);
- $subid = $tmpStr;
- $thing = substr($thing,strpos($thing,">")+strlen(">"));
- $subname = trim(substr($thing,0,strpos($thing,"<")));
- if($subname != $mainGenreName)
- {
- $output[$subid] = $subname;
- }
- }
- }
- return $output;
- }
- //----------------------------------------------------------------
- // Function to Make the Request (overriding base)
- function makeRequest($request)
- {
- if (strpos($request,"search.asp"))
- {
- return parent::makeRequest($request, true);
- }
- else
- {
- return parent::makeRequest($request, false);
- }
- }
- //----------------------------------------------------------------
- // Function to get Latest..
- function getLatest()
- {
- $request = '/latest.asp';
- // Added mode to support yesterday request.
- if (array_key_exists("mode",$_REQUEST))
- {
- $request .='?mode='.$_REQUEST["mode"];
- if (array_key_exists("id",$_REQUEST))
- {
- $request .= '&id=' . $_REQUEST["id"];
- }
- if (!empty($this->pg))
- {
- $request .= '&pg=' . $this->pg;
- }
- }
- elseif (array_key_exists("subGenre",$_REQUEST))
- {
- if (strpos($_REQUEST["subGenre"],"/")>0)
- {
- $request ='/directory.asp?mode=sub&id=' . substr($_REQUEST["subGenre"],0,strpos($_REQUEST["subGenre"],"/"));
- }
- else
- {
- $request ='/directory.asp?mode=sub&id=' . $_REQUEST["subGenre"];
- }
- if (!empty($this->pg))
- {
- $request .= '&pg=' . $this->pg;
- }
- }
- elseif (!empty($this->pg))
- {
- $request .= '?pg=' . $this->pg;
- }
- if ($this->makeRequest($request))
- {
- return $this->parseResponse();
- }
- else
- {
- return $this->msg;
- }
- }
- //----------------------------------------------------------------
- // Function to perform Search.
- function performSearch($searchTerm)
- {
- if (array_key_exists("directory",$_REQUEST))
- {
- $request = "/directory/" . str_replace("%2F","/",urlencode($_REQUEST["directory"]));
- if (!empty($this->pg))
- {
- $request .= "?pg=" . $this->pg;
- }
- }
- elseif (array_key_exists("getMain",$_REQUEST))
- {
- $request = '/directory';
- }
- elseif (array_key_exists("mainGenre",$_REQUEST))
- {
- if (strpos($_REQUEST["mainGenre"],'/'))
- {
- $request .= '/' . $_REQUEST["mainGenre"];
- }
- else
- {
- if (!empty($this->pg))
- {
- $request = '/directory.asp?mode=main&id=' . $_REQUEST["mainGenre"] . '&pg=' . $this->pg;
- }
- else
- {
- $request = '/directory.asp?mode=main&id=' . $_REQUEST["mainGenre"];
- }
- }
- }
- elseif (array_key_exists("subGenre",$_REQUEST))
- {
- if (strpos($_REQUEST["subGenre"],'/'))
- {
- $request = "/directory/" . $_REQUEST["subGenre"];
- }
- else
- {
- if ($_REQUEST["subGenre"] != "")
- {
- if (!empty($this->pg))
- {
- $request = '/directory.asp?mode=sub&id=' . $_REQUEST["subGenre"] . '&pg=' . $this->pg;
- }
- else
- {
- $request = '/directory.asp?mode=sub&id=' . $_REQUEST["subGenre"];
- }
- }
- }
- }
- else
- {
- $searchTerm = str_replace(" ", "+", $searchTerm);
- if ( $this->pg != '' && array_key_exists("db",$_REQUEST))
- {
- $request = '/search.asp?h=&query=' . $searchTerm . '&pg=' . $this->pg . '&db=' . $_REQUEST["db"] . '&submit.x=24&submit.y=10';
- }
- else
- {
- $request = '/search.asp?h=&query=' . $searchTerm . '&submit.x=24&submit.y=10';
- }
- }
- if ($this->makeRequest($request))
- {
- return $this->parseResponse();
- }
- else
- {
- return $this->msg;
- }
- }
- //----------------------------------------------------------------
- // Function to parse the response.
- function parseResponse()
- {
- $output = $this->tableHeader();
- $thing = $this->htmlPage;
- if (strpos($thing, "experiencing high load") > 0)
- {
- $output .= "<b>We're experiencing high load at this time. Please use the directory until further notice.</b>";
- }else{
- // 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 = explode("</tr>",$tmpList);
- $langFile = $this->cfg['_FILE'];
- $bg = $this->cfg["bgLight"];
- foreach($tmpListArr as $key =>$value)
- {
- $buildLine = true;
- if (strpos($value,"/torrent/"))
- {
- $ts = new tSpy($value);
- // Determine if we should build this output
- if (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,$langFile,$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?
- if (strpos($thing, "<p class=\"pagenav\">Pages (") !== false)
- {
- // Yes, then lets grab it and display it! ;)
- $thing = substr($thing,strpos($thing,"<p class=\"pagenav\">Pages (")+strlen("<p class=\"pagenav\">"));
- $pages = substr($thing,0,strpos($thing,"</p>"));
- $page1 = substr($pages,0,strpos($pages,"<img"));
- $page2 = substr($pages,strlen($page1));
- $page2 = substr($page2,strpos($page2,'>')+1);
- $pages = $page1.$page2;
- if (strpos($pages,"directory"))
- {
- $pages = str_replace("?","&",$pages);
- $pages = str_replace("/directory/", $this->searchURL()."&directory=", $pages);
- }
- elseif (strpos($pages, "search.asp?"))
- {
- $pages = str_replace("search.asp?", $this->searchURL()."&", $pages);
- }
- elseif (strpos($pages, "/search/"))
- {
- $pages = str_replace("&","&",$pages);
- $pages = str_replace("?","&",$pages);
- $pages = str_replace("/search/", $this->searchURL()."&searchterm=", $pages);
- }
- elseif (strpos($pages,"latest.asp?"))
- {
- $pages = str_replace("latest.asp?mode=", $this->searchURL()."&LATEST=1&mode=", $pages);
- if (!array_key_exists("mode",$_REQUEST))
- {
- $pages .= "<br><a href=\"".$this->searchURL()."&LATEST=1&mode=yesterday\" title=\"Yesterday's Latest\">Yesterday's Latest</a>";
- }
- elseif (! $_REQUEST["mode"] == "yesterday")
- {
- $pages .= "<br><a href=\"".$this->searchURL()."&LATEST=1&mode=yesterday\" title=\"Yesterday's Latest\">Yesterday's Latest</a>";
- }
- else
- {
- $pages .= "<br><b>Yesterday's Latest</b>";
- }
- }
- $output .= "<br><div align=center>".$pages."</div><br>";
- }
- elseif(array_key_exists("LATEST",$_REQUEST))
- {
- $pages = '';
- if (!array_key_exists("mode",$_REQUEST))
- {
- $pages .= "<br><a href=\"".$this->searchURL()."&LATEST=1&mode=yesterday\" title=\"Yesterday's Latest\">Yesterday's Latest</a>";
- }
- elseif (! $_REQUEST["mode"] == "yesterday")
- {
- $pages .= "<br><a href=\"".$this->searchURL()."&LATEST=1&mode=yesterday\" title=\"Yesterday's Latest\">Yesterday's Latest</a>";
- }
- else
- {
- $pages .= "<br><b>Yesterday's Latest</b>";
- }
- $output .= "<br><div align=center>".$pages."</div><br>";
- }
- return $output;
- }
- }
- // This is a worker class that takes in a row in a table and parses it.
- class tSpy
- {
- var $torrentName = "";
- var $torrentDisplayName = "";
- var $torrentFile = "";
- var $torrentStatus = "";
- var $MainId = "";
- var $MainCategory = "";
- var $SubId = "";
- var $SubCategory = "";
- var $torrentSize = "";
- var $fileCount = "";
- var $Seeds = "";
- var $Peers = "";
- var $Data = "";
- function tSpy( $htmlLine )
- {
- if (strlen($htmlLine) > 0)
- {
- $this->Data = $htmlLine;
- // Chunck up the row into columns.
- $tmpListArr = explode("</td>",$htmlLine);
- if(count($tmpListArr) > 5)
- {
- //$tmpListArr["0"]; // Torrent Name, Download Link, Status
- $this->torrentDisplayName = $this->cleanLine($tmpListArr["0"]); // TorrentName
- $tmpStr = substr($tmpListArr["0"],strpos($tmpListArr["0"],"/torrent/")+strlen("/torrent/")); // Download Link
- $this->torrentFile = "http://www.torrentspy.com/torrent/" . substr($tmpStr,0,strpos($tmpStr,"/")) . "/";
- $tmpStatus = substr($tmpStr,strpos($tmpStr,"title=\"")+strlen("title=\""));
- $tmpStatus = substr($tmpStatus,0,strpos($tmpStatus,">"));
- if (strpos($tmpStatus,"password"))
- {
- $this->torrentStatus = "P";
- }elseif (strpos($tmpStatus,"register"))
- {
- $this->torrentStatus = "R";
- }
- $tmpStr = substr($tmpStr,strpos($tmpStr,">")+strlen(">"));
- if(strpos($tmpStr,"/torrent/") > 0)
- {
- $tmpStr = substr($tmpStr,strpos($tmpStr,"/torrent/")+strlen("/torrent/"));
- }
- $tmpStr = substr($tmpStr,strpos($tmpStr,"title=\"")+strlen("title=\""));
- $this->torrentName = substr($tmpStr,0,strpos($tmpStr,"\""));
- $tmpStr = $tmpListArr["1"]; // Categories
- if(strpos($tmpStr,"mode=")){
- $tmpStr = substr($tmpStr,strpos($tmpStr,"mode=main&id=")+strlen("mode=main&id="));
- $this->MainId = substr($tmpStr,0,strpos($tmpStr,"\""));
- }else{
- $tmpStr = substr($tmpStr,strpos($tmpStr,"/directory/")+strlen("/directory/"));
- $this->MainId = substr($tmpStr,0,strpos($tmpStr,"/"));
- }
- $tmpStr = substr($tmpStr,strpos($tmpStr,"title=\"")+strlen("title=\""));
- $this->MainCategory = substr($tmpStr,0,strpos($tmpStr,"\""));
- if(strpos($tmpStr,"mode=")){
- $tmpStr = substr($tmpStr,strpos($tmpStr,"mode=sub&id=")+strlen("mode=sub&id="));
- $this->SubId = substr($tmpStr,0,strpos($tmpStr,"\""));
- }else{
- $tmpStr = substr($tmpStr,strpos($tmpStr,"/directory/")+strlen("/directory/"));
- $this->SubId = substr($tmpStr,0,strpos($tmpStr,"/"));
- }
- $tmpStr = substr($tmpStr,strpos($tmpStr,"title=\"")+strlen("title=\""));
- $this->SubCategory = substr($tmpStr,0,strpos($tmpStr,"\""));
- $this->torrentSize = $this->cleanLine($tmpListArr["2"]); // Size of File
- $this->fileCount = $this->cleanLine($tmpListArr["3"]); // File Count
- $this->Seeds = $this->cleanLine($tmpListArr["4"]); // Seeds
- $this->Peers = $this->cleanLine($tmpListArr["5"]); // Peers
- //$tmpListArr["6"] = $this->cleanLine($tmpListArr["6"]); // Health
- if ($this->Peers == '')
- {
- $this->Peers = "N/A";
- if (empty($this->Seeds)) $this->Seeds = "N/A";
- }
- if ($this->Seeds == '') $this->Seeds = "N/A";
- 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)));
- else
- return trim(str_replace(array(" "," ")," ",strip_tags($stringIn,$tags)));
- }
- //----------------------------------------------------------------
- // Function to build output for the table.
- function BuildOutput($bg,$langFILE, $searchURL = '')
- {
- $output = "<tr>\n";
- $output .= " <td width=16 bgcolor=\"".$bg."\"><a href=\"dispatcher.php?action=urlUpload&type=torrent&url=".$this->torrentFile."\"><img src=\"".getImagesPath()."download_owner.gif\" width=\"16\" height=\"16\" title=\"".$this->torrentName."\" border=0></a></td>\n";
- $output .= " <td bgcolor=\"".$bg."\"><a href=\"dispatcher.php?action=urlUpload&type=torrent&url=".$this->torrentFile."\" title=\"".$this->torrentName."\">".$this->torrentDisplayName."</a>";
- switch ($this->torrentStatus)
- {
- case "R":
- $output .= " <span title='Registration needed'><b>R</b></span>";
- break;
- case "P":
- $output .= " <span title='Password needed'><b>P</b></span>";
- break;
- }
- $output .= "</td>\n";
- if (strlen($this->MainCategory) > 1){
- if (strlen($this->SubCategory) > 1){
- $mainGenre = "<a href=\"".$searchURL."&mainGenre=".$this->MainId."\">".$this->MainCategory."</a>";
- $subGenre = "<a href=\"".$searchURL."&subGenre=".$this->SubId."\">".$this->SubCategory."</a>";
- $genre = $mainGenre."-".$subGenre;
- }else{
- $genre = "<a href=\"".$searchURL."&mainGenre=".$this->MainId."\">".$this->MainCategory."</a>";
- }
- }else{
- $genre = "<a href=\"".$searchURL."&subGenre=".$this->SubId."\">".$this->SubCategory."</a>";
- }
- $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 .= "</tr>\n";
- return $output;
- }
- }
- ?>
|