Newsgroup: it.arti.fumetti
Titolo: [How-To] Come scaricare mesi interi di Usenet da Google

Salve a tutti!
Sotto suggerimento di Sleepers e con l'aiuto suo e di Marco 
Barisione [it.comp.software.newsreaders], mi appresto a descrivere i 
passaggi che ho effettuato per raggiungere l'agognato risultato 
(vedi subject).
Premetto che lavoro con sistemi windows.
STRUMENTI NECESSARI:
- Wget (
http://www.gnu.org/software/wget/wget.html
)
- Interprete Perl. Per chi non ce l'avesse di default nel proprio SO:
 
http://www.activestate.com/Products/Download/Download.plex?id=A
ctivePerl
- SuckGoog = Script in Perl di Diskre Panza. 
(
http://fly.to/demokrito
) sotto "Programmi"
- TURBOSGCONV = Programmino per convertire il risultato dello script 
precedente in un formato importabile in Agent, grazie a Turboblix 
(
http://digilander.libero.it/turboblix/
)
PASSAGGI
1) Installare WGET, che in realtà necessita solo di una directory per 
conto suo.
2) Installare l'interprete Perl. In linea di massima basta seguire le 
istruzioni riportate nella pagina web del download.
3) copiare lo script Suckgoog.pl nella stessa cartella di WGET. Fare 
doppio click sullo script, che dovrebbe essere riconosciuto 
dall'interprete Perl e avere come icona una perlina gialla.
4) Rispondere alle domande dello script:
    	- Newsgroup di ricerca
    	- Anno
    	- mese
5) aspettare.
6) Nella cartella dello script e di WGET si crea un'altra cartella 
con il nome del gruppo di discussione. Al suo interno si crea in 
automatico un'altra cartella con il mese e l'anno, e al suo interno 
ancora una serie di files.
7) Copiare il programma TurboSgConv in quest'ultima cartella, con i 
files scaricati. Fare doppio click.
8) Impostare anno e mese, e cliccare su Start.
9) si crea un file "import.txt", importabile da Agent.
NB: non so se a causa della mia connessione aziendale (firewall e 
altro), ma scaricare un mese intero di IAF con 100-120 messaggi di 
media al giorno, è veramente lungo, dell'ordine di ore. Quindi fatevi 
i vostri conti per la connessione.
Al momento non sembra essere disponibile selezionare un numero di 
giorni specifico dallo script.
Buon download! :)
-- 
Mandi
 MailMaster C.
!------------------------------------!
!  I'm reading: "Appunti di Informatica Libera" by D. Giacomini
!  OSC Rulez!       >^..^<
!------------------------------------!
"No matter where you go, there you are."
Remove TELEVERIMUSINARIFRRRR if you want to write me back! Cheers.

) said:
Interessante.
Il giorno in cui avro' l'ADSL, potro' finalmente recuperare tutte le annate di
iaf!
Ciao
    Andy Roid
-- 
(i was a teenage Maximortal, #iaf: "quello con l'amica tettona?")
to be a Hillbilly Wolf, you gotta be just like me
"-Ambizioni particolari dalla vita?
-Uscirne vivo."
Don De Lillo. Americana.

Buon download! :)
Grazie mille per la dritta!
Zogo aka Marco Zorigo
-- 
And so we are told this is the golden age
And gold is the reason for the wars we wage

 giorni specifico dallo script.
mah, e' una cheat: vuoi mettere far partire teleport da 
www.google.it
senza limiti di link da seguire e poi sgranare a mano tutto quello che
ha scaricato? ;)
ciao

 mano tutto quello che ha scaricato? ;)
E' un'idea anche quella, certo... quando sei riuscito a metterla in 
pratica la mettiamo su iafol! :)))


 pratica la mettiamo su iafol! :)))
Solo per curiosità: qualcuno ha la minima idea di quanto sia "grosso" l'archivio
di news di google?
-- 
See Ya, Dark.
Qualcuno passa e non sa neanche dove va
E la luna splende e urla, su questa fogna di città.


 che nn riesco proprio a beccare?Grazie dell'aiuto.
--
Ciao a tutti.
Dim
ICQ: 149227123

