FreshRSS: Forzare il protocollo RSS
Aggiornato il
A Gennaio, per la prima volta, ho assistito a uno di sciopero di Trenitalia (purtroppo dopo aver comprato i biglietti). Tutt’ora, non c’è modo di ricevere alcun tipo di notifica che ti avvisi in anticipo, e questo non è proprio carino. L’unico modo per rimanere informati sul traffico è quello di accedere dal sito o dall’app, a questa pagina HTML. Sulla pagina non ci sta nemmeno la possibilità di filtrare le informazioni per regione: in quell’unico spazio vi beccate di tutto: dalle modifiche al traffico in Lombardia agli scioperi in Sicilia. Era arrivato il momento di cercare una soluzione.
FreshRSS per generare i feed
Ho trovato un’istanza di FreshRSS, che fra le diverse cose che fa, usa il linguaggio XPath per individuare i nodi HTML delle pagine web in modo da poter generare un feed RSS. Con l’aiuto di un relativo client per Android, problemi come questo non sembravono così irrisolvibili.
Questo software nasce principalmente come aggregatore di feed, anche di diversa natura (Tra cui RSS, Atom, HTML, XML e JSON)
Fare un’ulteriore cernita
Anche dopo aver configurato il parsing, FreshRSS offre diverse possibilità su filtri e query, sia sulla singola sorgente che su gruppi di letture. Puoi filtrare per titolo, testo, tag, intervalli di date, autori, ID e tanti altri paramentri. Esportando le query, quello che esce fuori è un feed raffinato e personale.
Ad esempio, se fai spesso la tratta Firenze-Pisa, una volta ottenuto un feed con delle notizie sul traffico, a prescidendere se lo hai trovato sul web o se lo hai costruito all’interno del software, potresti voler filtrare ulteriormente usando questa query:
firenze OR pisa OR toscana OR #Toscana
Se ti interessa ricevere solo quel tipo di aggiornamenti da feed che contengono anche altre informazioni.
Altro esempio che mi viene in mente riguarda quei servizi che scansionano il web per mostrare i nuovi articoli scoperti su un particolare argomento.
Google News, per esempio, espone già un feed RSS (non ho letto i loro termini di utilizzo).
Per un simile aggregatore di notizie potresti settare una query come questa per estrarre solo articoli pubblicati nelle precedenti 2 settimane:
pubdate:P2W/
Così che anche se l’articolo è stato scoperto di recente da Google, verrà mostrato nel tuo feed solo se è stato anche scritto da poco.
Termini di Servizio dei siti (ToS)
Purtroppo quasi tutti i siti web famosi hanno delle regole di utilizzo, chiamate spesso “termini di servizio”. Molti di questi vietano l’utilizzo di strumenti come FreshRSS. Io non ho ben capito se violare i termini di servizio di un sito web sia direttamente anche illegale.
Sono stato molto fortunato a trovare un’istanza italiana di FreshRSS, hostata pubblicamente e gratuita da usare.
Aggirare i sistemi?
Le aziende implementano diversi ostacoli per far sì che tu non possa usare tool come freshRSS, ma gli strumenti per aggirare questi sistemi sono molteplici. Cookies di sessione custom, header custom con user agent diversi, proxy HTTP, Socks, e chissà quanta altra roba. Il materiale su questi espedienti è di dominio pubblico e si trovano un sacco di guide su come fare web scraping senza farsi beccare. Per me non è sostenibile e non è etico, perché ci si ritrova a estrarre contenuti da un’azienda che non lo vuole.
Prendendo per esermpio il codice HTML di una pagina Instagram:
class="x1i10hfl xjbqb8w x1ejq31n x18oe1m7 x1sy0etr xstzfhl x972fbf x10w94by x1qhh985 x14e42zd x9f619 x1ypdohk xt0psk2 x3ct3a4 xdj266r x14z9mp xat24cr x1lziwak xexx8yu xyri2b x18d9i69 x1c1uobl x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz _a6hd"
Non mi sembra un attributo da voler far leggere a un umano.
Conclusioni
Sono molto contento di aver trovato un tool come FreshRSS e sono davvero tanto contento di averne trovato un’istanza italiana. Dopo un po’ mi romperò il cazzo di assecondare tutta internet affinché le cose vadano fatte male. Alla prossima!