Validazione feed RSS degli scraper


#1

A partire dalla lista di fonti individuate, a ogni scraper è solo richiesto di pubblicare il feed RSS secondo le specifiche di AlboPOP. Prima di accettare e aggregare un nuovo feed è però necessario validarne l’output, mediante un validatore che si basi sulle specifiche stesse.

Come si sviluppa un validatore di XML? Bisogna definire un DTD e/o XSD aderente alle specifiche?


#2

C’è anche un altro tema collegato a questo… l’aggregatore di tutti i feed prodotti dagli scapers dovrà trasformare il singolo item XML in documento JSON da indicizzare, il che richiede un mapping univoco tra le due strutture. Forse questo richiede la definizione di specifiche anche per il formato JSON.

Soluzione 1): a ogni scraper viene richiesta la produzione anche di un feed.json (specifiche JSON), oltre che di un feed.xml (specifiche RSS).

Soluzione 2): si definisce una conversione tra le due specifiche (RSS <–> JSON)… mediante opportuno XSLT?


#3

Voto per la soluzione 2)


#4

Anche io voto la soluzione 2.


#5

Vai, task assegnato a @scaloni e @gamba.davide! Milestone? :slight_smile:

A parte gli scherzi, sono poco ferrato in materia, se potete ragionarci su e buttar giù una bozza, ci facciamo un’idea più precisa di come procedere…


#6

Ecco alcune risorse utili per la validazione:


#7

Ho trovato un XSLT generico per la conversione XML -> JSON: https://github.com/JayDaley/XML-to-JSON-in-XSLT (quello che ci serve è lo stile 1).

Direi che funziona bene, in python l’ho testato con lxml seguendo questo suggerimento: http://stackoverflow.com/a/16699042. Ha solo un bug: per qualche motivo produce un json non valido perché pieno di doppie doppie virgolette (""). Ma basta fare una sostituzione s/"{2,}/"/g prima del parsing per risolvere il problema.

Ecco un esempio: xml, json.


#8

Eccone una prima versione, oltre alla conversione XML -> JSON applica anche alcune trasformazioni ad-hoc: https://github.com/RicostruzioneTrasparente/albopop-json-converter.


#9

Lavoro terminato e in produzione…


#10

#11