AlanPS Posted April 21, 2014 Share Posted April 21, 2014 i'm Doing scrap torrents and taking the seeds of them, I use the script that I found on the internet and it uses socket to connect the tracker and get the data, it typically run on my localhost with xampp server but when it does not send pro server works, it does not catch the seeds of the stream and the script generates an error message the script: <?php /* Torrent UDP Scraper v1.2 2010 by Johannes Zinnau [email protected] Licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License http://creativecommons.org/licenses/by-sa/3.0/ It would be very nice if you send me your changes on this class, so that i can include them if they are improve it. Thanks! Usage: try{ $timeout = 2; $scraper = new udptscraper($timeout); $ret = $scraper->scrape('udp://tracker.tld:port',array('0000000000000000000000000000000000000000')); print_r($ret); }catch(ScraperException $e){ echo('Error: ' . $e->getMessage() . "<br />\n"); echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "<br />\n"); } */ include "tscraper.php"; class udptscraper extends tscraper{ /* $url: Tracker url like: udp://tracker.tld:port or udp://tracker.tld:port/announce $infohash: Infohash string or array (max 74 items). 40 char long infohash. */ public function scrape($url,$infohash){ if(!is_array($infohash)){ $infohash = array($infohash); } foreach($infohash as $hash){ if(!preg_match('#^[a-f0-9]{40}$#i',$hash)){ throw new ScraperException('Invalid infohash: ' . $hash . '.'); } } if(count($infohash) > 74){ throw new ScraperException('Too many infohashes provided.'); } if(!preg_match('%udp://([^:/]*)(?:[0-9]*))?(?:/)?%si', $url, $m)){ throw new ScraperException('Invalid tracker url.'); } $tracker = 'udp://' . $m[1]; $port = isset($m[2]) ? $m[2] : 80; $transaction_id = mt_rand(0,65535); $fp = fsockopen($tracker, $port, $errno, $errstr); if(!$fp){ throw new ScraperException('Could not open UDP connection: ' . $errno . ' - ' . $errstr,0,true); } stream_set_timeout($fp, $this->timeout); $current_connid = "\x00\x00\x04\x17\x27\x10\x19\x80"; //Connection request $packet = $current_connid . pack("N", 0) . pack("N", $transaction_id); fwrite($fp,$packet); //Connection response $ret = fread($fp, 16); if(strlen($ret) < 1){ throw new ScraperException('No connection response.',0,true); } if(strlen($ret) < 16){ throw new ScraperException('Too short connection response.'); } $retd = unpack("Naction/Ntransid",$ret); if($retd['action'] != 0 || $retd['transid'] != $transaction_id){ throw new ScraperException('Invalid connection response.'); } $current_connid = substr($ret,8,; //Scrape request $hashes = ''; foreach($infohash as $hash){ $hashes .= pack('H*', $hash); } $packet = $current_connid . pack("N", 2) . pack("N", $transaction_id) . $hashes; fwrite($fp,$packet); //Scrape response $readlength = 8 + (12 * count($infohash)); $ret = fread($fp, $readlength); if(strlen($ret) < 1){ throw new ScraperException('No scrape response.',0,true); } if(strlen($ret) < { throw new ScraperException('Too short scrape response.'); } $retd = unpack("Naction/Ntransid",$ret); // Todo check for error string if response = 3 if($retd['action'] != 2 || $retd['transid'] != $transaction_id){ throw new ScraperException('Invalid scrape response.'); } if(strlen($ret) < $readlength){ throw new ScraperException('Too short scrape response.'); } $torrents = array(); $index = 8; foreach($infohash as $hash){ $retd = unpack("Nseeders/Ncompleted/Nleechers",substr($ret,$index,12)); $retd['infohash'] = $hash; $torrents[$hash] = $retd; $index = $index + 12; } return($torrents); } } ?> Link to comment https://forums.phpfreaks.com/topic/287905-scrap-torrent-php/ Share on other sites More sharing options...
QuickOldCar Posted April 21, 2014 Share Posted April 21, 2014 What's the error? Did you ask Johannes Zinnau [email protected] and see if he knows what issue could be? Link to comment https://forums.phpfreaks.com/topic/287905-scrap-torrent-php/#findComment-1476821 Share on other sites More sharing options...
AlanPS Posted April 21, 2014 Author Share Posted April 21, 2014 the error: Error: Could not open HTTP connection. Connection error: yes in my localhost run, in hostgator, hostinger and others servers not run... Link to comment https://forums.phpfreaks.com/topic/287905-scrap-torrent-php/#findComment-1476822 Share on other sites More sharing options...
AlanPS Posted April 21, 2014 Author Share Posted April 21, 2014 Code 2: <?php include "httptscraper.php"; $scrap1 = "$row[torrent]"; preg_match('#magnet:\?xt=urn:btih:(?<hash>.*?)&dn=(?<filename>.*?)&tr=(?<trackers>.*?)$#', $scrap1, $magnet_link); $magnet_link['trackers'] = explode('&', urldecode(str_replace('tr=','', $magnet_link['trackers']))); $resultados2 = $magnet_link['trackers'][0]; $resultados1 = $magnet_link['hash']; try{ $timeout = 2; $scraper = new udptscraper($timeout); $ret = $scraper->scrape($resultados2,array($resultados1)); $array = $ret[$resultados1]; $array2 = $array['seeders']; print_r($array2); }catch(ScraperException $e){ echo "Sem Info"; //echo('Error: ' . $e->getMessage() . "<br />\n"); //echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "<br />\n"); } ?> Code 3: <?php /* Torrent Scraper Base Class v1.0 2010 by Johannes Zinnau [email protected] Licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License http://creativecommons.org/licenses/by-sa/3.0/ It would be very nice if you send me your changes on this class, so that i can include them if they are improve it. Thanks! Usage: See udptscraper.php or httptscraper.php */ class ScraperException extends Exception { private $connectionerror; public function __construct($message,$code=0,$connectionerror=false){ $this->connectionerror = $connectionerror; parent::__construct($message, $code); } public function isConnectionError(){ return($this->connectionerror); } } abstract class tscraper { protected $timeout; public function __construct($timeout=2){ $this->timeout = $timeout; } } ?> Link to comment https://forums.phpfreaks.com/topic/287905-scrap-torrent-php/#findComment-1476824 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.