Last active
August 7, 2019 14:42
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" ]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Más info sobre el dataset, en el portal de datos abiertos de Madrid
https://datos.madrid.es/portal/site/egob/menuitem.c05c1f754a33a9fbe4b2e4b284f1a5a0/?vgnextoid=f2fa3762b5bbb410VgnVCM1000000b205a0aRCRD&vgnextchannel=374512b9ace9f310VgnVCM100000171f5a0aRCRD&vgnextfmt=default