The Blog

Telecom Italia ADSL Fibra Scraper

06 Mag 15

Come per So You Start, anche Telecom e le varie TELCO non forniscono nessun servizio di avviso di nuovi servizi disponibili per la propria utenza/zona di residenza.

La risposta alla domanda è: SI, sto aspettando un Fiber to the cabinet che non arriverà mai, e se giungerà sarà molto probabilmente grazie a Telecom 🙂

Dunque mi sono studiato la fantomatica pagina di Verifica la copertura (https://www.telecomitalia.it/verifica-copertura), inizialmente utilizzando pure un servizio di risoluzione captcha tramite API per poi scoprire che c’era una strada più veloce e pratica.

Elementi necessari per mettere in piedi lo scraper:

  • Linux box con bash
  • Accesso a crontab
  • Scaricare il tool pup (non è necessario installarlo nel sistema, è sufficiente sia presente nella stessa directory dello script)
  • Comando mail funzionante

Schema delle richieste

Giusto per darvi qualche info di base, riporto il semplice schema delle richieste:

  1. POST verso la stessa pagina ‘https://www.telecomitalia.it/verifica-copertura’ che ritorna status code 302
  2. GET di https://www.telecomitalia.it/verifica-copertura-result  che contiene appunto i risultati

Google Chrome ha un’utilissima feature nel pannello Network della Developer Tools che permette di replicare esattamente la query con tutti gli header del caso (cookie, tipologia, ecc.) e riportarla in formato curl cli.

Ecco a cosa mi riferisco:

E’ dunque possibile evitare di dover risolvere il captcha e simulare il percorso, è sufficiente infatti copiarsi la richiesta CURL della pagina https://www.telecomitalia.it/verifica-copertura-result (quella appunto con i risultati) ed il gioco è fatto.

Gli headers contenuti nella richiesta permettono di ottenere i risultati relativi al vostro indirizzo a vita, o finchè non cambierà il sistema 🙂

Codice Bash

Senza dilungarmi vi riporto il codice bash da modificare seguendo le indicazioni a seguire.
[code lang=”bash”]
#!/bin/bash
function with_backoff {
local max_attempts=${ATTEMPTS-5}
local timeout=${TIMEOUT-1}
local attempt=0
local exitCode=0

while [[ $attempt < $max_attempts ]] do set +e “$@” exitCode=$? set -e if [[ $exitCode == 0 ]] then break fi echo “Failure! Retrying in $timeout..” 1>&2
sleep $timeout
attempt=$(( attempt + 1 ))
timeout=$(( timeout * 3 ))
done

if [[ $exitCode != 0 ]]
then
echo “You’ve failed me for the last time! ($@)” 1>&2
fi

return $exitCode
}
BASEPATH=’/home/YOURHOME/telecom_scraping/’
OKSTATUS=’-: OK’
SHAFILE=$BASEPATH’hash.sha1′

TXTCURL=`with_backoff curl ‘https://www.telecomitalia.it/verifica-copertura-result’ -H ‘If-None-Match: “1430904919”‘ -H ‘Accept-Encoding: gzip, deflate, sdch’ -H ‘Accept-Language: en-US,en;q=0.8’ -H ‘User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36’ -H ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8’ -H ‘Referer: https://www.telecomitalia.it/verifica-copertura’ -H ‘Cookie: _gat=1; __utmt=1; CLIACS=KO; SSESS231241eb067d9cbea3ab99e6d2c37980=fd8SyxlmOyykUh6QIBwblGZ3siC8VwYI4lTAfRywxGA; SESS231241eb067d9cbea3ab99e6d2c37980=Uwy9AUOV1TtqSftfGN_C5y0Tms9pHrBOTf8I8WLd9Eo; has_js=1; _ga=GA1.2.1913617342.1430904885; s_cc=true; __utma=196308787.1913617342.1430904885.1430904885.1430904885.1; __utmb=196308787.3.10.1430904885; __utmc=196308787; __utmz=196308787.1430904885.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); s_fid=2A0AB22B28FEE01F-30635BF821C2748D; s_nr=1430904963445-New; TI_LNK_STO=%5B%5BB%5D%5D; s_sq=tiecommerceprod%3D%2526pid%253DECM%25253AVerifica%252520Copertura%252520ADSL%252520e%252520FIBRA%252520OTTICA%2526pidt%253D1%2526oid%253Dhttps%25253A%25252F%25252Fwww.telecomitalia.it%25252Fsites%25252Fdefault%25252Ffiles%25252Fthemes%25252Fpti-bo%25252Fimg%25252Fbt_verifica.gif%2526ot%253DIMAGE; nomobi=1’ -H ‘Connection: keep-alive’ -H ‘If-Modified-Since: Wed, 06 May 2015 09:35:19 GMT’ -H ‘Cache-Control: max-age=0’ –compressed`
TXT=`echo $TXTCURL | $(eval echo “$BASEPATH”pup) ‘#ti-strillo2 .cont-strillo2 .title text{}’`
SHA=`echo $TXT | sha1sum –check $SHAFILE`

if [ “$SHA” != “$OKSTATUS” ]
then
echo -e “$TXT” | mail -s “WARNING!!! – Telecomitalia update!!” [email protected]
echo $TXT | sha1sum > $SHAFILE
else
echo -e “$TXT” | mail -s “NO UPDATE 🙁 – Telecomitalia update!!” [email protected]
fi
[/code]

Cosa modificare

  • Linea 21: la variabile BASEPATH con il path assoluto contenente lo script in questione
  • Linea 25: sostituire la chiamata curl con quella ottenuta tramite chrome e mantenere la funzione with_backoff, Telecom ha qualche problema con le richieste dunque bisogna effettuare dei retry 🙂
  • Linee 31 e 34: modificare la mail ed eventualmente l’oggetto.

KNOWN ISSUE: Al primo avvio lo script vi darà errore perchè manca un controllo sul file sha1 generato, al secondo avvio se tutto è configurato correttamente non dovrebbero più esserci problemi

Perdonate se sono stato eccessivamente schematico, in caso di problemi fatemelo sapere!

Comments