Публикую очередную свою разработку в рамках 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
В интерфейсе я создал одно текстовое поле и три кнопки:
Настройки поля и кнопок:
Код вызова для кнопок отличается параметром, который указывает, с какого именно трекера качать:
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;
}
Упрощать/унифицировать код для трех трекеров не стал, потому что необходимые параметры для корректной авторизации немного отличаются и в дальнейшем могут поменяться.
Спасибо за внимание,
Андрей.