13.01.2009. Внимание! Произошли принципиальные изменения на файлобменниках — теперь каждый аккаунт вмещает 1GB, вместо прежних 100 мегабайт. Также перестал работать трюк с подставлением «?submit=1» в конец ссылок. Соответственно, перестали работать и программы для автоматического скачивания файлов с датакода.
Фактически на файлообменнике сделали аналогично тому, что сделано на ifolder.ru, а именно: на странице для скачивания выдается прямая ссылка на файл, которая действительна в течении 3х дней. Это жизнь совсем не облегчело, поэтому было принято решение написать скрипт, который бы брал ссылки из файла, сам выдирал со страницы скачивания имя файла и прямую ссылку и запускал wget на скачивание файла. Имя файла необходимо потому, что wget при скачивании по прямой ссылке не умеет определять имя скачиваемого файла. Вот что из этого получилось (за 3 часа при полном не знании Perl'а на момент начала написания скрипта):
#!/usr/bin/perl -wВот. Работает. Спасибо Диме за направление в нужную сторону.
use strict;
use LWP::Simple;
print "file downloader\n";
unless (@ARGV == 1)
{
print "invalid number of arguments\n";
print "usage:\n";
print "./link.sh <filename>";
return;
}
my $in = $ARGV[0];
print "opening file $in\n";
open(file_with_links,$in);
foreach (<;file_with_links>)
{
print "downloading page with direct link\n";
my @download_page = get "$_";
my $url;
my $download_file_name;
print "trying find direct link in page\n";
foreach (@download_page)
{
$url = "http:\/\/files$1" if $_ =~/href="http:\/\/files([^"]+)"/i;
$download_file_name = $1 if $_ =~/\<li\>файл: \<b title="([^"]+)"/i;
}
print "downloading file\n";
system ("wget -t inf -T 1 -c -O \"$download_file_name\" \"$url\"")
if (defined($url) && defined($download_file_name));
}
print "closing file $in";
close(file_with_links);
Комментариев нет:
Отправить комментарий