> (
http://fly.to/demokrito
) sotto "Programmi"
Questo te lo posto qui sotto.
Salva il testo in un file con estensione .pl
---BEGIN HERE---
#!/usr/bin/perl
## SuckGoog.pl
#  Estrazione News da Google
#  Versione 0.5 by DisKre Panza - Free Software GNU GPL.
#  27 Settembre 2002
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
#********************************************************************
*********#
#                                                                             
#
#             Descrizione sommaria del funzionamento dello script             
#
#                                                                             
#
#   Lo script  e` stato concepito  per scaricare interamente i 
messaggi di un #
# NewsGroup  memorizzati  da  Google  "il tal mese del tal anno",  
quindi non #
# richiede parametri particolari di ricerca  (nulla vieta di 
aggiungere anche #
# questa funzionalita`: basta modificare la sezione di richiesta 
parametri).  #
#                                                                             
#
#   Per ora mi sono limitato  a  gestire un singolo mese per volta,  
piu` che #
# altro per problemi di tempi di connessione... :-)                           
#
#                                                                             
#
#   Fedele al 'sano' principio UNIX secondo il quale e` perfettamente 
inutile #
# appesantire un programma implementando funzionalita` proprie di 
altri otti- #
# mi programmi, lo script utilizza il (anzi, "dipende" dal) programma 
'wget', #
# software GNU/GPL liberamente reperibile presso                              
#
#                                                                             
#
#                  
http://www.gnu.org/software/wget/wget.html
 
