1 (изменено: DnsIs, 2010-12-01 11:17:12)

Тема: JS: Автокачалка сериалов с LostFilm.tv

С женой смотрим Хауса, и постоянно лазить на сайт надоело. Родился скрипт. Пока пашет. Будем ждать глюков.

//Скрипт для автоматической скачки сериалов с сайта lostfilm.tv

var WshShell = WScript.CreateObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");

// Настройки ===============================================
// Это JScript, поэтому не забываем в путях дублировать \\
login                = "user"; // логин
pass                = "pass"; // пароль. хранить тут логин и пароль небезопасно
getCookies             = false; // получать куки или нет
delCookies             = false; // удялять ли куки после всех операций
urlAutorization        = "http://lostfilm.tv/useri.php";
dirSaveTorrent        = "i:\\scripts\\JS Проверка сериалов"; // на эту папку нужно натравить utorrent
dirWork                = WScript.ScriptFullName.replace(WScript.ScriptName,"");
//dirWork                = Можно указать путь вручную;
fileInfo            = "info.txt"; // файл с текстом для samurize
filePics            = "list.txt"; // файл с изображениями для samurize
fileLog                = "history.log"; // файл лога
fileRSS                = "tmpRSSfile.xml"; // файл полученной RSS ленты
fileCookies            = "cookies.txt"; // название куки-файла
urlRSS                = "http://www.lostfilm.tv/rssdd.xml";
films                 = ["Доктор ХаУс", "Обмани меня"];

//========================================================== c:\\Program Files\\Samurize\\Scripts\\

if (!dirWork.match(/\\$/)) dirWork+="\\";
fileRSSfull    = dirWork + fileRSS;
fileCookiesfull = dirWork + fileCookies;
fileInfofull = dirWork + fileInfo;
filePicsfull = dirWork + filePics;
fileLogfull = dirWork + fileLog;

if    (getCookies) WshShell.Run('wget -c ' + urlAutorization + ' --save-cookies="' + fileCookiesfull + '" --keep-session-cookies -O nul --post-data "FormLogin=' + login + '&FormPassword=' + pass + '&module=1&repage=user&act=login', 0, true);

WshShell.Run('wget -c -t 2 -w 10 ' + urlRSS + ' -O "' + fileRSSfull + '"', 0, true);

if (!fso.fileExists(fileRSSfull)) WScript.Quit() // Почему то не скачалось.

xmlParser = new ActiveXObject("Msxml2.DOMDocument");
xmlParser.async = false;
xmlParser.load (fileRSSfull);
if (xmlParser.parseError.errorCode)
    {
        //ShowError (xmlParser.parseError);
        WScript.Quit();
    }

items = new Array();
index=0;

colNodes = xmlParser.documentElement;
colNodes  = new Enumerator(colNodes.getElementsByTagName("item"));
for (colNodes.moveFirst(); !colNodes.atEnd(); colNodes.moveNext())
    {
        e = colNodes.item().selectSingleNode("title").text;
        for (i=0;i<films.length;i++)
            {
                if ((e.toLowerCase().match(films[i].toLowerCase())) && !e.toLowerCase().match("720p"))
                    {
                        items[index] = new Array(3);
                        items[index][0] = colNodes.item().selectSingleNode("title").text;
                        items[index][1] = colNodes.item().selectSingleNode("description").text.replace(/:/,":").replace(/./g,".").match(/http.*jpg/);
                        items[index][2] = colNodes.item().selectSingleNode("link").text;
                        index++;
                    }
            }

    }
xmlParser = "";

fso.DeleteFile(fileRSSfull, 1);
if (delCookies) fso.DeleteFile(fileCookiesfull, 1);

str="";img="";
if (items.length>0)
    {
        if (fso.FileExists(fileLogfull) && fso.GetFile(fileLogfull).Size>0)
            {
                txt = fso.GetFile(fileLogfull).OpenAsTextStream(1);
                arr = txt.ReadAll().split("\r\n");
                txt.Close();
            }
        else arr ="";
        for (i=0;i<items.length;i++)
            {
                str += items[i][0] + '\r\n';
                img += items[i][1] + '\r\n';
                x = true;                
                if (arr.length>0)
                    {
                        for (j=0;j<arr.length;j++)
                            {
                                if (items[i][2]==arr[j]) {x = false; break;}
                            }
                    }
                if (x)
                    {
                        SaveToFile (fileLogfull, items[i][2], 8);
                        WshShell.Run('wget -c ' + items[i][2] + ' --load-cookies="' + fileCookies + '" -P "' + dirSaveTorrent + '"', 0, true);
                    }
            }
        SaveToFile (fileInfofull, str, 2);
        SaveToFile (filePicsfull, img, 2);
    }

function SaveToFile (file, text, flag)
    {
        LogFile = fso.OpenTextFile(file, flag, true);
        LogFile.WriteLine(text);
        LogFile.Close();
    }

function eh (text)
    {
        WScript.Echo(text)
    }

Требует
Менеджер закачек wget
Настроенный Торрент клиент utorrent
По желанию Samurize
Некоторые опции wget:
-P, --directory-prefix=PREFIX указание нашей папки слежения куда будет произведена загрузка файлов,
--keep-session-cookies ключ для сохранения и записи cookies
--load-cookies=FILE использовать cookies из файла FILE
--save-cookies=FILE    сохранить cookies в файл FILE
-t, --tries=NUMBER      количество попыток скачавания
-w, --wait=SECONDS пауза между попытками

