Парился я парился, хотел было уж плюнуть. Но потом Гугл рассказал про утилиту cURL. Качнул, оказалось что она таки очень правильно и корректно передает POST-запросы. Вот собственно и родился скрипт для закачки файлов с depositfiles.com
Работает так:
get.js [OPTION]... [URLs]
где
OPTOIN
-i FILE, ссылки на закачку будут браться из файла FILE
-P PREFIX, Сохранять файлы в директорию PREFIX\...
URL, Ссылки на закачку
Примеры:
get.js -i list.txt http://depositfiles.com/ru/files/8a6tif7hg
get.js http://depositfiles.com/ru/files/8a6tif7hg -P c:\downloads
get.js http://depositfiles.com/ru/files/1236tif7hg http://depositfiles.com/ru/files/8a61557hg -P downloads
Собственно скрипт get.js вот:
//Скрипт для автоматической скачки файлов с сервиса depositfiles.com
var WshShell = WScript.CreateObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
sLogFile = "dload.log";
sPathTocURL = "c:\\Programs\\cURL\\curl.exe";
sDirPrefix = "";
sListInputFile = "";
aListInputFile = "";
sArg = WScript.Arguments;
if (sArg.length==0)
{
eh ("Использование:\r\nget.js [OPTION]... [URLs]...\r\n\r\nOPTIONS\r\n\r\n-i FILE,\r\n Загрузить список ссылок из FILE\r\n-P PREFIX,\r\n Сохранять файлы в директорию PREFIX/...\r\nURLs,\r\n Ссылки на страницы depositfiles.com\r\n\r\n\r\n\v.0.5");
WScript.Quit();
}
dStartTime = new Date();
SaveToLog("Старт: " + GetToday(dStartTime) + " " + GetTimeNow(dStartTime));
e = new Enumerator(WScript.Arguments);
for (e.moveFirst(); !e.atEnd(); e.moveNext())
//Разбор аргументов коммандной строки
{
if (e.item()=="-P")
{
e.moveNext();
if (e.item().indexOf(":")==-1)
{
s = WScript.ScriptFullName.replace(WScript.ScriptName,"") + "\\" + e.item() + "\\";
}
else
{
s = e.item() + "\\";
}
sDirPrefix = s.replace("\\\\","\\").replace(/\//g,"\\");
}
if (e.item()=="-i")
{
e.moveNext();
if (fso.FileExists(e.item()))
{
TextStream = fso.GetFile(e.item()).OpenAsTextStream(1)
sListInputFile += TextStream.ReadAll()+ "\r\n";
}
}
if (e.item().match(/http:\/\/depositfiles.com.*/)) sListInputFile+=e.item()+ "\r\n"
}
sListInputFile=sListInputFile.replace(/com\/files/g,"com/ru/files")
aListInputFile = sListInputFile.split("\r\n");
if (!sDirPrefix)
{
sLogFile = WScript.ScriptFullName.replace(WScript.ScriptName,"") + sLogFile;
}
else
{
sLogFile = sDirPrefix + sLogFile;
}
//Основной цикл
for (i=0;aListInputFile.length-1>i;i++)
{
if (aListInputFile[i].match(/.*depositfiles.com.*/))
{
SaveToLog("Ссылка: " + aListInputFile[i]);
sPage = LoadPage (aListInputFile[i]);
//Почему то не дают ссылку паразиты
if (sPage.match("приносим свои извинения"))
{
SaveToLog("#3 Не удалось получить ссылку блин, передых 10 сек.");
while (sPage.match("приносим свои извинения"))
{
WScript.Sleep(10000);
sPage = LoadPage (aListInputFile[i]);
}
SaveToLog("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
}
//Скачивание уже идет. Вот те раз, как так?
if (sPage.match("уже идет скачивание"))
{
s = sPage.replace(/.*class=\"ctable1left\".*class=\"ip\".*?<strong>(.*?)<\/strong>.*/, "$1").replace("<br>"," ");
SaveToLog("#1 " + s + "\r\nПробуем с интервалом в 30 сек.");
while (sPage.match("уже идет скачивание"))
{
WScript.Sleep(30000);
sPage = LoadPage (aListInputFile[i]);
}
SaveToLog("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
}
//Ну вот, накачались. Придется пожождать
if (sPage.match("исчерпали лимит подключений"))
{
s = sPage.replace(/.*<strong>(ВНИМАНИЕ!.*?)<\/strong>.*/, "$1").replace("через", "через ");
sTime=s.match(/\d{1,2}/g);
if (sTime.length>1)
{
nHour = sTime[0];
nMin = sTime[1];
}
else
{
nHour = 0;
nMin = sTime[0]
}
nTimeSleep = ((parseInt(nHour)*60+parseInt(nMin))*60000)+5000;
SaveToLog("#2 " + s);
SaveToLog("Спим " + nTimeSleep/60000 + " минут");
WScript.Sleep(nTimeSleep);
i--;
}
//Нет уже такого файла. Странно.
if (sPage.match("файла не существует"))
{
s = sPage.replace(/.*no_download_msg\">(.*)<span class=\"html_download_api-not_exists.*/, "$1");
SaveToLog("#4 " + s);
SaveToLog("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
}
//Наконец то повезло
if (sPage.match("download_url"))
{
sSize = sPage.replace(/.*class=\"info\">.*?<b>(.*?)<\/b>.*/, "$1").replace(" "," ");
sLink = sPage.replace(/.*<form action=\"([a-z0-9A-Z\/\.:_\-=]+)\" method=.get. on.ubmit=.download_started.*/, "$1");
sFileName = sLink.replace(/.*\/(.*)/, "$1");
s = "Файл: " + sFileName + "\r\nРазмер: " + sSize + "\r\nПрямая ссылка: " + sLink;
SaveToLog("#5 " + s);
if (!fso.FileExists(sDirPrefix + sFileName))
{
d = new Date();
SaveToLog("Начали: "+ GetTimeNow(d));
WshShell.Run(sPathTocURL + ' "' + sLink + '" --create-dirs -o "' + sDirPrefix + sFileName + '"',1, true);
SaveToLog("Закончили: "+ GetTimeNow(d));
SaveToLog("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
}
else
{
SaveToLog("#6 " + "Уже скачан. Внезапно?");
SaveToLog("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
}
}
}
}
dEndTime = new Date();
SaveToLog("Финиш: " + GetToday(dEndTime) + " " + GetTimeNow(dEndTime));
dAllTime = dEndTime - dStartTime;
SaveToLog("НА все провсе ушло: " + " " + dAllTime/1000 + " секунд");
SaveToLog("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
eh ("Все что можно, закачано!");
function LoadPage (file)
{
WshShell.Run(sPathTocURL + ' -d "gateway_result=1" -o page.htm ' + file, 0, true);
f = fso.OpenTextFile ("page.htm", 1);
sPage = f.ReadAll();
f.Close();
fso.DeleteFile("page.htm", 1);
return StrConv(sPage.replace(/[\n\r\t]/g,""), "Windows-1251","UTF-8");
}
function SaveToLog (text)
{
LogFile = fso.OpenTextFile(sLogFile, 8, true);
LogFile.WriteLine(text);
LogFile.Close();
}
function StrConv(Text, SourceCharset, DestCharset)
{
var Stream = new ActiveXObject ("ADODB.Stream");
Stream.Type = 2;
Stream.Mode = 3;
Stream.Open;
Stream.Charset = SourceCharset;
Stream.WriteText (Text);
Stream.Position = 0;
Stream.Charset = DestCharset;
sStrConv = Stream.ReadText;
return sStrConv;
}
function GetToday (d)
{
var Day = d.getDate();
var Month = d.getMonth();
var Year = d.getFullYear();
if (Day<10) Day = '0'+Day;
if (Month<10) Month = '0'+Month;
return Day + "." + Month + "." + Year;
}
function GetTimeNow (d)
{
var Hour = d.getHours();
var Min = d.getMinutes();
var Sec = d.getSeconds();
if (Hour<10) Hour = '0'+Hour;
if (Min<10) Min = '0'+Min;
if (Sec<10) Sec = '0'+Sec;
return Hour + ":" + Min + ":" + Sec;
}
function eh (text)
{
WScript.Echo(text);
}
Скриптописатель из меня еще тот, поэтому не РЖАТЬ и не ОБЗЫВАТЬСЯ!
Кому будет не лень все это дело запустить, тыкайте в глюки. С радостью поисправляю. Ибо на ошибках учатся.
PS Требуется cURL, у меня он тут c:\Programs\cURL\cURL.exe
PSS В планах так же добавить сюда же рапиду, и Ютуб.
Нас невозможно сбить с пути, нам пофигу куда идти.