Skip to content

Instantly share code, notes, and snippets.

@aborruso
Last active February 26, 2021 16:26
Show Gist options
  • Save aborruso/de03e00e5297a813d789a9314709bd7e to your computer and use it in GitHub Desktop.
Save aborruso/de03e00e5297a813d789a9314709bd7e to your computer and use it in GitHub Desktop.

Avere risposta "content-type: text/csv" da CSV pubblicati su GitHub

Se puntiamo a un CSV pubblicato su GitHub, il server risponde con

HTTP/2 302
date: Tue, 19 Jan 2021 07:54:53 GMT
content-type: text/html; charset=utf-8

e il client che lo legge quindi non lo interpreta (di solito) come un CSV.

Per superare questo problema, possiamo usare una delle tante alternative al glorioso RawGit (non più funzionante).
Una è jsDelivr.

Ecco un esempio d'uso. A partire da un CSV con questo URL:

https://github.com/italia/covid19-opendata-vaccini/raw/master/dati/somministrazioni-vaccini-summary-latest.csv

lo si trasforma in sintassi jsDelivr

https://cdn.jsdelivr.net/gh/italia/covid19-opendata-vaccini@master/dati/somministrazioni-vaccini-summary-latest.csv

e se si lancia ad esempio

curl -I "https://cdn.jsdelivr.net/gh/italia/covid19-opendata-vaccini@master/dati/somministrazioni-vaccini-summary-latest.csv"

si ottiene dal server che è un text/csv

HTTP/2 200
date: Tue, 19 Jan 2021 07:58:33 GMT
content-type: text/csv; charset=utf-8

In questo modo la gran parte dei client lo sapranno intepretare correttamente e gestire come tabella.

Anche un browser interpreterà diversamente il file:

  • con l'URL nativo, il file verrà visualizzato nel browser (click qui, per provare);
  • con l'URL di jsDelivr, ne verrà proposto il download (click qui, per provare).

Ricavare l'indirizzo "vero" (e CORS) di un file pubblicato su GitHub

Quando si apre la pagina relativa a un file pubblicato su GitHub - ad esempio questo CSV - l'URL non è quello del file grezzo, ma quello della pagina web che ne mostra un'anteprima.
Ha questo schema:

https://github.com/pcm-dpc/COVID-19/blob/master/dati-regioni/dpc-covid19-ita-regioni-latest.csv

Un altro URL associato allo stesso file, è quello che si può ricavare facendo click con il desto del mouse su Raw e poi copiando l'URL:

Ha uno schema diverso da quello precedente, ma ancora una volta non è quello del file grezzo, ma soltanto un puntamento a questo.

https://github.com/pcm-dpc/COVID-19/raw/master/dati-regioni/dpc-covid19-ita-regioni-latest.csv

Per ricavare l'indirizzo "vero" basta fare click con il sinistro su Raw, aspettare che il browser mostri l'output e leggere l'URL. Lo schema è questo:

https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-regioni/dpc-covid19-ita-regioni-latest.csv

È un indirizzo in cui è abilitato il Cross-Origin Resource Sharing (CORS), per il quale un'applicazione Web dispone dell'autorizzazione per accedervi nonostante sia pubblicato su un'origine diversa.
Con questo URL potrò ad esempio usare un file pubblicato su GitHub, per creare un grafico su RAWGraphs.

L'URL "vero" di un file su GitHub, si può ricavare anche a partire dal secondo di questi URL, leggendo la risposta del server. Con curl ad esempio si può fare in questo modo:

curl -I "https://github.com/pcm-dpc/COVID-19/raw/master/dati-regioni/dpc-covid19-ita-regioni-latest.csv" | grep 'location:'

In output si avrà:

location: https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-regioni/dpc-covid19-ita-regioni-latest.csv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment