[Сценарий] Автоматическое скачивание торрентов. Инструкция.

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

[Сценарий] Автоматическое скачивание торрентов. Инструкция.

Сообщение raptorialfungus » Ср дек 26, 2012 2:24 pm

Всем привет!

Публикую очередную свою разработку в рамках MajorDoMo.
На этот раз это удаленная автоматическая постановка торрента в очередь на скачивание.
Пока сделал поддержку трех трекеров, которыми я пользуюсь: RuTracker, Kinozal, Free-Torrents. Для скачивания достаточно в интерфейсе MajorDoMo ввести номер торрента и нажать кнопочку "Закачать".
Вот так это выглядит:

Изображение

В качестве торрент-клиента используется transmission под Ubuntu 12.04.1.
Инсталляция: sudo apt-get install transmission-cli transmission-common transmission-daemon
Для работы автоматического скачивания важны всего две опции в конфигурационном файле /etc/transmission-daemon/settings.json

Код: Выделить всё

“watch-dir”: “/var/www/Downloads/Torrents”,
“watch-dir-enabled”: true
По умолчанию этих параметров может не быть - добавляем. В папке /var/www/Downloads/Torrents/ transmission ждёт появление torrent-файлов и ставит их на закачку. Соответственно на данную папку должны быть установлены правильные права.

В интерфейсе я создал одно текстовое поле и три кнопки:

Изображение

Настройки поля и кнопок:

Изображение Изображение

Код вызова для кнопок отличается параметром, который указывает, с какого именно трекера качать:
runScript("torrent","rutracker");
runScript("torrent","kinozal");
runScript("torrent","fto");

И самое главное, код сценария torrent:

Код: Выделить всё

DEFINE("CACHE_PATH", "/tmp");             
DEFINE("COOKIE_FILE_NAME", CACHE_PATH . "/torcookie.txt"); 
$post=array();
$torrentid = gg('TorrentID');
if ($params == "fto") {
  $loginurl = "http://login.free-torrents.org/forum/login.php";
  $post['login_username'] = "логин";
  $post['login_password'] = "пароль";
  $post['login'] = "%C2%F5%EE%E4";
  $dlurl = "http://dl.free-torrents.org/forum/dl.php?t=".$torrentid;
  $refurl = "http://tr.free-torrents.org/forum/tracker.php";
  $options = array ('Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3;');
  $out = curl_post($loginurl, "http:/free-torrents.org", $post,$options);
  $post=array();
  $post['id']=$torrentid;
  $options = array ('Content-Type: application/x-bittorrent;Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3;');
  $out = curl_post($dlurl, $refurl, $post, $options);
  $fp = fopen("/var/www/Downloads/Torrents/".$torrentid.".torrent", 'w');
  fwrite($fp, $out);
  fclose($fp);
};

if ($params == "rutracker") {
  $loginurl = "http://login.rutracker.org/forum/login.php";
  $post['login_username'] = "логин";
  $post['login_password'] = "пароль";
  $post['login'] = "%C2%F5%EE%E4";
  $dlurl = "http://dl.rutracker.org/forum/dl.php?t=".$torrentid;
  $refurl = "http://rutracker.org/forum/viewtopic.php?t=".$torrentid;
  $out = curl_post($loginurl, "http://rutracker.org", $post);
  $post=array();
  $post['t']=$torrentid;
  $options = array ('Content-Type: application/x-www-form-urlencoded');
  $out = curl_post($dlurl, $refurl, $post, $options);
  $fp = fopen("/var/www/Downloads/Torrents/".$torrentid.".torrent", 'w');
  fwrite($fp, $out);
  fclose($fp);
};

if ($params == "kinozal") {
  $loginurl = "http://kinozal.tv/takelogin.php";
  $post['username'] = "логин";
  $post['password'] = "пароль";
  $dlurl = "http://kinozal.tv/download.php/".$torrentid."/[kinozal.tv]id".$torrentid.".torrent";
  $dlurl = "http://dl.rutracker.org/forum/dl.php?t=".$torrentid;
  $refurl = "http://kinozal.tv/details.php?id=".$torrentid;
  $out = curl_post($loginurl, "http:/kinozal.tv", $post);
  $post=array();
  $options = array ('Content-Type: application/x-www-form-urlencoded');
  $out = curl_post($dlurl, $refurl,$post,$options);
  $fp = fopen("/var/www/Downloads/Torrents/".$torrentid.".torrent", 'w');
  fwrite($fp, $out);
  fclose($fp);
};

function curl_post($url, $ref, array $post = NULL, array $options = array())
{
$headers = array (
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8',
    'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
    'Accept-Encoding: deflate',
    'Accept-Charset: windows-1251;q=0.7,*;q=0.7',
        'Connection: close'
        );
    $defaults = array(
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_URL => $url,
        CURLOPT_FRESH_CONNECT => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FORBID_REUSE => 1,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_VERBOSE => 0,
        CURLOPT_REFERER => $ref,
        CURLOPT_COOKIEFILE => COOKIE_FILE_NAME,
        CURLOPT_COOKIEJAR  => COOKIE_FILE_NAME,
        CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
        CURLOPT_POSTFIELDS => http_build_query($post)
    );

    $ch = curl_init();
    curl_setopt_array($ch, ($options + $defaults));
    curl_setopt  ($ch,CURLOPT_HTTPHEADER,$headers);
    if( ! $result = curl_exec($ch))
    {
        return "";
    }
    curl_close($ch);
    return $result;
}
В необходимых местах (максимум в 6-ти) указываем свои пары логин/пароль.
Упрощать/унифицировать код для трех трекеров не стал, потому что необходимые параметры для корректной авторизации немного отличаются и в дальнейшем могут поменяться.

