После первого моего знакомства с консольным торрент клиентом rtorrent меня не покидала мысль автоматизировать свою работу с торрентами.
Статей по работе с торрентами много, но того, что нужно именно мне, я не нашел.
В этой статье я расскажу и покажу на примере как работать с торрентами средствами php+mysql+rtorrent.
Необходимо:
- rtorrent ( --with-xmlrpc-c)
- PHP5 XML_RPC2 library
- PHP Class Torrent.php
Ставим torrent файл на закачку
На этом примере форма с выгрузкой torrent файла, но это не имеет значения. Никто не мешает вам парсить трекер и передавать на скрипт готовый torrent файл.
<?php
..........
$torrent = new Torrent($_FILES['file']['tmp_name']);
if ($hash = $torrent->hash_info())
{
move_uploaded_file($_FILES['file']['tmp_name'], "torrent/new/" . microtime(true) . rand(1000, 9999) . ".torrent");
mysql_query("INSERT INTO video SET `show` = '" . mysql_real_escape_string($show) . "', hash = '" . mysql_real_escape_string($hash) . "'}'");
$error = "Торрент добавлен";
}
else
{
$error = "Это не torrent-файл";
}
..........
?>
Подключаемся к rtorrent:
<?php
......
$xrc = XML_RPC2_Client::create("http://127.0.0.1/RPC2", array("encoding" => "utf-8"));
.....
и работаем со списком скачанных торрентов:
.....
foreach ($xrc->download_list("complete") as $hash)
{
$episode = mysql_fetch_assoc(mysql_query("SELECT * FROM video WHERE hash = '" . mysql_real_escape_string($hash) . "'"));
if (!$episode)
{
// Не наш торрент
continue;
}
$base_path = $xrc->{"d.get_base_path"}($hash);
if (is_file($base_path))
{
// Торрент скачан, обновим запись в базе и удалим его из очереди
mysql_query("UPDATE video SET filename = '" . mysql_real_escape_string($base_path) . "', hash = '' WHERE hash = '" . mysql_real_escape_string($hash) . "'");
$xrc->{"d.erase"}($hash);
}
else
{
printf("$base_path does not exist!n");
}
}
?>
Список всех команд к rtorrent: RTorrentCommands
Что имеем в итоге?
После того как мы связали rtorrent с php+mysql идей для дальнейшей автоматизации очень много. Лично для себя сделал автоматическую закачку новых серий сериалов и смс оповещение об успешной закачке.
Встроить такой метод в любую CMS и организовать закачку новых фильмов/сериалов/софта и выгрузки их на файлообменники не составит труда.
Автор: L3n1n