Возмоожно так же не использовать файл с куками, а вставить значение полей в командную строку, вот так:
--header "Cookie: uid=xxxxxx; pass=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wget использовал потому, что работать с куками посредством JScript не получается. Да и все равно я без wget-а никуда, он у меня всегда с собой. Torrent клиент писать на JS тоже не особо хочется. Поэтому uTorrent

Я ко всему прочему использую еще программу Samurize, для вывода информации на рабочий стол. Она отлично настраивается и дружит со скриптами.

Вкраце:
wget-ом выкачивается лента новостей в формате xml, из него вытаскиваются фильмы с нужными названиями (массив films).
Информация о найденных фильмах идет по клочкам в разные файлы. Лог-файл для того, что бы не скачивать повторно (fileLog). Еще 2 файла для Samurize. В один файл идет текстовая информация для отображения, в другой файл ссылки на обложку фильма.

В скрипте можно прописать свои Логин и Пароль, но это небезопасно, поэтому лучше пользоваться файлом cookie. Его можно вытащить из браузера, либо получить с помощью wget, что и делается в этом скрипте. Можно единоразово прописать в скрипте свои регистрационные данные, получить cookies, а потом использовать.

В uTorrent нужно зайти в настройки и натравить слежение за папкой, куда будут складываться Torrent-файлы, и он будет отлично на автомате качать.

Вот так приблизительно это выглядит

Нас невозможно сбить с пути, нам пофигу куда идти.

2 (изменено: jite, 2010-12-01 14:45:56)

Re: JS: Автокачалка сериалов с LostFilm.tv

1) Скрипт должен качать все торренты из ленты, содержащие ключевые фразы массива films.
2) Скрипт запускается примерно раз в день по требованию или заданию.
3) Samurize показывает данные о найденном при последнем срабатывании скрипта.
Я правильно понимаю?

off: А что делают кнопочки «как бы M» и «как бы про Flash» (по обе стороны от next-prev блока) в NP++?
В Омске сейчас довольно холодно. Мда...

3 (изменено: kaster, 2010-12-01 20:36:25)

Re: JS: Автокачалка сериалов с LostFilm.tv

Хм, в uTorrent есть "автокачалка". Надо просто его настроить на нужный сериал, ну и сам RSS загрузчик настроить с учетом куков.
В этой теме разжевано - Как подружить utorrent+rss+lostfilm.tv ?

autoit@conference.jabber.ru - Конференция скриптового языка AutoIt на jabber.ru

4

Re: JS: Автокачалка сериалов с LostFilm.tv

jite пишет:

1) Скрипт должен качать все торренты из ленты, содержащие ключевые фразы массива films.
2) Скрипт запускается примерно раз в день по требованию или заданию.
3) Samurize показывает данные о найденном при последнем срабатывании скрипта.
Я правильно понимаю?

off: А что делают кнопочки «как бы M» и «как бы про Flash» (по обе стороны от next-prev блока) в NP++?
В Омске сейчас довольно холодно. Мда...

1) В моем случае качает все торренты но не 720p, потому как на мониторе не видно особой разницы. Мне хватает.

2) Скрипт надо запускать или самому или давать указания планировщику (At, nnCron ...). Я использую Samurize, там задается интервал обновления скрипта. Очень удобная штука. Что бы понять, лучше вам ознакомится с программой лично, сразу все поймете. У меня обновления 1 раз в час.

3) Вообще Samurize имеет свой конструктор. Он интуитивно понятен и легок в освоении. Было бы желание. Здесь я не описываю как с ним подружить мой скрипт, здесь не об этом. Вкраце так: Скрипт пишет 2 файла. Один просто с названиями сериалов попадающих под маску, и находящихся в данный момент в ленте новостей. В Samurize просто стоит поле, в котором отображается текстовый файл. Кстати возможно всякие логи выводить прямо на рабочий стол. Во второй файл складываются ссылки на изображения. Тут уже к Samurize подключается небольшой скриптик, который эти ссылки обрабатывает.
Если интересно, почитайте о программе в интернете, информации достаточно и работает стабильно. У меня вылетала всего 2 раза за год использования. Да и если она вылетела, сразу видно, так как рабочий стол пустеет.

Про NP++
"как бы M"» - плагин SnippetPlus, добавляет Сниппеты
«как бы про Flash -плагин Function List, список функций открытого файла.

kaster пишет:

Хм, в uTorrent есть "автокачалка". Надо просто его настроить на нужный сериал, ну и сам RSS загрузчик настроить с учетом куков.
В этой теме разжевано - Как подружить utorrent+rss+lostfilm.tv ?

Спасибо за ссылку. Правда говорят: Век живи, век учись. Я писал скрипт под впечатлением статьи с Хабра. Поэтому даже и не подумал искать другие варианты. А так же я хотел, что бы наглядно было видно, появились ли новые серии. Кстати поэтому и добавил еще и обложки на рабочий стол, только чтобы, бросалась в глаза.

Нас невозможно сбить с пути, нам пофигу куда идти.