blog post on ilfatto-download
authorStefano Zacchiroli <zack@upsilon.cc>
Wed, 11 Nov 2009 10:43:20 +0000 (11:43 +0100)
committerStefano Zacchiroli <zack@upsilon.cc>
Wed, 11 Nov 2009 10:43:20 +0000 (11:43 +0100)
blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati.mdwn [new file with mode: 0644]
blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati/ilfatto [new file with mode: 0644]
blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati/ilfatto-download [new file with mode: 0644]

diff --git a/blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati.mdwn b/blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati.mdwn
new file mode 100644 (file)
index 0000000..5bc08b4
--- /dev/null
@@ -0,0 +1,34 @@
+# solo per abbonati
+
+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](http://www.ilfatto.info)**, 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](http://pypi.python.org/pypi/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`.
+
+[[!tag lang/italian ilfatto newspaper italy hack]]
diff --git a/blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati/ilfatto b/blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati/ilfatto
new file mode 100644 (file)
index 0000000..a722c85
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+destdir="$HOME/Desktop/ilfatto"
+today=$(date +%Y%m%d)
+fname="$destdir/ilfatto${today}.pdf"
+
+if ! [ -f "$fname" ] ; then
+    echo "Try downloading newspaper ..."
+    (cd $destdir && $HOME/bin/ilfatto-download > /dev/null)
+fi
+if [ -f "$fname" ] ; then
+    xdg-open $fname
+else
+    echo "Newspaper not found :-("
+fi
diff --git a/blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati/ilfatto-download b/blog/posts/2009/11/script_per_scaricare_il_fatto_da_abbonati/ilfatto-download
new file mode 100644 (file)
index 0000000..866eec5
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+# Automatically download "Il Fatto Quotidiano", authenticating to the PDF archive
+#
+# Copyright: (C) 2009 Stefano Zacchiroli <zack@pps.jussieu.fr>
+# License:   GNU General Public License 3 or above
+
+import mechanize, re, sys
+
+USERNAME = "quilatua@email"
+PASSWORD = "quilatuapassword"
+
+LOGIN_URL = 'http://www.antefatto.it/servizi/login/login.aspx?redirect=/servizi/pdf/pdfselect.aspx'
+
+br = mechanize.Browser()
+br.open(LOGIN_URL)
+
+# stage 1: login into PDF archive
+br.select_form('form1')
+br['Login1$UserName'] = USERNAME
+br['Login1$Password'] = PASSWORD
+login_res = br.submit()
+
+# stage 2: set (today's) date
+br.select_form('form1')
+date_res = br.submit()
+
+# stage 3: retrieve PDF
+pdf_res = br.follow_link(text_regex=re.compile(r'scarica.*pdf'))
+
+# stage 4: save PDF
+ # sample content-disposition header: attachment; filename=ilfatto20091008.pdf
+cdisp = pdf_res._headers['content-disposition']
+if cdisp.startswith('attachment; '):
+    fname = cdisp.split()[1].split('=')[1]
+else:
+    print >> sys.stderr, "W: can't guess filename, saving to ilfatto.pdf"
+    fname = 'ilfatto.pdf'
+pdf_file = file(fname, 'w')
+pdf_file.write(pdf_res.get_data())
+pdf_file.close()
+
+print fname
+