solo per abbonati
Update 2010/07/27: nuova versione aggiornata per il sito http://www.ilfattoquotidiano.it
Dato che l'ho già passato a vari amici, lo posto anche qua nella
speranza che sia utile ad altri.
Cosa? Uno script per scaricare in automatico Il Fatto Quotidiano, per
abbonati.
Specifico per abbonati in quanto personalmente mi sono abbonato all'edizione PDF quasi interamente per sostenere la loro iniziativa di stampa indipendente (almeno dagli editori, anche se non dagli inserzionisti pubblicitari ...): non sono necessariamente vicino alle loro posizioni politiche, ma ogni giornale in più è un bene per la stampa italiana. In quest'ottica, non sono quindi interessato a scaricare le varie versioni PDF "pirata" che si trovano in rete (e che quindi non starò qui a linkare).
download
Gli script sono i seguenti:
-
ilfatto: main entry point, lo invoco ogni giorno per scaricare il giornale in una dir predefinita e far partire in automatico un PDF reader su di esso (se già scaricato, evita di ri-scaricare il PDF)
-
ilfatto-download: backend usato dallo script di cui sopra per autenticarsi presso il portale abbonati, sciegliere la data odierna, e scaricare il PDF. Richiede la libreria Python mechanize
Aprite ilfatto-download
e cambiate i valori
USERNAME e PASSWORD in ciò che vi si addice (per i non addetti ai
Python-lavori: racchiudeteli tra virgolette doppie "" come
nell'esempio). Poi, quando volete farvi una lettura, eseguite
ilfatto
.
Fantastico, grazie!
Funziona anche su OSX, con le seguenti modifiche: installare python e py-mechanize da macports, sostituire /usr/bin/python con /opt/local/bin/python, e sostituire xdg-open con open. Voilà. Tra l'altro in OSX lo scaricamento da Web è ancora più seccante perché Safari (...) non ricorda username e password nella form di scaricamento (e la checkbox "ricordami" non ha il benché minimo effetto...).
Ciao, premesso che non ne capisco di python (mi limito a misere basi di java) quando provo a fare il download del .pdf da ilfatto-download riesce a salvarmi il file, ma quando provo ad aprirlo esce come corrotto. L'altro file fatto mancano delle "" vicino alla data ma anche aggiungendole non compila.
Grazie
Ciao
strano, in diversi lo usiamo tutti i giorni senza problemi ...
su che sistema operativo sei? hai installato il modulo mechanize di python (che è indispensabile)? infine, l'esecuzione de "ilfatto-download" non ha segnalato alcun problema?
se non lo ha fatto, può essere che effettivamente tu abbia scaricata un PDF danneggiato (a volte capita che temporaneamente abbiano dei PDF scazzati, che poi correggono più avanti nella giornata) ...
Intanto Grazie per la rapida risposta
uso windows 7, ho
installato python 2.6.3 e easy_install poi tramite quello ho
installato mechanize 0.1.11 Quando eseguo ilfatto-download non dà
errori e mi salva il file. Purtoppo ho provato diverse volte, anche
ora, e mi salva sempre il file corrotto. Forse ho sbagliato
qualcosa nella procedura, attendo info 
Ciao
ah, interessante, non immaginavo che avrei avuto utenti windows
Quindi ok, tu non usi "ilfatto", ma direttamente "ilfatto-download", come è giusto che sia. Riguardando lo script, non ci vedo niente che possa causare un non funzionamento su windows ... e chiaramente assumo tu abbia eseguito le istruzioni sul riempimento di nome utente / password. Altra cosa, sei certo che lo script non sollevi eccezioni Python quando lo esegui? Sui sistemi unix in generale vengono stampate sulla console, su windows non so dato che non ci ho mai usato Python.
Detto ciò, direi che l'unica altra possibilità per aiutarti che ho è che tu mi invii uno dei PDF "corrotti" che ti scarica affinché io ci dia un'occhiata, puoi farlo via mail per favore? (la mia mail è sulla prima pagina della mia homepage).
Purtroppo, dopo avere debuggato un po' la cosa con artax09, siamo ancora ad un punto morto.
Sotto windows mechanize salva su disco un PDF più lungo del normale (circa 100 Kb), che ha header e trailer corretto, ma qualche differenza non ancora meglio identificata altrove (è un file binario, il diff è meno banale del solito).
Se qualche esperto di windows/python/mechanize passa di qua ... accettiamo volentieri aiuto da mani più windows-esperte delle mie.
Potrebbe aiutare anche qualche testing su altri windows, dato che artax09 ha testato solo su windows 7.
Attendiamo fiduciosi ...
Ciao, l'ho appena testato (ilfatto-download) su OSX 10.6 e funziona alla grande. Ho usato il python preinstallato, ho installato i moduli mechanize (0.1.11) e ClientForm (0.2.10) et voilà!
Grazie!
Ciao, volendo provare un metodo alternativo per utenti win mi sto avventurando in una script per fare login via CURL con metodo post, qualcosa tipo:
set CURL_URL=http://www.antefatto.it/servizi/login/login.aspx?redirect=/servizi/pdf/pdfselect.aspx set CURL_POST=-d "Login1$UserName=%USERID%&Login1$Password=%PASSWORD%&EVENTTARGET=&EVENTARGUMENT=&VIEWSTATE=%VIEWSTATE%&EVENTVALIDATION=%EVENTVALIDATION%" curl.exe %CURL_POST% %CURL_URL%
Purtroppo prendo sempre errori tipo [ViewStateException: Invalid viewstate. Client IP: xx.xx.xx.xx Port: 2316 User-Agent: curl/7.12.0 (i386-pc-win32) libcurl/7.12.0 zlib/1.2.1 ViewState: '/wEPDwUKMTY1MjA5MzAyOWWEYQUeX19Db250cm9sasJlcXVpcmVQb3N0QmFja0tleV9fFgIFEUxvZ2luMSRSZW1lbWJlck234ssMb2dpbjEkTG9naW5JbWFnZUJ1dHRvbjfjyH746ajNdVv6tHEQVjYewAqH'
Qualcuno sa dirmi se ho qualche speranza di riuscire o se è una strada che non mi porterà a nulla?
Purtroppo il mio post precedente ha perso tutta la formattazione, non credo sia interpretabile.
Se qualcuno ha qualche cosa di funzionante che utilizzi CURL o WGET e vuole condividere, gliene sarei grato.
Ciao, rispondo al post su libcurl: Per fare una cosa simile e piuttosto semplice con wireshark devi catturare i pacchetto che fa la redirezione e poi ricreare la richiesta http con curl.
Se ti servono altre info contattami via il sito http://capuzzo.free.fr
CiaoCiao -Claudio
Con un po' di ritardo, ho aggiornato lo script per il nuovo sito http://www.ilfattoquotidiano.it.
È sufficiente che ri-scarichiate i file precedenti, i nomi non sono cambiati.
Enjoy!
wget -O /dev/null --keep-session-cookies --save-cookies=cookies.txt --post-data='log=carnev75%40libero.it&pwd=mastice75&_wp_original_http_referer=http%3A%2F%2Fwww.ilfattoquotidiano.it%2Fabbonati%2F&wp-submit=Log+In&redirect_to=http%3A%2F%2Fwww.ilfattoquotidiano.it%2Fabbonati%2F&testcookie=1' http://www.ilfattoquotidiano.it/login/?action=login&instance=tml-page
sleep 3
wget --load-cookies=cookies.txt -A pdf http://www.ilfattoquotidiano.it/openpdf/?n=$1 -O $2
$1 e $2 sono rispettivamente il today e il nome del file senza il path. Ho modificato lo script per fare in modo che gli arrivino questi due parametri. se vi interessa fatemi sapere che vi mando la persione completa.
ciao e grazie per lo script
ovviamente bisogna cambiare username e password.
p.s non provate con quelli che ho postato, non funzionano
Ciao, ho trovato il tuo script e lo uso con soddisfazione. Ti sarebbe difficile implementare una funzione che permetta di scaricare gli articoli in formato html dalla pagina es: http://www.ilfattoquotidiano.it/giornale-cartaceo/?g=23-09-2010 (mi sembra che siano disponibili solo gli articoli fino al giorno precedente)? Basterebbe scaricarli in una cartella con il nome della data. In questo modo sarebbe facile farne una versione epub per portarla in giro su lettori eink. Grazie comunque Luciano
[ re-post da una risposta via mail a Luciano Fattore, pochi giorni dopo il suo commento ]
Non so se mi sarebbe facile o difficile, francamente non ho avuto tempo di guardarci, ed è per questo motivo che non ho risposto al tuo commento. Non so nemmeno quando avrò tempo di guardarci in quanto il mio modo di leggere Il Fatto Quotidiano è via PDF, non via formato HTML. Fortunatamente però, lo script che ho realizzato è Software Libero http://www.gnu.org/philosophy/free-sw.it.html , il che significa che chiunque è libero di migliorarlo e di redistribuire alla comunità le sue migliorie.
Ti consiglio quindi o di provare a modificare tu stesso lo script affinché faccia ciò che ti serve, oppure di trovare altri che condividono il tuo interesse e che possano e vogliano farlo. Sarò ben lieto di integrare le vostre modifiche e di annunciare sulla mia pagina le nuove mirabolanti feature che voi avrete contribuito.
Grazie mille, spero a presto.
Ciao mi aggancio al comento sull'open source. io avevo iniziato a fare uno script simile poi ho trovato il tuo. ora ho aperto un progetto su launchpad. Lo trovate qui: https://launchpad.net/ilfattodownloader quando si lancia ilfattodownloader.py si apre un calendario e da li si puo' selezinare il giorno di cui si vuole scaricare il fatto. al momento i file vengono salvati in una cartella di default sotto la home dell'utente che si chiama ilfatto. saluti
... delle due, mi sembra che il tuo sia un buon esempio di come non fare le cose in ambito software libero, nel senso che hai rifatto da zero un software che già esisteva senza contattarne l'autore per unire le forze. Comunque sia, nessun problema, parliamo di un piccolo contributo e probabilmente avevamo requisiti diversi (io ad esempio voglio qualcosa di batch, per potere facilmente automatizzare lo scaricamento). Spero almeno tu abbia riutilizzato la parte di autenticazione, i.e. l'unica parte che richiedeva un po' di trial-and-error.
Saluti
delle due, mi sembra che il tuo sia un buon esempio di come non fare le cose in ambito software libero, nel senso che hai rifatto da zero un software che già esisteva senza contattarne l'autore per unire le forze.
mmm... mi spiace che tu stia partendo in maniera cosi prevenuta è un atteggiamento decisamente poco "open". Può darsi che intendiamo il software libero in maniera differente. Per me il valore più importante è la libertà. Preso un pezzo di software voglio essere libero di leggerlo, studiarlo, modificarlo a mio piacimento e voglio essere libero di redistribuirlo. Per te invece sembra che il valore più importante sia il riutilizzo/sfruttamento. Trovato un pezzo di codice che fa quello che voglio lo sfrutto per aggiungerci altre funzionalità... non è il mio modo di fare. Per quanto riguarda il contattare l'autore per unire le forze è proprio quello che ho fatto. ti ho postato il link dove ho messo il codice proprio perche tu possa vederlo prenderlo ed eventualmente migliorarlo. Se ti sembra che il codice che ho scritto stravolga il tuo script mi dispiace è un problema di contesto, sto lavorando ad un progetta da 26000 unittest, cambiare 10 righe in uno script python è stato un attimo... Ad ogni modo se ci sei ti offro volentieri una birra alla festa del toro di Granarolo
saluti
gaetano@feynman:/tmp$ wget "http://pdf.ilfattoquotidiano.it/openpdf/?n=20110123" --2011-01-23 02:09:00-- http://pdf.ilfattoquotidiano.it/openpdf/?n=20110123 Resolving pdf.ilfattoquotidiano.it... 80.247.70.152 Connecting to pdf.ilfattoquotidiano.it|80.247.70.152|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 10269585 (9.8M) [application/pdf] Saving to: `index.html?n=20110123'
100%[====================================================================================>] 10,269,585 268K/s in 38s
2011-01-23 02:09:39 (265 KB/s) - `index.html?n=20110123' saved [10269585/10269585]