Newsgroup: it.comp.software.newsreader
Titolo: [SuckGoogle]: Una lunga storia, e abbiate pazienza...

  Beh, ragazzi: lunga storia, lungo post... ;)
  Pensate  che ho  scritto SuckGoogle  in Perl  imparando il  Perl per
poter scrivere SuckGoogle... cose da pazzi... ;;;)
  E poi e` passato talmente tanto di quel tempo che faccio fatica pure
io a capire  come diavolo funziona... per fortuna che  ho sempre avuto
la sana abitudine di mettere un bel po' di commenti... ;)))
  Evabbe`, questa  e` la storia del  perche' a un certo  punto mi sono
incasinato...
                                * * *
  Il meccanismo  di interrogazione e  di output  dei dati da  parte di
Google e`  molto complesso, e  secondo me pure molto  sbagliato. Pero`
quello e`, (e mi  pare lo sia piu` o meno ancora) e  quindi ci si deve
arrangiare...
  A  parte il  problema "delle  tre pagine  in cascata"  da elaborare,
prima di poter arrivare al formato "raw", che e` quello che interessa,
e  vi risparmio  le incazzature  (che in  parte sono  pure documentate
nello script)...
  Il primo  problema che  ho dovuto affrontare  e` stato  quello dello
"step" di  interrogazione: esistono NewsGroup che  hanno un "traffico"
molto basso (diciamo  sui cento mex al mese), mentre  altri hanno piu`
di cento mex "al giorno"!...
  Ora,  non sono  riuscito  a capire  (in realta`  non  ci ho  nemmeno
provato) in base a quale criterio Google sputi fuori i suoi dati: deve
avere un "limite", oltre al quale  non va. Diciamo che grossomodo puoi
avere  circa cinquecento  mex  al massimo  per singola  interrogazione
(sono dati  calcolati "spannometricamente", non  sono mai stato  li` a
verificare di persona).
  Quindi la prima cosa da fare e` dirgli "dammi tutti i post da questa
data  a quest'altra".  Perche' se  gli dico  "dammi tutti  i post  del
2004", al massimo me ne da` un "tot", mica tutti.
  Ma qual e` quel "tot"? Eh... dipende...
  Quindi come  prima cosa dovevo  poter interrogare Google  anche solo
"giorno per giorno": metti che su  di un NewsGroup po`stino 500 mex in
un colpo solo! Difficile, ma possibile...
  Ecco dunque  il significato dello  "step"... Al limite, puoi  dire a
Google "dammi tutti i post del primo Gennajo 2004", e poi "dammi tutti
i post del 2 Gennajo 2004", e cosi` via...
  Messo cosi`, il problema sembra risolto... e invece NO! (cazzo...)
                                * * *
  Lo  scopo  "finale" di  SuckGoogle  doveva  essere quello  di  poter
recuperare "tutti" i mex disponibili  di un determinato NewsGroup, "da
data a  data", ma possibilmente  "tutti". Solo  che - appunto  - hanno
messo in piedi un meccanismo talmente assurdo che...
  Faccio un esempio:
  Provate a  cercare con Google tutti  i post con il  Subject "Aiuto!"
in  un qualsiasi  NewsGroup,  dando come  date  di ricerca  01/01/2004
31/12/2004... la stronzata sostanziale di  Google e` che se "per caso"
qualcuno ha scritto un post con il Subject "Aiuto!" mettiamo nel 1999,
e qualcuno lo ha  fatto nel 2004, Google te li fa  vedere tutti e due!
Questo  perche' la  ricerca parte  "di default"  dall'ultimo post  con
"quel" Subject e poi torna indietro, e non effettua una indicizzazione
corretta  "per  thread", ma  ne  effettua  una che  potremmo  definire
appunto "per  Subject"! E -  soprattutto -  non controlla la  data dei
post. Cioe` per  lui il limite della data vale  per "l'ultimo post con
quella data", poi ti sputa tutto l'eventuale thread all'indietro...
  Non  sono mai  riuscito a  capire quale  mente contorta  possa avere
concepito un meccanismo del genere, pero`  di fatto questo e` quel che
succede.
  Insomma: uno puo` chiedere tutti i  post con il Subject "Aiuto!" dal
01/01/2004 al 31/12/2004, e trovarsi una cosa del tipo:
  Aiuto! 01/01/1995
  |
   -Aiuto! 02/02/1997
    |
     -Aiuto! 03/03/2001
      |
       -Aiuto! 04/04/2004
  Tenete presente che tutti questi  post sono "scollegati" fra di loro
a livello  di "thread", ma  Google li  propone come se  fossero invece
parte di un "unico" thread...
  E questo ti frega... Non chiedetemi perche' Google faccia cosi`, non
lo so, e` assurdo, ma fa cosi`...  Oddio, magari da un "certo punto di
vista" non  e` poi  cosi` "assurdo":  in fondo in  fine Google  e` uno
"strumento di ricerca",  e quindi, sui messaggi di  un NewsGroup, deve
avere  effettuato  una  indicizzazione  per "Subject"...  Non  e`  una
cattiva idea,  solo che "te lo  mette in quel posto"  quando cerchi di
fare quel che ho cercato di fare io... :(((
  Quindi,  il  problema piu`  grosso  e`  la "duplicazione"  dei  dati
ricavati. Perche`  se si fa  riferimento all'esempio appena fatto  - e
supponendo per assurdo  che esistano "solamente" quei  quattro post in
tutto il NewsGroup  - chiedendo "dammi tutti i post  del 1995" avremmo
solamente il  primo, poi dopo  magari chiederemmo "dammi tutti  i post
del 1997", e ce ne ritroveremmo due, poi "tutti quelli del 2001", e ce
ne  ritroveremmo tre,  e cosi`  via... e  la cosa  e` peggiore  quando
lavori anche solo su di un anno, ma vai appunto "a step" di giorni. Se
un thread dura un mese, e lo step e` anche solo di una settimana, alla
fine ti ritrovi con un numero di duplicati enorme... (sic!)
                                * * *
  E  dunque. Ho  cercato di  fare in  modo di  eliminare tutti  questi
"duplicati". Ma per fare cio` ho  dovuto creare un file temporaneo nel
quale memorizzare i  dati essenziali di ogni post, in  modo da poterne
eliminare tutti i suoi eventuali duplicati.
  Tutto sommato  non era una  cosa molto difficile,  soprattutto sotto
Linux...
  La "fregatura"  e` nata  quando ho  cercato di fare  in modo  che il
programma fosse "portabile", almeno anche  sotto Windows. E` stato li`
che mi sono "imballato"...
  Sotto Linux (Unix) esiste la funzione "uniq", sotto Windows (MS-DOS)
no. Me  la sono dovuta creare.  E via cosi`...  e a un certo  punto mi
sono perso per strada...
  L'altro "grosso problema" era quello  di rendere il risultato finale
"compatibile"  con  la maggior  parte  dei  NewsReader utilizzati:  io
utilizzo slrn,  e quindi salvare ogni  post in un singolo  file poteva
andare bene; ma con Outlook, o Agent, o altri ancora?
  La  mia personalissima  "soluzione  finale" -  dopo averne  discusso
proprio su  it.comp.mailreader e it.comp.newsreader -  e` stata quella
di creare  un unico  file con  tutti i  post. Praticamente,  invece di
creare una "NewsBox" per  ogni NewsReader esistente (cosa impossibile,
almeno per  me), ho deciso  di creare una  "MailBox", che piu`  o meno
tutti i "MailReader" riescono a leggere.
  Semplificando:  tiri  giu`  da  Google  una  annata  intiera  di  un
NewsGroup, e poi te la leggi  come se fosse una "Mailing-List". Non so
se mi sono capito...
  Solo che...
  Solo  che   l'ultima  versione  non  l'ho   mai  pubblicata  perche'
funzionava  sotto win2000  ma non  sotto win98:  c'erano dei  problemi
che  non sono  riuscito  a  capire... poi  ho  avuto "altri"  problemi
(privati...), e ho mollato il tutto.
  Cmq, ho tutto lo "storico" delle varie versioni (e ci mancherebbe!),
quindi posso spedire anche tutto il "pacco"... ;)
  Insomma, avevo cercato di  "implementare" tutti i "suggerimenti" che
mi erano stati fatti, ma poi tutto e` restato "a meta`"...
  Tanto per  dirne una, ora  SuckGoogle era diventato un  programma "a
linea  di comando"  diciamo "standard",  che lanciato  senza parametri
produceva questa cosa:
Opzioni:
   -h --help    : Visualizza questo help
   -r --rebuild : Ricostruisce il file NewsBox.txt
   -m --resume  : Riprende lo scaricamento dall'ultima interruzione
   (n.b.) Le opzioni escludono la lettura dei parametri.
Parametri:
   -g --group   : Gruppo News da estrarre
   -i --init    : Data inizio estrazione messaggi (gg/mm/aaaa)
   -e --end     : Data fine estrazione messaggi (gg/mm/aaaa)
   -s --step    : Step di scansione messaggi
                                * * *
  Insomma, sono andato parecchio avanti, solo che ora avrei bisogno di
qualche `beta-tester' possibilmente esperto di perl, perche' so che ci
sono ancora molte  cose da sistemare. Diciamo che  "la base", _forse_,
ancora c'e`, pero`...
  Oltretutto,  se e`  cambiata  la struttura  di Google,  bisognerebbe
rivedere i vari algoritmi di "estrazione"...
                                * * *
  Mah... Chiedo a chi mi ha contattato in privato di pazientare fino a
sabato:  poi, con  calma,  posso  inviare un  pacchetto  con tutte  le
versioni, e qualche nota di  spiegazione. Scusate, ma credevo di avere
un attimo di pausa, e invece mi sono ritrovato di nuovo incasinato...
  (Nota a  margine: avevo cambiato  pure il formato  di memorizzazione
del nome dei  singoli messaggi, per non doverli  memorizzare per forza
anno per  anno in  una singola  directory, per  poi accorgermi  che la
funzione `rebuild' di slrn s'incazza  perche' e` troppo lungo... credo
sia stato quello il momento nel quale mi sono cascate le braccia...)
-- 
Cio` che ho scritto, ho scritto.

Io non ho provato il tuo programma, comunque complimenti per la tua 
iniziativa!