INT 21h

Домашняя страница самого страшного прерывания

Парсинг торрент файла на php, получение сидеров и личеров

№ 7268 В разделе "Программирование" от May 31st, 2015,

Я как-то уже писал торрент трекер для нашего опенсорс сообщества, но реализация была полностью на пхп и не отличалась особой скоростью. Поскольку мне понадобилось интегрировать поддержку торрентов в Distr CMS я начал искать пути ускорения работы с торрентами. На глаза попался офигенский модуль к php, который задачу парсинга берет на себя. А вот остальные функции все равно нужно писать самому.

Задача нулевая. Установка модуля.

Нужно поставить пакеты для сборки модуля sudo apt-get install php5-dev build-essential subversion

Далее получаем модуль и собираем его
svn checkout http://php-bencode-extension.googlecode.com/svn/trunk/ php-bencode
cd php-bencode
phpize
./configure --with-php-config="`whereis php-config|awk '{ print $2 }'`"
make

Теперь нужно скопировать модуль в директорию к остальным модулям. У меня это была директория /usr/lib/php5/20131226. У вас будет что-нибудь похожее.

В конце нужно создать конфиг для загрузки модуля в память при старте php. У меня используется php-fpm, поэтому этот конфиг положил в /etc/php5/fpm/conf.d/cg_bcode.ini

Текст конфига
extension=cg_bcode.so

Модуль установлен, делаем рестарт php-fpm, apache или что у вас там.

Задача первая. Нужно посмотреть сидеров и личеров.

Установленый модуль добавляет функции bdecode и bencode, ускоряя обработку файлов в разы. Однако, это не отменяет необходимости кеширования этих значений при большом количестве посещений.

декодируем содержимое файла в массив $info
$info=bdecode(file_get_contents($url_torrent));

хеш можно получить сделав sha1 только части, отвечающей за информацию о файлах внутри. хеш получается только в бинарном виде, добавив true вторым параметром
$hash = sha1(bencode($info['info']),true);

scrape в большинстве случаев получается просто путем замены announce в урле для анонсов торрента
$announce_url=$info['announce'];
$scrape_url = str_replace("announce","scrape",$announce_url);

делаем get запрос к трекеру и полученый ответ тут же декодируем в массив
$scrape_data = bdecode(file_get_contents($scrape_url.'?info_hash='.urlencode($hash)));
echo "Полных раздач: ".$scrape_data['files'][$hash]['complete'];

Задача вторая. Список файлов внутри торрента.

Код ниже только для разовых обращений к файлу. При высокой посещаемости и большом количестве торрент файлов эти данные нужно кешировать в БД или memcached. Вам тут решать уже.

foreach($info['info']['files'] as $file) {
echo $file['path'][0]." Размер ".round($file['length']/1024/1024)." Мб
";
}

distr cms 03

Еще кое-что интересненькое о торрентах:

5 комментариев »

5 комментариев »

Comment by Insert | July 29, 2015 @ 12:51:44

Когда уже твоё “торчок” будет доработан, хочется видеть рабочий вариант торрента.

Comment by DedaPetya | July 29, 2015 @ 13:01:57

Эх…. забыл ты про “торчка” Владимир. https://bitbucket.org/21h/torchok Последние изменения 26.06.2012 г. Жаль конечно.

Comment by 21h | July 29, 2015 @ 14:49:24

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

Comment by Buter | August 4, 2016 @ 09:12:19

Какова дальнейшая жизнь торчка? Он кстати веб-интерфейсом для OpenTracker выступает? Без OpenTracker работать не будет?

Comment by 21h | August 4, 2016 @ 09:26:47

торчок давно уже не обновлял, как только закрыл сайт где он работал. да, это морда для opentracker. без opentracker или любого другого открытого трекера работать не будет.

Форма отправки комментария

CAPTCHA
*

Разрешенные HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

RSS RSS Feed только для этого поста |


Комментарии
  • Игорь: Все настроил, еще раз просмотрел видео и методом научного тыка все настроил и сохранил, все работает и обе...
  • 21h: Здравствуйте, Игорь! Я не знаю :) Думаю аналогично согласно инструкции к вашей радиостанции.
  • Игорь: Добрый день, просмотрел Ваше видео все доступно и ясно для 8 ми канальных радеек, но мне нада настроить 69...
  • Гоги: Есть инструкция к Моторолкам – она подходит к серии Motorola TLKR T4… Т8. В конце сетка частот и...
  • 21h: торчок давно уже не обновлял, как только закрыл сайт где он работал. да, это морда для opentracker. без...
  • Buter: Какова дальнейшая жизнь торчка? Он кстати веб-интерфейсом для OpenTracker выступает? Без OpenTracker работать...
  • 21h: понятия не имею. гуглите инструкцию к вашей радейке и сверяйтесь с ней.
  • Денис: хочу их подружить с uv5r
  • Денис: t-388 walkie talkie на эти шпаргалочек нет,или как приминить ваши к их настройке?
  • John: Стекла для электроник – техночас.ру