#
#                                                                             
#
# sia per la piattaforma Linux che per Win32. Per chi non lo 
conoscesse, wget #
# e` un  'download manager'  molto versatile  (ad es. per fare il 
'mirror' di #
# interi Siti Web). Fra le altre cose,  consente di simulare 
perfettamente le #
# richieste di un browser internet.                                           
#
#                                                                             
#
# Lo scaricamento dei messaggi avviene in tre passi:                          
#
#                                                                             
#
# 1) Viene  effettuata  una  interrogazione 'canonica' a  Google, 
esattamente #
#    come se la richiesta fosse effettuata interattivamente da un 
browser (un #
#    ringraziamento particolare  a  MdI  per  una  dritta,  che mi ha 
indotto #
#    finalmente a stampare e *studiare* la documentazione di wget...)         
#
#    La  pagina  risultante contiene  i  link  ai  thread 
corrispondenti alla #
#    ricerca, piu` gli eventuali  link alla pagina successiva (per un 
massimo #
#    di 100 link per pagina,  limite invalicabile di Google).  Se per 
caso il #
#    thread e` composto da un solo messaggio, viene estratto il 
relativo link #
#    e si salta direttamente al punto 3), altrimenti...                       
#
#                                                                             
#
# 2) ...vengono estratti da questa pagina i link ai vari thread,  e  
ne viene #
#    richiesta la visualizzazione in modalita` "no-frame".                    
#
#                                                                             
#
# 3) Vengono finalmente estratti dalla pagina  "no-frame"  i  link ai 
singoli #
#    messaggi,  con l'opzione  "output=gplain".  Ogni messaggio viene 
salvato #
#    con un nome cosi` composto: nome.gruppo/
AAAA.MM/AAAAMMNNNNN
 
#
#                                                                             
#
#    nome.gruppo   Directory del gruppo                                       
#
#    
AAAA.MM/
      SubDirectory Anno.mese                                     
#
#    AAAA          Anno                                                       
#
#    MM            Mese                                                       
#
#    NNNNN         Numero progressivo decrescente. Purtroppo Google 
restitui- #
#                  i thread  a partire dal  piu`  recente.  Questo e` 
il modo #
#                  piu`  semplice che  ho  trovato per mantenere un 
minimo di #
#                  coerenza temporale fra i messaggi. Inoltre, in 
questo modo #
#                  e` possibile spostare in seguito tutti i  messaggi 
recupe- #
#                  rati  in  un'unica directory,  mantenendone  
l'ordinamento #
#                  temporale (quantomeno per thread...).                      
#
#                                                                             
#
#   Una volta terminata la scansione,  si ritorna al punto  1) sino a 
esauri- #
# mento delle pagine che soddisfano la richiesta iniziale.                    
#
#                                                                             
#
#   Questo script e` il mio primo  tentativo di produrre qualcosa di 
concreto #
# con  il linguaggio  perl,  quindi sono  perfettamente  cosciente 
del  fatto #
# che, a  livello di  'tecnica' di  programmazione, vi  saranno 
'bestialita`' #
# incredibili. Conto sulla collaborazione di chiunque abbia voglia e 
volonta` #
# per renderlo migliore.                                                      
#
#                                                                             
#
#   Un'ultima  considerazione: l'algoritmo  usato  presume  una ben  
definita #
# struttura dell'output generato da Google. Se per disgrazia Google 
cambiasse #
# 'look', con ogni probabilita` sarebbe  necessario rivedere 
l'algoritmo - in #
# tutto o in parte, a seconda delle modifiche apportate. Speriamo in 
bene!    #
#                                                                             
#
#********************************************************************
**********
use strict;
## Variabili globali
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
my $parm    = uc($ARGV[0]);   # eventuali parametri di lancio:
                              # --debug   -> disattiva l'utilizzo di 
wget
                              # --test    -> legge sino al primo mex
                              #______________________________________
__________
                              # --resume  -> continua dall'ultimo 
salvataggio
                              #              *** NON implementato ***
                              # Sarebbe un'opzione molto 
interessante.
                              # L'idea sarebbe quella di consentire 
lo stop di
                              # una sessione di prelievo per poi 
riprenderla
                              # in seguito. Non so se e` possibile... 
o meglio,
                              # un'idea ci sarebbe, ma e` piuttosto 
incasinata.
                              #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
my $msgnum  = 99999;          # contatore messaggi salvati (Google 
ordina
                              # i messaggi dall'ultimo al primo)
my $npost   = 0;              # contatore messaggi per thread
my $ntot    = 0;              # contatore messaggi salvati (per 
feedback)
my $savedir = "";             # directory di salvataggio post
## Variabili per la costruzione dell'interrogazione iniziale
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
my $GQ_01 = "
http://groups.google.com/groups
";  # no comment... :)
my $GQ_02 = "?as_q=";                  # che contengono le seguenti 
parole
my $GQ_03 = "&num=100";                # numero massimo messaggi
my $GQ_04 = "&as_scoring=d";           # ordinamento: 'd' per data
my $GQ_05 = "&hl=it";                  # hidden : italia
my $GQ_06 = "&ie=ISO-8859-1";          # hidden : charset
my $GQ_07 = "&btnG=Cerca+con+Google";  # hidden : boh?
my $GQ_08 = "&as_epq=";       # che contengono la seguente frase
my $GQ_09 = "&as_oq=";        # che contengono una qualunque delle 
seguenti parole
my $GQ_10 = "&as_eq=";        # che non contengono le seguenti parole
my $GQ_11 = "&as_ugroup=";    # solo i messaggi del NewsGroup 
specificato
my $gruppo = "news.test";
my $GQ_12 = "&as_usubject=";  # solo i messaggi il cui soggetto 
contiene
my $GQ_13 = "&as_uauthors=";  # solo i messaggi pubblicati 
dall'autore
my $GQ_14 = "&as_umsgid=";    # trova il messaggio con l'ID
my $GQ_15 = "&lr=";           # selezione lingua messaggi: "" tutte
my $GQ_16 = "&as_qdr=";       # periodo: "" tutto l'archivio
my $GQ_17 = "&as_drrb=b";     # periodo: 'b' seleziona intervallo 
date
my $GQ_18 = "&as_miny=";      # selezione data: dall'Anno
my $miny = "0000";
my $GQ_19 = "&as_minm=";      # selezione data: dal Mese
my $minm = "00";
my $GQ_20 = "&as_mind=";      # selezione data: dal Giorno
my $mind = "";
my $GQ_21 = "&as_maxy=";      # selezione data: all'Anno
my $maxy = "";
my $GQ_22 = "&as_maxm=";      # selezione data: al Mese
my $maxm = "";
my $GQ_23 = "&as_maxd=";      # selezione data: al Giorno
my $maxd = "";
my $GetAnno = 0;
my $GetMese = 0;
## Richiesta parametri iniziali
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
## lanciando il programma con l'opzione --debug si 'simula'
#  quel che dovrebbe accadere, senza lanciare wget
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if( $parm ne "--DEBUG" ) {
   if( $parm ne "--RESUME" ) {                  # previsto ma non 
utilizzato
      ## Richiesta NewsGroup di ricerca
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      print STDERR "NewsGroup di ricerca : ";
        $gruppo = <STDIN>; chop( $gruppo );
      ## Richiesta limiti di ricerca
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      print STDERR "Anno .............. : ";
        $GetAnno = <STDIN>; chop( $GetAnno );
      print STDERR "Mese .............. : ";
        $GetMese = <STDIN>; chop( $GetMese );
      ## Dati per interrogazione
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      $miny = $GetAnno;
      $minm = $GetMese;
      $maxy = $GetAnno;
      $maxm = $GetMese;
   }
}
## Verifica che esista la directory relativa al gruppo
#  Se non esiste, la crea
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
if( chdir( $gruppo ) ) {
   chdir( ".." );
}
else {
   mkdir( $gruppo, 0777 );
}
chdir( $gruppo );
## Verifica che esista la directory relativa all'anno e al mese
#  Se non esiste, la crea
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
my $tmpdir = sprintf "%04d", $GetAnno;
$savedir = sprintf "%04d.%02d", $miny, $minm ;
if( chdir( $savedir ) ) {
   chdir( ".." );
}
else {
   mkdir( $savedir, 0777 );
}
## Ritorno alla directory base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
chdir( ".." );
## Ciclo Principale
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
my $query    = "";               # stringa d'interrogazione
my $nomefile = "01step.html";    # nome pagina risultante
#********************************************************************
*********#
#                                                                             
#
#   Google restituisce  i  thread ordinati dal  piu` recente al meno 
recente, #
# quindi e` necessario partire dalla fine per arrivare all'inizio  
(questo e` #
# il senso della variabile $msgnum).                                          
#
#                                                                             
#
#   Lo spezzare il mese in due  'tornate'  e` dovuto al fatto che  
(per espe- #
# rienza diretta) se i post sono troppi, Google non onora l'intera 
interroga- #
# zione (deve avere un limite che pero` non ho ancora avuto modo di 
quantifi- #
# care).  Cio` significa che, nel caso di NewsGroup particolarmente 
'attivi', #
# nemmeno scaricare meta` mese per volta sara` sufficiente... Stiamo 
a vedere #
# come butta... Si attendono ovviamente contributi in merito... :)            
#
#                                                                             
#
#   Nota a margine: fortunatamente  Google non effettua controlli 
sulla vali- #
# dita` del fine mese, quindi accetta anche il 31 febbraio... :)              
#
#                                                                             
#
#********************************************************************
*********#
# Costruzione stringa di ricerca seconda meta` del mese
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$mind = 16;
$maxd = 31;
$query = $GQ_01.$GQ_02.$GQ_03.$GQ_04.$GQ_05.
         $GQ_06.$GQ_07.$GQ_08.$GQ_09.$GQ_10.
         $GQ_11.$gruppo.
         $GQ_12.$GQ_13.$GQ_14.$GQ_15.$GQ_16.$GQ_17.
         $GQ_18.$GetAnno.$GQ_19.$GetMese.$GQ_20.$mind.
         $GQ_21.$GetAnno.$GQ_22.$GetMese.$GQ_23.$maxd;
# Ciclo lettura seconda meta`
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
while( $query ne "" ) {
   if( $parm ne "--DEBUG" ) {
      Dowget( $query, $nomefile );
   }
   $query = LeggiLista( $nomefile );
} # end while
# Costruzione stringa di ricerca prima meta` del mese
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$mind = 1;
$maxd = 15;
$query = $GQ_01.$GQ_02.$GQ_03.$GQ_04.$GQ_05.
         $GQ_06.$GQ_07.$GQ_08.$GQ_09.$GQ_10.
         $GQ_11.$gruppo.
         $GQ_12.$GQ_13.$GQ_14.$GQ_15.$GQ_16.$GQ_17.
         $GQ_18.$GetAnno.$GQ_19.$GetMese.$GQ_20.$mind.
         $GQ_21.$GetAnno.$GQ_22.$GetMese.$GQ_23.$maxd;
# Ciclo lettura prima meta`
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
while( $query ne "" ) {
   if( $parm ne "--DEBUG" ) {
      Dowget( $query, $nomefile );
   }
   $query = LeggiLista( $nomefile );
} # end while
exit( 0 );
#____________________________________________________________________
__________
# Subroutines
#   Nelle prime tre e` presente un'identica serie di operazioni per 
estrarre i
# link 'ripulendoli' da cose inutili. Questa ridondanza non mi piace 
molto, ma
# non sono riuscito a trovare un'alternativa 'semplice'... 
suggerimenti?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
#____________________________________________________________________
__________
# Legge l'elenco dei thread e li segue
# riceve  : $file (file da analizzare)
# ritorna : l'eventuale pagina successiva da leggere
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
sub LeggiLista {
   my $file    = shift;             #nome del file da leggere
   my $pagina  = GetPage( $file );  # legge la pagina
   my $fuffa   = "";                # parte che precede il link
   my $link    = "";                # il link
   my $resto   = "";                # parte che segue il link
   my $descr   = "";                # descrizione del link
   my $first   = 1;                 # flag per intercettare la 
prossima pagina
   my $next    = "";                # prossima pagina da scaricare
   while( 1 ) {
      ($fuffa,$link,$resto) = ($pagina =~ /^(.*?)(<a 
href.*?<\/a>{1})(.*)$/ism);
      if( $link eq "" ) {                    # ricerca finita
         last;
      }
      if( $link !~ /(img src)/i ) {          # salta i link alle 
immagini
         $link =~ s/(<b>)|(<\/b>)//g;        # elimina cose inutili
         ($descr) = ($link =~ /(>.*?<)/);    # estrae la descrizione 
del link
         $descr =~ s/[><]//g;                # toglie delimitatori 
tag
         $descr =~ s/(&.*?;)//g;             # e codici vari
         ($link) = ($link =~ /^(<.*?>)/i);   # toglie la descrizione 
dal link
         if( $link =~ /threadm/i ) {         # filtra le pagine con 
thread
            $link =~ s/<a href=\//http:\/\/
groups.google.com
\//ig;
            $link =~ s/>//g;
            print STDERR "\n\nScarico il thread \"",   # feedback
                  $descr, "\" :\n";
            my $filename = "02step.html";
            if( $parm ne "--DEBUG" ) {
               Dowget( $link, $filename );      # lettura pagina con 
thread
            }
            LeggiSingoloThread( $filename );    # scansione thread
         }
         elsif( $link =~ /selm/i ) {            # filtra i singoli 
mex
            print STDERR "\n\nScarico il messaggio \"",  # feedback
                  $descr, "\" - ";
            GetMessage( $link );                # salva singolo mex
         }
         elsif( $descr =~ /Next.*?thread/i ) {  # filtro per pagina 
successiva
            if( $first == 2 ) {                 # solo se e` il 
secondo link
               $link =~ s/<a href=\//http:\/\/
groups.google.com
\//ig;
               $link =~ s/>//g;
               $next = $link;
            }
            $first++;                           # incrementa 
contatore
         }
      }
      $pagina = $resto;
   }  # termine ciclo while
   return( $next );           # restituisce la prossima pagina
}
#____________________________________________________________________
__________
# Legge la pagina iniziale del thread, chiama il no-frame per 
estrarre
# tutti i post
# riceve  : $file (prima pagina da leggere)
# ritorna : nulla
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
sub LeggiSingoloThread {
   my $file    = shift;             #nome del file da leggere
   my $pagina = GetPage( $file );   # legge la pagina
   my $fuffa   = "";                # parte che precede il link
   my $link    = "";                # il link
   my $resto   = "";                # parte che segue il link
   my $descr   = "";                # descrizione del link
   while( 1 ) {
      ($fuffa,$link,$resto) = ($pagina =~ /^(.*?)(<a 
href.*?<\/a>{1})(.*)$/ism);
      if( $link eq "" ) {                    # ricerca finita
         last;
      }
      if( $link !~ /(img src)/i ) {          # salta i link alle 
immagini
         $link =~ s/(<b>)|(<\/b>)//g;        # elimina cose inutili
         ($descr) = ($link =~ /(>.*?<)/);    # estrae la descrizione 
del link
         $descr =~ s/[><]//g;                # toglie delimitatori 
tag
         $descr =~ s/(&.*?;)//g;             # e codici vari
         ($link) = ($link =~ /^(<.*?>)/i);   # toglie la descrizione 
dal link
         if( $descr =~ /pagina senza frame/i ) {   # filtro pagina 
no-frame
            $link =~ s/<a href=\//http:\/\/
groups.google.com
\//ig;
            $link =~ s/>//g;
            $npost = 0;                            # azzera conteggio 
mex
            while( $link ne "" ) {
               my $filename = "03step.html";
               if( $parm ne "--DEBUG" ) {
                  Dowget( $link, $filename );      # lettura elenco 
mex
               }
               $link = EstraiPost( $filename );    # estrazione mex
            }
            return ( 0 );
         }
      }
      $pagina = $resto;
   }  # termine ciclo while
   return( 0 );
}
#____________________________________________________________________
__________
# Legge la pagina con i post di un thread e li estrae
# riceve  : $file (pagina da leggere)
# ritorna : l'eventuale prossima pagina da leggere
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
sub EstraiPost {
   my $file    = shift;             #nome del file da leggere
   my $pagina = GetPage( $file );   # legge la pagina
   my $fuffa   = "";                # parte che precede il link
   my $link    = "";                # il link
   my $resto   = "";                # parte che segue il link
   my $descr   = "";                # descrizione del link
   my $first   = 1;                 # flag per intercettare la 
prossima pagina
   my $next    = "";                # prossima pagina da scaricare
   while( 1 ) {
      ($fuffa,$link,$resto) = ($pagina =~ /^(.*?)(<a 
href.*?<\/a>{1})(.*)$/ism);
      if( $link eq "" ) {                    # ricerca finita
         last;
      }
      if( $link !~ /(img src)/i ) {          # salta i link alle 
immagini
         $link =~ s/(<b>)|(<\/b>)//g;        # elimina cose inutili
         ($descr) = ($link =~ /(>.*?<)/);    # estrae la descrizione 
del link
         $descr =~ s/[><]//g;                # toglie delimitatori 
tag
         $descr =~ s/(&.*?;)//g;             # e codici vari
         ($link) = ($link =~ /^(<.*?>)/i);   # toglie la descrizione 
dal link
         if( $link =~ /selm/i ) {            # filtra i singoli mex
            if( $descr =~ /View this article only/i ) {
               print STDERR "messaggio ", ++$npost, " - ";   # 
feedback
               GetMessage( $link );                   # salva singolo 
mex
            }
         }
         elsif( $descr =~ /Successivi/i ) {  # filtro per pagina 
successiva
            if( $first == 2 ) {              # solo se e` il secondo 
link
               $link =~ s/"//ig;             # toglie le 
virgolette...
                                             # (ma tu guarda se 
dovevano
                                             # complicarmi la vita 
cosi`...)
               $link =~ s/<a href=\//http:\/\/
groups.google.com
\//ig;
               $link =~ s/>//g;
               $next = $link;
            }
            $first++;                        # incrementa contatore
         }
      }
      $pagina = $resto;
   }  # termine ciclo while
   return( $next );           # restituisce la prossima pagina
}
#____________________________________________________________________
__________
# Legge un singolo messaggio
# riceve  : il link al messaggio da leggere
# ritorna : nulla
#
# "Original Format" di Google:
# <a href=/groups?selm=ID-messaggio%40dominio.dom&output=gplain>
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
sub GetMessage {
   my $link       = shift;    # link al mex originale
   my $mex        = "";       # direttiva per leggere il messaggio in
                              # formato originale
   my $messagenum = "";       # nome file del messaggio
   if( $link =~ / target=_top/i ) {
      $link =~ s/ target=_top//ig;
   }
   ($mex) = ($link =~ /(selm=.*?>)/i );
   $mex =~ s/>//ig;
   $mex =   "http:\/\/
groups.google.com
\/groups?". # costruzione 
interrogazione
            $mex.                                  # per lettura mex 
nel
            "&output=gplain";                      # formato 
originale
   $messagenum = sprintf "%s/%s/%04d%02d%05ld",    # creazione nome 
file mex
                          $gruppo, $savedir, $miny, $minm, $msgnum--;
   print STDERR ++$ntot, "\r";    # feedback progressivo messaggi 
salvati
 
   if( $parm ne "--DEBUG" ) {
      Dowget( $mex, $messagenum );                    # legge 
messaggio
   }
   if( $parm eq "--TEST" ) {
      print STDERR "\n*** GetMessage: TEST Stop\n\n"; # stop per 
debug-test
      exit( 0 );
   }
}
#____________________________________________________________________
__________
# Legge una intera pagina html e la memorizza nella variabile $pagina
# riceve  : $file (pagina html da leggere
# ritorna : $page (la pagina letta)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
sub GetPage {
   my $file = shift;
   my $page = "";
   open( IN, "< $file" )
      || die "\n*** GetPage: File $file inesistente.\n\n";
      $page = do { local $/; <IN> };
   close( IN );
   return( $page );
}
#____________________________________________________________________
__________
# Lancia wget per leggere una pagina
# riceve  : $url (URL da leggere)
#           $outfile (nome file dove salvare il risultato)
# ritorna : nulla
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~
sub Dowget {
   my $url     = shift;
   my $outfile = shift;
   my $infile  = "wget_tmp";
   # salva l'URL in un file temporaneo per poi leggerla
   # (non e` il massimo, ma per ora funziona cosi`...)
   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
   open( OUT, "> $infile" ) || die "\n*** Errore aprendo 
$infile.\n\n";
      print OUT $url."\n";
   close( OUT );
   # test controllo coerenza url (si sa mai che scappi qualcosa...)
   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if( $url !~ /^http:\/\//i ) {
      print STDERR "\n*** URL scorretta! ***\n\n", $url, "\n\n";
      exit( 0 );
   }
   # preparazione parametri per wget
   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   my @args = ( "wget ".                           # nome programma
                "-q ".                             # quiet mode
#               "-nv ".                            # non-verbose mode
                                                   # (utile per test)
                "--user-agent=\"Mozilla/4.0\" ".   # inganna 
Google...
                "-i $infile ".                     # input file
                "-O $outfile"                      # output file
              );
   # lancio wget
   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   system(@args) == 0 or die "system @args failed: $?";
}
---END & CUT HERE---


 wrote:
Grazie mille^_^, per il download da 10mb, mi da link morto, nn
potresti dirmi il nome del file da scaricare, cosi me lo cerco e nn
stresso piu^_^?
Grazie mille di nuovo.


 Grazie mille^_^, per il download da 10mb, mi da link morto,
Il link č corretto:
http://www.activestate.com/Products/Download/Download.plex?id=ActiveP
erl
Devi ovviamente ricopiarlo su un'unica riga.
Se non va, puň essere giů il loro server.
Riprova, ma il link (23/5/2003 ore 10.30) funge.


Riprova, ma il link (23/5/2003 ore 10.30) funge.
azz...c'hai ragione pure tu^_^ mica l'avevo vista la fine del link^_^
gia che stai seguendo sto 3d, č possibile pre formattone esportare i
messaggi del ng(una cosa come


messaggi del ng(una cosa come
acc...mi è partito il mex a tradimento, dicevo, c'è un modo per
esportare da agent 55000mex di IAf magari mantenendo letti nn letti?ho
cercato ma ho capito solo come esportarli su txt...


 letti?ho cercato ma ho capito solo come esportarli su txt...
Mi dispiace, ma su Agent non sono ferrato, Prova su 
it.comp.newsreaders


 Ciao a tutti.
Da un'istanza di Agent all'altra, dici?
Si puo' fare, forse basta del tutto copiare la cartella Data.
Ma comunque c'e' un modo di conservare anche settaggi e stato del database.
Fai una ricerca con google groups su it.comp.software.newsreader, dovrebeb
esserci un thread in merito risalente a non piu' di due mesi fa.
-- 
Buon cammino!
il_pellegrino@work
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Si puo' fare, forse basta del tutto copiare la cartella Data.
Confermo.
-- 
"Professor Logan, lei cosa insegna?" "Arte".
e-mail: 
shintet...@yahoo.it
  (rimuovere GOD)    
Ritratti, illustrazioni fantasy/Sci-Fi..contattami!
    --> 
http://www.sektoralpha.it
 <--

Ma comunque c'e' un modo di conservare anche settaggi e stato del database.
Basta zippare tutta la cartella Agent e poi decompremirla su
una altro computer senza nemmeno fare l'installazione. Piu'
semplice di cosi' ^^
-- 
Kyo
'Cos we will never listen to your rules
We will never do what others do
Know what we want and we get it from you
We do what we like and we like what we do

una altro computer senza nemmeno fare l'installazione. Piu'
 ^^^
un altro =_________________=;


Ma comunque c'e' un modo di conservare anche settaggi e stato del database.
Che e' copiare il file relativo che e' presente nella suddetta
cartella ^^^
(per ogni NG ci sono due file: uno che contiene i messaggi e l'altro
che contiene le impostazioni)
Inoltre, i nomi dei file sono il numero di serie del ng: sapendo
quanti ng scarichi, con un po' di ragionamento puoi arrivare a capire
quale sia il file di un singolo NG (ma in realta' non e' necessario
sbattersi, basta copiare tutto e poi cancellare i ng non desiderati da
dentro agent)
Parvati V
-- 
http://digilander.libero.it/parvatiquinta/
IHGGera #1069, IAFa #182 ^^^

 wrote:
Grazie a tutti, ho postato prima di cercare , e nel frattempo avevo
trovato il 3d suggerito, grazie dell'aiuto^_^
