Подскажите пожалуйста простой способ извлечения информации из торрент файла при помощи php. Интересуют только два параметра. Количество сидеров и личеров. :roll:
Долго объяснять, вот описание (на английском) http://wiki.theory.org/BitTorrentSpecification Если вкратце то 1 - вычислить хеш, и адреса трекеров 2 - запросить у трекеров количество пиров
К сожалению в английском языке я полный нуп. Но все равно спасибо. Ты дал мне от чего оттолкнуться. А то я не мог найти вообще ничего по этому вопросу.
И снова в тупике. Вот нашел функцию: PHP: <?php $hash = md5_file("torrents/Fullmetal.Alchemist_[bt.normaplus.com].torrent"); echo $hash;?> На выходе получаю такое вот значение: d158f229c3c8decd65b7cb176d46e612 Думаю это наверно и есть хеш файла. Только вот что делать дальше. Понятия не имею)
кхм... с этим хэшем дальше можно делать все что угодно, кроме получения из него нужной тебе информации. не в ту сторону пошел.
отчего же! Это хеш! Торрент-файла. =) гыгы. поискай тут http://www.google.ru/search?hl=ru&newwi ... er&spell=1
Может кто нибудь дать пояснение к этому парсеру? Т.е куда вписывать путь к файлу торрента. В какой переменной содержится информация о личерах, сидерах. Я пытался разобраться но что-то не очень выходит. Пробовал прописать этот путь сделав так. $input = "torrents/Fullmetal.Alchemist_[bt.normaplus.com].torrent"; По логике эта переменная отвечает за путь к вайлу. Но на выходе получаю только это: usage: id=1 И что это, мне обсолютно не понятно. И еще не понятно откуда взяться значениям для половины переменных. Например в начале идет условие: PHP: if ($argc != 2) exit("usage: ".$argv[0]." <torrent>"); Где спрашивается $argc должна была получить значение равное 2? Больше этой переменной я нигде в коде не вижу. PHP: <?php // bit torrent parser function by techtonik // php.net if ($argc != 2) exit("usage: ".$argv[0]." <torrent>"); $input = $argv[1]; if (!file_exists($input)) { exit("input file $input doesn't exists"); } $str = file_get_contents($input); function parse_torrent($s) { static $str; $str = $s; // echo $str{0}; if ($str{0} == 'd') { $str = substr($str,1); $ret = array(); while (strlen($str) && $str{0} != 'e') { $key = parse_torrent($str); if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made if (!strcmp($key, "info")) { $save = $str; } // echo ".",$str{0}; $value = parse_torrent($str); if (!strcmp($key, "info")) { $tosha = substr($save, 0, strlen($save) - strlen($str)); $ret['info_hash'] = sha1($tosha); } // process hashes - make this stuff an array by piece if (!strcmp($key, "pieces")) { $value = explode("====", substr( chunk_split( $value, 20, "===="), 0, -4 ) ); }; $ret[$key] = $value; } $str = substr($str,1); return $ret; } else if ($str{0} == 'i') { // echo "_"; $ret = substr($str, 1, strpos($str, "e")-1); $str = substr($str, strpos($str, "e")+1); return $ret; } else if ($str{0} == 'l') { // echo "#"; $ret = array(); $str = substr($str, 1); while (strlen($str) && $str{0} != 'e') { $value = parse_torrent($str); if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made $ret[] = $value; } $str = substr($str,1); return $ret; } else if (is_numeric($str{0})) { // echo "@"; $namelen = substr($str, 0, strpos($str, ":")); $name = substr($str, strpos($str, ":")+1, $namelen); $str = substr($str, strpos($str, ":")+1+$namelen); return $name; } } $bencode = parse_torrent($str); print_r( $bencode ); ?>