Як завантажити WEB сторінку?, Perl, Програмування, статті

require LWP::UserAgent; $ua = LWP::UserAgent->new;
$ Ua-> proxy (["http", "ftp"], "адреса проксі-сервера");
$ Req = new HTTP:: Request ("GET" => "сторінка для скачування");
if ($res->is_success) { $page = $res->content; }

Як відправити лист із прикріпленими файлами?

require MIME::Lite;

$ Msg = MIME:: Lite-> new (From => "Ваш@Адрес.com",
To => "Адрес@Получателя.com",
Subject => "Тема повідомлення",
Type => “multipart/related”);
$msg->attach(Type =>”text/plain; charset=windows-1251″,
Data => текст листа);
$msg->attach(Type => “image/gif”,
Path => шлях до файлу,
Filename =>”img.gif”);
$msg->send();


Розглянемо по кроках роботу програми.



Технічну реалізацію скрипта я буду описувати схематично, якщо буде
не зрозуміло – дивіться исходник.

C ANEKDOT.RU всі історії за вчора. Обчислюємо дату – опівночі вчорашнього дня.
Доповнюємо дату нулями зліва.

$sutki=24*60*60;
($tek_day,$tek_month,$tek_year)=(localtime)[3,4,5];
$in1=timelocal(0,0,0,$tek_day,$tek_month,$tek_year);

$in2=$in1-$sutki;
($tek_day,$tek_month,$tek_year)=(localtime($in2))[3,4,5];
$tek_month++;
$tek_year+=1900;

if ($tek_month<10) {$tek_month="0".$tek_month}
if ($tek_day<10) {$tek_day="0".$tek_day;}
$an_year=substr($tek_year, 2, 2);


Сторінка для скачування. Визначаємо адреса сторінки згідно наведеного
шаблону.

$ Url_page = "http://www.anekdot.ru/an/an". $ An_year. $ Tek_month.
"/ O". $ An_year. $ Tek_month. $ Tek_day. ". Html";

Викачуємо вміст сторінки використовуючи модуль LWP.

if ($ url_page & & $ url_page =~/^( https? | ftp | file | nntp ):///) {
my $req = new HTTP::Request(“GET” => $url_page);
my $res = $ua->request($req);
$gabarit = $res->content;
}

Підключаємо зовнішній CSS і JavaScript. Тут все дуже спрощено показано, але
розібратися можна – качаємо файл з скриптами і підставляємо його в потрібне місце
HTML документа.

зовнішній CSS = "<style type="text/css">". "
".
“<!–“."". Файл зі стилями."
–>
</style>
";
документ HTML = ~ s / <link ([^<>]*?) href ="?([^" ]*)"?([^>]*)>/ зовнішній CSS / iegmx;

зовнішній JS = "<script> <!–".
"". Файл зі скриптами."
–>
</script>
";

документ HTML = ~ s / <script([^>] *) src = "http://www.ishodniki.ru/ "?([^"] * js )"?([^>]*)>/ зовнішній JS / iegmx;


Проходить по всіх посиланнях і міняємо відносний шлях на абсолютний.
Необхідно це для того, щоб натиснувши на посилання в листі ми потрапляли саме туди,
куди вказувала посилання з документа, розміщеного в Інеті.

my $ analyseur = HTML:: LinkExtor-> new; $ analyseur-> parse ($ gabarit);
my @l = $analyseur->links;
foreach my $url (@l) {
my $ urlAbs = URI:: WithBase-> new ($ $ url [2], $ racinePage) -> abs;
chomp $urlAbs;

if (($ $ url [0] eq "a") & & ($ $ url [1] eq "href") & &
($ $ Url [2]) & & (($ $ url [2]! ~ M! ^ http://!) & & ($ $ Url [2]! ~ M! ^ mailto:!))) {
$ Gabarit = ~ s / s href = [""]? $ $ Url [2] [""]?/ href = "$ urlAbs" / gimx;
}
}


Вибираємо з документа всі зображення, завантажуємо картинку, визначаємо тип і
повертаємо її, закодовану в MIME.

if ( ((lc($$url[0]) eq “img”) || (lc($$url[0]) eq “src”)) ) {
push(@mail, create_image_part($urlAbs));
}

if (lc($ur)=~/gif$/) {$type="image/gif";}
elsif (lc($ur)=~/jpg$/) {$type = "image/jpg";}
else { $type = "application/x-shockwave-flash"; }

my $res2 = $ua->request(new HTTP::Request(“GET” => $ur));
$buff1=$res2->content;

$ File_name = substr ($ ur, rindex ($ ur ,"/")+ 1, length ($ ur));
# Кодуємо чергову картинку
my $mail = new MIME::Lite(
Data => $buff1,
Encoding =>”base64″,
“Filename”=>$file_name);
$mail->attr(“Content-type”=>$type);
$mail->attr(“Content-Location”=>$ur);


Створюємо MIME об'єкт, вказуємо від кого і кому лист, тему повідомлення. Якщо на
сторінці зображень немає – тип повідомлення text / html, якщо є картинки –
multipart/related.

$mail = new MIME::Lite “From” => “somebody@somewhere.com”,
“To” => $to_email,
“Subject” => $url_page,
“Data” => $html;
$mail->attr("Content-type" => $content_type);

if (@mail) {
# Приєднується кожну картинку
$ Mail-> replace ("Type" => "multipart / related");
foreach (@mail) {$mail->attach($_);}
}


Відсилаємо сторінку поштою. Можна використовувати SMTP або sendmail.

MIME:: Lite-> send ("smtp", "адреса SMTP сервера", Timeout => 60); $ mail-> send ();

Виконання програми.


Розміщуємо наш скрипт в каталог, звідки дозволено виконання програм і робимо
файл виконуваним

chmod 750 /usr/local/www/cgi-bin/html_on_email3.pl

Для того, щоб остаточно все автоматизувати, вішаємо наш скрипт на CRON.
Для цього в файл / etc / crontab додаємо рядок

0 9 * * * root /usr/local/www/cgi-bin/html_on_email3.pl

і щоранку о 9 годині читаємо свіжі анекдоти.

Для того, щоб скрипт працював і в локальній мережі необхідно встановити
з'єднання з інетом і явно вказати адресу проксі-і SMTP – сервера.

$ua->proxy([“http”, “ftp”], “http://10.0.0.3:3128/”);
MIME:: Lite-> send ("smtp", "10.0.0.1", Timeout => 60);

На завершення хочу зауважити, що все можна було написати і по-іншому, більш
красиво. Але програма працює, а більшого від неї і не потрібно 🙂

Исходник
програми

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*