Как конвертировать хэш торрент-информации для scrape?


У меня есть торрент-хэш из ссылки на магнит. Например: fda164e7af470f83ea699a529845a9353cc26576 Когда я пытаюсь получить информацию о пиявках и сверстниках, я должен запросить: http://tracker.publicbt.com/scrape?info_hash =??? Как я должен конвертировать информационный хэш для этого запроса? Это кодировка URL или кодирование? как? В PHP.

Author: MarkOverride, 2010-07-17

3 answers

Это сырое шестнадцатеричное представление. Использовать pack() с помощью H, чтобы преобразовать его. Затем URL-адрес кодирует его.

 3
Author: Ignacio Vazquez-Abrams, 2010-07-17 15:55:24

Получил этот фрагмент python от коллеги,

r = ''
s = 'fda164e7af470f83ea699a529845a9353cc26576'
for n in range(0, len(s), 2):
    r += '%%%s' % s[n:n+2].upper()
print r

Вывод: %FD%A1%64%E7%AF%47%0F%83%EA%69%9A%52%98%45%A9%35%3C%C2%65%76

Работает как заклинание.

Редактировать: Работает как заклинание, чтобы заставить трекер вернуть статус 200 (ок), но по-прежнему не работает для получения сведений о торрент-файлах...

 1
Author: Lundberg, 2010-08-31 16:33:22

На случай, если у кого-то возникнут проблемы и он столкнется с этой темой в будущем: хитрость во всей этой проблеме заключается в использовании аргумента bool $raw_output функции PHP:sha1, установив его в "true".

Классы BDecode/DENCODE можно найти ЗДЕСЬ. Этот проект, называемый Trackon, также включает в себя множество других полезных классов для взаимодействия с торрент-трекерами и файлами.

Итак, в PHP что-то подобное будет работать для получения правильного информационного хэша для очистка трекера для получения подробной информации:

include('./path/to/BDecode.php');
include('./path/to/BEncode.php');

function getHash($torFile){
    $tfile = BDecode(file_get_contents($torFile));
    $infohash = sha1(BEncode($tfile["info"]), TRUE);

    return urlencode($infohash);
}

Тогда просто назовите это так:

$hash = getHash('./path/to/.torrent');

Надеюсь, это кому-то поможет. Я все еще чесал голову после прочтения многих сообщений о том, как получить правильный информационный хэш. Я понимаю, почему сейчас это нигде не упоминалось, хотя этот аргумент был добавлен в PHP 5. Если вы не используете PHP 5, вам придется преобразовать хэш sha1 в необработанный двоичный файл после его вычисления.

 1
Author: Scilence, 2011-10-29 06:57:29