среда, 14 января 2009 г.

Типа похвастаться.

Случилась у нас вот такая новость
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);
Вот. Работает. Спасибо Диме за направление в нужную сторону.

Комментариев нет:

Отправить комментарий