Skip to content

Instantly share code, notes, and snippets.

@jagedn
Last active August 7, 2019 14:42
Show Gist options
  • Save jagedn/0d1c3b5c0bd81aea2bb5e8b5e07f695d to your computer and use it in GitHub Desktop.
Save jagedn/0d1c3b5c0bd81aea2bb5e8b5e07f695d to your computer and use it in GitHub Desktop.
Vuelca a una Hoja Google los datos históricos de la M30 (vehiculos, velocidad, recorrido)
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
var menu = ui.createAddonMenu()
menu.addItem('Historico M30', 'dumpM30');
menu.addItem('Accidentes M30', 'accidentesM30');
menu.addToUi();
}
function populateHeader(sheet){
sheet.appendRow([ "Fecha", "Vehiculos","VelocidadMedia","DistanciaMedia","TiempoMedio" ]);
}
function dumpM30(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.clearContents();
populateHeader(sheet);
var url = 'http://www.mc30.es/images/xml/historicousuarios.xml';
var xml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement();
var entries = document.getRootElement().getChildren('Historico');
var entriesArray = Array.prototype.slice.call(entries, 0);
var pattern = /(\d{2})\/(\d{2})\/(\d{4})/;
entriesArray.sort(function(a,b) {
var aCat = new Date( a.getChild("Fecha").getText().replace(pattern,'$3-$2-$1'));
var bCat = new Date( b.getChild("Fecha").getText().replace(pattern,'$3-$2-$1'));
if (aCat > bCat) return 1;
if (aCat < bCat) return -1;
return 0;
});
for (var i = 0; i < entries.length; i++) {
//if( i%5 != 0 ) continue; // filtrar solo algunos datos, que son muchos
var item = entriesArray[i];
var fecha = entriesArray[i].getChild('Fecha').getText();
var usuariosCalle30 = entriesArray[i].getChild('UsuariosCalle30').getText().split(' ')[0];
var velocidadMedia = entriesArray[i].getChild('velocidadMedia').getText().replace('.',',').split(' ')[0];
var distanciaMediaRecorrida = entriesArray[i].getChild('distanciaMediaRecorrida').getText().split(' ')[0];
var tiempoMediodeRecorrido = entriesArray[i].getChild('tiempoMediodeRecorrido').getText().replace(/ /g,'').replace('.',',').replace('min','').replace('seg.','');
sheet.appendRow([
fecha,usuariosCalle30,velocidadMedia,distanciaMediaRecorrida,tiempoMediodeRecorrido
]);
}
}
function accidentesM30(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.clearContents();
populateAccidentesHeader(sheet)
var urls = [
'https://datos.madrid.es/egob/catalogo/300201-2-calle30-accidentes-historico.csv', //2016
'https://datos.madrid.es/egob/catalogo/300201-0-calle30-accidentes-historico.csv', //2017
'https://datos.madrid.es/egob/catalogo/300201-4-calle30-accidentes-historico.csv' //2018
]
for(var url=0; url < urls.length; url++){
var csv = UrlFetchApp.fetch(urls[url]).getContentText();
var csvData = Utilities.parseCsv(csv,";");
for( var i=1; i<csvData.length; i++){
csvData[i][1] = csvData[i][1].replace('.',':') //wtf
sheet.appendRow([
Utilities.formatString('=WEEKDAY("%s/%s/%s")', csvData[i][0].substr(6,4), csvData[i][0].substr(3,2), csvData[i][0].substr(0,2)),
Utilities.formatString('=ROUND( ((%s*60)+%s)/60 )', csvData[i][1].split(':')[0], csvData[i][1].split(':')[1]),
csvData[i][6]
]);
}
}
}
function populateAccidentesHeader(sheet){
sheet.appendRow(["Dia Semana", "Hora", "Lugar" ]);
}
@jagedn
Copy link
Author

jagedn commented Jul 5, 2019

Crea una hoja de Google Sheet y en Herramientas, Editor de secuencias pega este código y salva el proyecto

Cuando refresques la Hoja deberías tener una opción nueva en el menú de Complementos llamada "HistoricoM30". Cuando la selecciones el script borrara la hoja actual y empezará a volcar los datos directamente desde el portal de datos de Madrid

Desde 2013 a 2019 son unos 2400 registros así que tardará un rato, unos 5 minutos (?)

A partir de estos datos puedes hacer el tratamiento de datos que se te antoje como gráficas, comparativas, etc

@jagedn
Copy link
Author

jagedn commented Jul 5, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment