У цій статті буде розказано про те, як
використовуючи модулі Perl LWP :: UserAgent і MIME :: Lite скачати
HTML сторінку і відіслати її в листі разом зі
усіма вкладеними зображеннями.
Застосовуючи викладений метод я щодня
отримую свіжі анекдоти в свою поштову
ящик - ну лінь мені кожен день лазити в Інет
🙂
- LWP :: UserAgent - клас для користувача
агентів WWW
документі
часу в секунди
сайт анекдотів / an / an рік місяць / o рік місяць день.html
причому від року беруться тільки 2 останні
цифри, а місяць і день доповнюється до 2
символів нулями зліва, якщо це необхідно.
Невеликий ліричний відступ для тих,
хто тільки почав освоювати Perl.
Як завантажити WEB сторінку?
Як відправити лист з прикріпленими
файлами?
Розглянемо по кроках роботу програми.
- Визначаємо URL документа
- Викачуємо вміст WEB сторінки
- Шукаємо і викачуємо все що містяться на
сторінці зображення
їх абсолютне значення
електронній пошті
Технічну реалізацію скрипта я буду
описувати схематично, якщо що буде не
зрозуміло - дивіться исходник.
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);
Викачуємо вміст сторінки використовуючи
модуль 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 = '\ N ";
документ HTML =
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]!
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) =
/ 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' => '[email protected]',
'To' => $ to_email, 'Subject' => $ url_page, 'Data' => $ html; $ Mail-> attr ( "Content-type"
=> $ Content_type);
if (@mail)
$ Mail-> replace ( "Type" => "multipart / related");
# Присоеденяюсь кожну картинку
foreach (@mail)>
>
Відсилаємо сторінку поштою. Можна, можливо
використовувати SMTP або sendmail.
Розміщуємо наш скрипт в каталог, звідки
дозволено виконання програм і робимо
файл виконуваним
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 годині читаємо свіжі
анекдоти.
На завершення хочу зауважити, що все можна
було написати і по-іншому, більш красиво.
Але програма працює, а більшого від неї і
не вимагається 🙂
Покажи цю статтю друзям: