const url = "https://datos.madrid.es/egob/catalogo/202088-0-trafico-camaras.kml"
const instancia = 'social.jagedn.dev';
const bootToken = 'ZTMYYTQ4-----recuerda no compartir tu token ni en un post';
function myFunction() {
let xml = UrlFetchApp.fetch(url).getContentText('ISO-8859-1');
let document = XmlService.parse(xml);
let root = document.getRootElement();
let ids = new Array()
root.getChildren().forEach(document=>{
document.getChildren().forEach(item=>{
if(item.getName()=="Placemark"){
item.getChildren().forEach(extendedData=>{
if( extendedData.getName()=='ExtendedData'){
extendedData.getChildren().forEach(data=>{
if(data.getAttribute("name").getValue()=="Numero"){
data.getChildren().forEach(value=>{
ids.push(value.getText())
})
}
})
}
})
}
})
})
let id = ids[Math.floor(Math.random() * ids.length)];
let image = UrlFetchApp.fetch("https://informo.madrid.es/cameras/Camara"+id+".jpg?v="+new Date().getMilliseconds()).getBlob()
sendMedia(image, "Una #random webcam de #Madrid al día\n(Enviada con un script, podriamos decir que es un bot o no, qué se yo)")
}
function sendMedia(blob, toot) {
var urlMedia = `https://${instancia}/api/v1/media`;
var url = `https://${instancia}/api/v1/statuses`;
var boundary = "xxxxxxxxxx";
var data = "";
data += "--" + boundary + "\r\n";
data += "Content-Disposition: form-data; name=\"file\"; filename=\"chart.png\"\r\n";
data += "Content-Type:image/png\r\n\r\n";
var payloadImage = Utilities.newBlob(data).getBytes()
.concat(blob.getBytes())
.concat(Utilities.newBlob("\r\n--" + boundary + "--").getBytes());
var optionsImage = {
method : "post",
contentType : "multipart/form-data; boundary=" + boundary,
payload : payloadImage,
headers:{
'Authorization': `Bearer ${bootToken}`
},
muteHttpExceptions: true,
};
var respImage = UrlFetchApp.fetch(urlMedia, optionsImage).getContentText();
Logger.log(respImage)
var jsonImage = JSON.parse(respImage);
var payload = {
status: toot,
media_ids: [jsonImage.id]
}
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload),
'headers': {
'Authorization': `Bearer ${bootToken}`
},
'muteHttpExceptions':true
};
Logger.log(payload)
const resp = UrlFetchApp.fetch(url, options);
Logger.log(resp)
}