Rtorrent + PHP + MySQL

в 13:23, , рубрики: Песочница

После первого моего знакомства с консольным торрент клиентом rtorrent меня не покидала мысль автоматизировать свою работу с торрентами.
Статей по работе с торрентами много, но того, что нужно именно мне, я не нашел.

В этой статье я расскажу и покажу на примере как работать с торрентами средствами php+mysql+rtorrent.

Необходимо:

Ставим 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

* - обязательные к заполнению поля