Jump to content

Scrap Torrent PHP


AlanPS

Recommended Posts

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
		johannes@johnimedia.de
		
		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
Share on other sites

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
    johannes@johnimedia.de

    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
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.