#!/usr/bin/perl -w
#
# HoroPod - zapis w urzdzeniu iPod codziennego horoskopu.
# http://disobey.com/d/code/, e-mail morbus@disobey.com.
#
# Kod ten jest darmowym oprogramowaniem; mona go rozpowszechnia i/lub
# modyfikowa zgodnie z warunkami dotyczcymi samego Perla.
#

use strict; $|++;
my $VERSION = "1.0";
use File::Spec::Functions;

# sprawdzamy, czy mamy potrzebne moduy; jeli nie, koczymy.
eval("use LWP;"); die "[err] Nie zainstalowano LWP.\n" if $@;

# naprawd prosta, dostpna tylko w Perlu metoda okrelania cieki
# do aktualnie zamontowanego urzdzenia iPod. Wyszukuje zamontowanych
# woluminw w folderze iPod_Control i uywa ich.
my $ipod = glob("/Volumes/*/iPod_Control");
unless ($ipod) { die "[err] Nie znaleziono iPod: $!\n"; }
$ipod =~ s/iPod_Control//g;  # jeden katalog wyej.
my $ipod_dir = catdir($ipod, "Notes", "Horoscopes");
mkdir $ipod_dir;  # celowy brak obsugi bdw.

# tworzymy obiekt User-Agent pobierajcy dane; faszywa identyfikacja 
# pozwoli nam przej przez filtry.
my $ua = LWP::UserAgent->new(agent => 'Mozilla/4.76 [en] (Win98; U)');

# pobieramy horoskopy. najpierw definiujemy wszystkie znaki zodiaku;
# uyjemy ich w ptli for.
my @signs = qw( aries taurus gemini cancer leo virgo libra
                scorpio sagittarius capricorn aquarius pisces );

# ptla po kolejnych znakach.
foreach my $sign (@signs) {

    # aby byo czytelniejsze.
    my $display_sign = ucfirst($sign);

    # adres URL Yahoo! dla aktualnego znaku.
    print "Pobieranie horoskopu, znak: $display_sign...\n";
    my $url = "http://astrology.yahoo.com/us/astrology/".
                "today/$sign"."dailyhoroscope.html";

    # pobieramy dane lub koczymy dziaanie.
    my $data = $ua->get($url)->content
      or die "[err] Niemoliwe pobranie danych: $!\n";

    # okrelamy dat.
    $data =~ /(\w{3} \w{3}\.? \d{1,2}, \d{4})/; my $date = $1;

    # i szukamy dopasowania; moglibymy uy parsera HTML, ale tak,
    # jak pokazano poniej, jest nieporwnywalnie prociej.
    my $preface = '<font face="Arial" size="-1" color=black>';
    my $anteface = '</font></TD></TR></table>'; # ante up!
    $data =~ /$preface(.*)$anteface/i; my $proverb = $1;

    # tre zapisujemy w naszym pliku.
    my $ipod_file = catfile($ipod_dir, $display_sign);
    open(IPOD_FILE, ">$ipod_file") or die "[err] Niemoliwe otwarcie pliku: $!\n";
    print IPOD_FILE "$display_sign\n$date\n\n";
    print IPOD_FILE "$proverb\n"; close(IPOD_FILE);

}

