Moblogas
Vakar naktį pasidariau moblogą. Tai turbūt vienas iš tų projektų kur dariau nes galiu padaryt, o ne todėl kad reikia. Faktiškai Perlo kodo rašymas visada malonus, net jei ir nepildysiu to moblogo ateityje – iš manęs fotografas tai kaip iš mano bobulės perlininkė.
Visam šitam daiktui tiesiog persikopijavau savo svetainės kodą į kitą direktoriją, šiek tiek pataisiau šablonus (bet ne iki galo, nes vakar jau labai norėjosi miego), sukūriau porą SQL lentelių, pataisiau kodą, kad dirbtų su tomis naujomis lentelėmis ir parašiau el. pašto apdorojimo programėlę. Pakeitimų ne tiek daug kaip atrodo ;)
Štai kodas, kuris apdoroja gautą el. paštą, surašo kur reikia attachmentu atėjusias JPG bylas ir įterpia reikiamus duomenų bazės įrašus:
#!/usr/bin/perl -w
use strict;use MIME::Parser;
use FileHandle;
use File::Path;
use DBI;
$|++; # Autoflush on
# Prisijungiam prie MySQL
my $dbh = DBI->connect("DBI:mysql:database=moxliukas;dbhost=localhost",
'moxliukas', 'passwordas');
# katalogų keliai - laikinas ir output
my $tmp_dir = '/home/moxliukas/tmp';
my $output_dir = '/home/moxliukas/public_html/moblog/images';
my $parser = MIME::Parser->new;
$parser->output_dir($tmp_dir);
# Skaitom viską iš STDIN
my $entry = $parser->parse(*STDIN);
# Kiekvienai MIME daliai...
for my $part ($entry->parts) {
# Žiūrim koks duomenų tipas
my $mime = $part->mime_type;
if($mime =~ /jpeg/) { # jei tai JPG...
# sukuriam bylos pavadinimą pagal unix timestamp
my $url = time() . '.jpg';
my $fh = FileHandle->new($output_dir . '/' . $url, 'w');
binmode($fh);
my $ifh = $part->open('r');
# perkopijuojam bylas kur reikia
$fh->print($ifh->getlines);
$_->close for($fh, $ifh);
# įterpiam į duombazę
my $sql = "INSERT INTO moblogs SET kada=NOW(), url='$url'";
$dbh->do($sql);
} else {
# Jei tai ne JPG, praleidžiam šią dalį
next;
}
}
$dbh->disconnect;