Pull to refresh

Флаеры в кино

Reading time3 min
Views1.3K
Изучить Перл я мечтал уже довольно давно, но все никак не удавалось. Но вот на днях я собрал всю свою решимость и сел за мануал. Естественно, нужна была задача требующая решения, и она нашлась. Есть замечательный журнал TimeOut, и на его сайте периодически раздают флаеры на бесплатные кинопоказы. Единственный минус — нельзя подписаться на эти раздачи, то есть по почте приглашение в кино нахаляву никто не пришлет. Это-то неудобство я и решил исправить.

Картинки с флаерами на сайте таймаута имеют вид 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 — для Москвы
Tags:
Hubs:
Total votes 41: ↑30 and ↓11+19
Comments52

Articles