Спасибо за внимание,
Андрей.
Андрей
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение sergejey » Ср дек 26, 2012 3:51 pm

Хм... интересно :) Сам для этих целей обхожусь Dropbox-ом, но такое решение так же весьма практично.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение raptorialfungus » Ср дек 26, 2012 4:59 pm

sergejey писал(а):Хм... интересно :) Сам для этих целей обхожусь Dropbox-ом, но такое решение так же весьма практично.
Сергей, а как лучше всякие полезные (на мой, конечно, взгляд) модификации помогать внедрять в проект?
Через commit на GitHub?
Например, я часто и успешно пользуюсь модулем saverestore, но сортировка бэкап-файлов была ну очень неудобная.
Я поправил этот кусочек на

Код: Выделить всё

$source=ROOT.'saverestore';
$currentdir=getcwd();
chdir($source); 
array_multisort(array_map('filemtime', ($files = glob("*.*"))), SORT_DESC, $files);
chdir($currentdir); 
foreach($files as $file){
     $tmp=array();
     $tmp['FILENAME']=$file;
     $tmp['FILESIZE']=number_format((filesize($source."/".$file)/1024/1024), 2);
     $out['FILES'][]=$tmp;
 }
Теперь сортировка по времени модификации. Это из того, что может быть полезно всем. А для себя я еще больше модифицировал этот модуль и бэкаплю значительно больше всего: и /etc и /usr/local/etc и /var/www/scripts ... Очень удобно сразу весь бэкап системы.

P.S. И еще просьба поправить все-таки редактирование профилей на форуме. Или там есть какие-то сложности? Просто вроде неоднократно упоминалась эта ошибка.

Код: Выделить всё

Fatal error: Cannot redeclare al_validate_admin() (previously declared in /var/www/vhosts/smartliving.ru/httpdocs/forum/includes/functions_alternatelogin.php:57) in /var/www/vhosts/smartliving.ru/httpdocs/forum/includes/functions_alternatelogin.php on line 231
Советуют поискать в файлах phpBB

Код: Выделить всё

include($phpbb_root_path . 'includes/functions_alternatelogin.' . $phpEx);
и заменить на

Код: Выделить всё

if(!function_exists('al_validate_admin'))
{
   include($phpbb_root_path . 'includes/functions_alternatelogin.' . $phpEx);
}
Должно быть в 3-х или 4-х местах.
Андрей
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение sergejey » Чт дек 27, 2012 10:49 am

Сергей, а как лучше всякие полезные (на мой, конечно, взгляд) модификации помогать внедрять в проект?
Через commit на GitHub?
Например, я часто и успешно пользуюсь модулем saverestore, но сортировка бэкап-файлов была ну очень неудобная.
Я поправил этот кусочек на
Через GitHub было бы конечно идеально )
Там можно клонировать репозиторий и вести свой отдельно, делать себе коммиты и время от времени делать pull request-ы этих коммитов в основную ветку.

(кусочек этот обновил, но пока не коммитил)

По профилю посмотрю обязательно.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение tammat » Ср апр 03, 2013 2:22 pm

Не могу понять... Нет автоматического старта закачек
Файлы создаются, но они отличаются от файлов скачанных с торрентов.
Кудаю в папку скачанный файл, автозапуск также не стартует.
Help me, pls
Какие права и кто владелец должны быть установлены на папку с торрент-файлами?
Спасибо
Wave
Сообщения: 66
Зарегистрирован: Пн сен 02, 2013 4:40 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение Wave » Пн сен 02, 2013 6:08 pm

а на виндовом сервере как такую же плюшку прикрутить?
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение Kod.Begemot » Ср сен 11, 2013 5:34 pm

Доброго времени суток!
Не могу пока ничего подсказать по поводу прикручивания данной "фичи" к интерфейсу MajorDoMo, но такие программы как, к примеру, utorrent позволяют без проблем закачивать торренты из torrent-файлов, "брошенных" в определённую директорию.
Wave
Сообщения: 66
Зарегистрирован: Пн сен 02, 2013 4:40 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение Wave » Ср сен 11, 2013 6:06 pm

Kod.Begemot писал(а):Доброго времени суток!
Не могу пока ничего подсказать по поводу прикручивания данной "фичи" к интерфейсу MajorDoMo, но такие программы как, к примеру, utorrent позволяют без проблем закачивать торренты из torrent-файлов, "брошенных" в определённую директорию.
ага у меня так сейчас и сделано
в фоне висит несколько уторрентов
у каждого своя папка
сериалы отдельно, фильмы отдельно, ХД отдельно и т.д.
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение Amarok » Чт сен 12, 2013 7:18 am

Wave писал(а):в фоне висит несколько уторрентов
у каждого своя папка
сериалы отдельно, фильмы отдельно, ХД отдельно и т.д.
А как вы это сделали?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Wave
Сообщения: 66
Зарегистрирован: Пн сен 02, 2013 4:40 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Автоматическое скачивание торрентов. Инструкция.

Сообщение Wave » Чт сен 12, 2013 11:09 am

BlackWarrior писал(а):
Wave писал(а):в фоне висит несколько уторрентов
у каждого своя папка
сериалы отдельно, фильмы отдельно, ХД отдельно и т.д.
А как вы это сделали?
создал нескольких пользователей в винде. Планировщик при старте компьютера запускает несколько utorrent одновременно. Каждый под своим пользователем.
Ответить