1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

automatizar download de informação

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por neutral, 11 de Março de 2008. (Respostas: 8; Visualizações: 764)

  1. neutral

    neutral Power Member

    eu tenho certos sites que vou regularmente buscar fichas, pdf's etc. existe alguma maneira de automatizar esta acção? como sincronizar? ou pelo menos avisar sempre que houver mais pdf's?
     
  2. c3l5o

    c3l5o I'm cool cuz I Fold

    A unica forma que conheço de fazeres isso é se os sites tiverem um sistema de feeds incorporado :/
     
  3. wicked

    wicked Power Member

    Podes sempre criar um cronjob com o wget, mas precisas de saber os nomes dos ficheiros a sacar ou pelo menos conseguir "adivinhar" a nomenclatura usada.
     
  4. slack_guy

    slack_guy Power Member

    Se souberes programar Perl, com LWP fazes isso com uma perna às costas.

    EDIT
    Um script rudimentar:
    Código:
    #!/usr/bin/perl
    # FILE: check_content.pl
    use strict;
    use warnings;
    use LWP::UserAgent;
    use Digest::SHA1 qw/sha1_hex/;
    
    my $LOCAL_FILE = q|/tmp/check_webcontent|;
    my $URL = q|http://www.techzonept.com/index.php|;
    
    check();
    
    sub check {
    
        my $ua = LWP::UserAgent->new;
        $ua->agent("MyApp/1.0");
        my $req = HTTP::Request->new(GET => $URL);
        my $res = $ua->request($req);
        my $actual_hash = sha1_hex($res->content());
    
        if ( -f $LOCAL_FILE ) {
            if ( read_sha1() ne $actual_hash ) {
                write_sha1($actual_hash);
                alert_me();
            }
        } else {
            write_sha1($actual_hash);
            alert_me();
        }
    
        return;
    
    }
    
    sub read_sha1 {
        open my $FILE, '<', $LOCAL_FILE or die "$!\n";
        my $hash = <$FILE>;
        close $FILE;
        return $hash;
    }
    
    sub write_sha1 {
        my $hash = shift;
        open my $FILE, '>', $LOCAL_FILE or die "$!\n";
        print $FILE $hash;
        close $FILE;
        return;
    }
    
    sub alert_me {
        print qx|/usr/bin/xmessage Alteracões em $URL|;
        return;
    }
    
     
    Última edição: 12 de Março de 2008
  5. neutral

    neutral Power Member

    não sei programar em perl. para já só haskell :P mas pelo que percebi nesse script só tenho que alterar o url que está a techzone certo? muito obrigado :)
     
  6. slack_guy

    slack_guy Power Member

    Precisamente.
    Provavelmente terás de instalar os módulos LWP e Digest::SHA1

    Código:
    # cpan LWP Digest::SHA1
    
    Vais respondendo às perguntas do 'instalador' e em dois minutos tens isso a funcionar.
     
  7. neutral

    neutral Power Member

    penso que consegui instalar isso. agora copio o script para um ficheiro com outra url e depois?
     
  8. slack_guy

    slack_guy Power Member

    Depois tens duas hipóteses:

    A) $ chmod +x nome_do_script.pl
    e executas: $ /path/to/script.pl

    B) $ perl /path/to/script.pl

    Nota que o alerta é uma mera janela (xmessage). Não podes por isso assim na crontab. Como é que queres receber a notificação? mail?

    EDIT
    Para enviar e-mail se a página tiver sido modificada, substitui a função alert_me() pela seguinte:

    Código:
    sub alert_me {
    
        use Mail::Sendmail;
    
        sendmail(
            To        => [email protected]|,
            From      => [email protected]|,
            Subject   => q|Notificação...|,
            Message   => qq|A página $URL foi modificada!\n|,
            smtp      => q|mail.server.com|,
        ) or die $Mail::Sendmail::error;
    
        return;
    }
    
    Terás de instalar o módulo Mail::Sendmail:
    Código:
    # cpan Mail::Sendmail
     
    Última edição: 12 de Março de 2008
  9. neutral

    neutral Power Member

    muito obrigado :) ;)
     

Partilhar esta Página