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 или любого другого открытого трекера работать не будет.

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

*

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

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


Комментарии
  • 21h: нене ) без меня )
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть более благие цели, вы просто ответьте на мой вопрос,...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно сделать? Допустим я купил данную рацию себе, мне...
  • 21h: слушать никто не запрещает. нет закона, который запрещает слушать. те, кто говорит иначе нагло врут. а если...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng uv-5r, допустим на объект, ну или вообще...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете можно скачать инструкцию к вашей модели рации,...
  • Серегй: Добрый день! Хотелось бы задать пару вопросов по поводу раций, у Вас есть куда можно обратиться ТАТ.
  • 21h: потому, что нейросетью проще. яркость светофора меняется в зависимости от времени суток от маленькой красной...
  • Михаил: А зачем нейросеть? Почему цвет светофора определить без нейросетей?