Изучить Перл я мечтал уже довольно давно, но все никак не удавалось. Но вот на днях я собрал всю свою решимость и сел за мануал. Естественно, нужна была задача требующая решения, и она нашлась. Есть замечательный журнал TimeOut, и на его сайте периодически раздают флаеры на бесплатные кинопоказы. Единственный минус — нельзя подписаться на эти раздачи, то есть по почте приглашение в кино нахаляву никто не пришлет. Это-то неудобство я и решил исправить.
Картинки с флаерами на сайте таймаута имеют вид vkino.timeout.ru/pix/XXXXX.jpeg, где XXXXX — номер флаера. Номера идут по порядку, то есть задача сводится к тому, чтобы периодически проверять, не появилась ли новая картинка. Если картинка появилась — она скачивается на сервер, где из нее делается превьюшка, и рассылается на определенные адреса. Номера скачаных картинок, как и адреса электронной почты хранятся в текстовых файлах. Запускается по крону.
Собственно, код:
http://timeout.merrymakers.ru/ — это для Питера
http://freekino.merrymakers.ru/ — это для Москвы
Еще раз повторю — Перл я впервые увидел два дня назад. Очень хочется услышать ваши замечания.
UPD: С удовольствием впишу ваш адрес электронной почты в заветный список. От вас — письмо на vantoozz@gmail.com и город))
UPD2: Добавил RSS. http://timeout.merrymakers.ru/films.xml — для Питера и http://freekino.merrymakers.ru/films.xml — для Москвы
Картинки с флаерами на сайте таймаута имеют вид vkino.timeout.ru/pix/XXXXX.jpeg, где XXXXX — номер флаера. Номера идут по порядку, то есть задача сводится к тому, чтобы периодически проверять, не появилась ли новая картинка. Если картинка появилась — она скачивается на сервер, где из нее делается превьюшка, и рассылается на определенные адреса. Номера скачаных картинок, как и адреса электронной почты хранятся в текстовых файлах. Запускается по крону.
Собственно, код:
#!/usr/bin/perl
use LWP::Simple;
use MIME::Lite;
use GD;
print "Content-type: text/html; charset=UTF-8\n\n";
open(FLY,"+< ../data/flyers");
flock(FLY,2);
my @flyers = <FLY>;
@flyers=reverse(@flyers);
my $nextFlyer=$flyers[0];
my $nothing=1;
for($n=1; $n<4; $n++){ #не все флаеры идут по порядку, существуют пропуски
if($nothing){
$nextFlyer++;
while($file=get("http://vkino.timeout.ru/pix/".$nextFlyer.".jpeg")){
print FLY $nextFlyer."\n";
open(IMG, "> ../i/".$nextFlyer.".jpg");
binmode IMG;
print IMG $file;
close(IMG);
$image=GD::Image->newFromJpeg("../i/".$nextFlyer.".jpg", 1);
$thubmHeight=240;
$thubmWidth=$thubmHeight*$image->width/$image->height;
$thumb=new GD::Image($thubmWidth,$thubmHeight,1);
$thumb->copyResampled($image,0,0,0,0,$thumb->getBounds(),$image->getBounds());
open(IMG, "> ../i/".$nextFlyer."-thumb.jpg");
binmode IMG;
print IMG $thumb->jpeg(80);
close(IMG);
open(MAILS,"< ../data/mails");
flock(MAILS,2);
@mails = <MAILS>;
close(MAILS);
foreach my $mail (@mails){
$msg=MIME::Lite->new(
From =>'merrymakers.ru <info@merrymakers.ru>',
To =>$mail,
Subject =>'Пора в кино!',
Data =>"Привет, чувак! Что-то ты заработался сосвсем.. Не пора ли в кино сходить на халяву?))"
);
$msg->attach(
Type =>'image/jpeg',
Path =>'../i/'.$nextFlyer.'.jpg',
Filename =>'timeout.jpg'
);
$msg->send;
}
$nextFlyer++;
$nothing=0;
}
}
}
close(FLY);
* This source code was highlighted with Source Code Highlighter.
http://timeout.merrymakers.ru/ — это для Питера
http://freekino.merrymakers.ru/ — это для Москвы
Еще раз повторю — Перл я впервые увидел два дня назад. Очень хочется услышать ваши замечания.
UPD: С удовольствием впишу ваш адрес электронной почты в заветный список. От вас — письмо на vantoozz@gmail.com и город))
UPD2: Добавил RSS. http://timeout.merrymakers.ru/films.xml — для Питера и http://freekino.merrymakers.ru/films.xml — для Москвы