Как конвертировать хэш торрент-информации для scrape?
У меня есть торрент-хэш из ссылки на магнит. Например: fda164e7af470f83ea699a529845a9353cc26576 Когда я пытаюсь получить информацию о пиявках и сверстниках, я должен запросить: http://tracker.publicbt.com/scrape?info_hash =??? Как я должен конвертировать информационный хэш для этого запроса? Это кодировка URL или кодирование? как? В PHP.
3 answers
Это сырое шестнадцатеричное представление. Использовать pack()
с помощью H
, чтобы преобразовать его. Затем URL-адрес кодирует его.
Получил этот фрагмент 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 (ок), но по-прежнему не работает для получения сведений о торрент-файлах...
На случай, если у кого-то возникнут проблемы и он столкнется с этой темой в будущем: хитрость во всей этой проблеме заключается в использовании аргумента 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 в необработанный двоичный файл после его вычисления.