Lisää kuvablogista

Kirjoittaja Sami, 26.12.2002

Kuvablogisoftan ensimmäinen kunnollinen versio alkaa nyt olla valmis. Monia kiinnostanee, miten koko blogi on tehty, joten tässä jutussa on hieman teknisempää kuvausta koko systeemin toiminnasta.

Otan kuvat Nokia 7650 -kamerakännykällä ja lähetän ne edelleen eteenpäin sähköpostina. Koska kuvat lähtevät GPRS-datayhteyden yli, tiedonsiirtokulut eivät tule kovin kalliiksi. Yhden valokuvan lähettämiseen kuluu kaistaa kuvasta riippuen noin 30-50 kilotavua – rahassa siis n. 5-15 senttia (liittymätyypistä riippuen). Huomattava ero 59 sentin hintaiseen MMS-viestiin verrattuna!

Lähetän valokuvan sisältävän sähköpostin omaan sähköpostiosoitteeseeni. Kun se saapuu palvelimelle, viesti viedään ohjelmallisesti käsiteltäväksi. Olen tehnyt sähköpostipalvelimelleni procmaililla suodattimen, joka vie tietyllä otsikolla varustetut viestit ohjelmalle. Muut postit menevät edelleen normaalisti sähköpostilaatikkooni.

Suodattimen asetuksia sisältävä .procmailrc -tiedosto näyttää tältä:

:0:
* ^Subject:.*taikasana
| 7650.sh

Taikasanan paikalla on salainen sana, jolla otsikolla lähetetyt postit lisätään kuvakansioon. Tämä siksi, ettei mikä tahansa minulle lähetetty sähköpostiliite päätyisi Pinseriin.

Seuraavaksi viesti siirretään käsiteltäväksi skriptille nimeltään 7650.sh. Se näyttää tällaiselta:

#!/bin/sh
#
# purkaa kamerakännykästä tulevan sähköpostin (kuva liitteenä)
# ja sijoittaa kuvan selityksineen IDS:n kuva-albumiin.
# sähköpostin rungosta tulee kuvateksti.
#
# pohjautuu pekka haaviston ja mika niemisen koodiin
# samik 24-26.12.2002

# IDS:n kansion sijainti
root="vaihda tähän kuvakansion sijainti"
descroot="vaihda tähän kuvatekstikansion sijainti (album-data)"

# väliaikaiskansio
mkdir ~/.$$
cd ~/.$$
# puretaan viestin sisältö sinne
~/munpack

# käydään läpi tuloksena tulleet tiedostot
for i in *.jpg
do
# korjataan sulkujen tilalle tulevat X-kirjaimet nätimmiksi
ii=`echo $i | perl -p -e 's/X(\d+)X/_$1/g'`
# otetaan nimi erilleen
a=`basename $i .jpg`
aa=`basename $ii .jpg`
# tehdään kansionnimet päivämäärän mukaan
kk=`date "+%m-%Y"`
pp=`date "+%d"`
kkdir="${root}/${kk}"
ppdir="${root}/${kk}/${pp}"
dkkdir="${descroot}/${kk}"
dppdir="${descroot}/${kk}/${pp}"

# luodaan kansiot tarvittaessa
if [ ! -d $kkdir ]
then
mkdir $kkdir
chmod g+rwx,o+rx $kkdir
fi

if [ ! -d $ppdir ]
then
mkdir $ppdir
chmod g+rwx,o+rx $ppdir
fi

if [ ! -d $dkkdir ]
then
mkdir $dkkdir
chmod g+rwx,o+rx $dkkdir
fi

if [ ! -d $dppdir ]
then
mkdir $dppdir
chmod g+rwx,o+rx $dppdir
fi

# siirretään kuvat IDS:ään
mv $i ${ppdir}/$ii
cat $a.desc | perl -p -e \
's/\xc3\xa4/ä/g;s/\xc3\xb6/ö/g;s/\xc3\x84/Ä/g;s/\xc3\x96/Ö/g;' \
> ${dppdir}/${aa}_desc.txt
chmod 664 ${ppdir}/$ii
chmod 664 ${dppdir}/${aa}_desc.txt
done

# poistetaan väliaikaistiedostot
rm -rf ~/.$$

Näyttää ehkä monimutkaiselta, mutta käytännössä se ei ole sitä lainkaan. Mitä ohjelma siis tekee?

  1. Ohjelma purkaa munpack-komennolla sille annetun sähköpostiviestin paloiksi. Liitteet otetaan erilleen ja samoin varsinainen viestin runko. Tuloksena on joukko tiedostoja, esim. kuva1.jpg ja kuva1.desc. Desc-tiedosto sisältää viestin runkoon kirjoitetun selitystekstin. Kaikki tiedostot laitetaan niitä varten luotuun väliaikaiseen hakemistoon.
  2. Seuraavaksi ohjelma käy läpi hakemistossa olevat jpg-tiedostot. Ensi töikseen se siivoaa tiedostojen nimet. Kamerakännykässä tiedostojen nimet sisältävät sulkuja, ellei niitä ole erikseen nimetty joksikin muuksi. Munpack kuitenkin muuttaa sulut X-kirjaimiksi. Sen vuoksi tekstit tyyliin XnumeroX muutetaan muotoon _numero. Esim. Kuva(1).jpg muuttuu muotoon Kuva_1.jpg. IDS muuttaa myöhemmin vielä alleviivausmerkin välilyönniksi, joten kuvagalleriassa se näkyy muodossa “Kuva 1”.
  3. Sitten kuvista otetaan tiedostonnimet talteen. Muuttuja i sisältää kuvatiedoston alkuperäisen nimen, ii siivotun nimen. Muuttuja a sisältää nimen ilman jpg-tarkenninta, aa saman siivotussa muodossa.
  4. Sen jälkeen valmistetaan hakemistojen nimet päivämääriä varten. Kuvathan tallennetaan päiväkohtaisiin hakemistoihin, joten niiden nimet täytyy luoda. Toiseen tulee kuukausi, väliviiva ja vuosi, toiseen taas päivän numero. Eli esim. kuvakansio/Kuvablogi/12-2002/27
  5. Ohjelma testaa, ovatko tarvittavat hakmeistot olemassa. Jos niitä ei löydy, ne luodaan.
  6. Lopuksi tiedostot siirretään IDS:n kansioihin. IDS:lle riittää, kunhan jpg-kuva siirretään varsinaiseen kuvahakemistoon ja selitysteksti vastaavaan selitystekstihakemistoon. Kuvagalleriasofta tekee loput. Kamerasta tuleva selitysteksti on UTF-8 -muodossa, joka ei oikein sovellu Pinserissä esitettäväksi. Sen vuoksi selitysteksti muunnetaan hurjan näköisellä Perl-koodin pätkällä oikeaan muotoon.
  7. Lopuksi vielä väliaikaishakemisto siivotaan pois ja kaikki on valmista.

Jos haluat itsellesi vastaavan systeemin, kannattaa ensin tarkistaa että käytössäsi on kaikki tarvittava:

  • Kamerakännykkä, johon on tehty tarpeelliset sähköpostiasetukset (tämän systeemi on testattu Nokia 7650:lla, en tiedä miten muunmerkkiset puhelimet lähettävät kuvia)
  • Unix-pohjainen sähköpostipalvelin, jossa on käytössä procmail tai vastaava suodatinjärjestelmä.
  • Munpack-ohjelma
  • IDS-kuvagalleriaohjelma asennettuna toimivaksi

    Jutussa “Lisää kuvablogista” on yksi kommentti:

Kirjoita kommentti


Tämä linkki on ansa roskapostittajille.