| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
En aquest exemple agafarem unes dades que tenim en un full de càlcul i generarem una imatge en forma de diagrama de columnes (barres verticals) amb els valors del full de càlcul. Amb la idea de fer un exemple senzill, hem suposat que el nostre full de càlcul sempre té les dades corresponents a set dies, així el nombre de columnes és fix, i que en la primera columna hi ha el nom del dia i a la segona i la tercera el valor que correspon, respectivament, a l'estoc i a les comandes.
La següent imatge mostra el contingut del full de càlcul en un moment donat:

El resultat que obtindrem serà el gràfic següent:

En el nostre cas, podem demanar el gràfic des de Telegram (funció doPost) fent servir la comanda /grafic.
El programa és el següent:
var token = "^^34328844:AAFIpk-e7j3UZtYQYQaTduf4hEhnDqIcNXI"; // API Token de Telegram
var telegramUrl = "https://api.telegram.org/bot" + token; // URL que comunica el bot de conversa amb Telegram
var ssId = "^^ThsoSjkeMSfwEKy4mn_4QEYH96sxv3VURqE3WHCTswDA"; // Identificador del full de càlcul
function grafic(){
var taula = Charts.newDataTable(); // Creem una taula de dades
var sh = SpreadsheetApp.openById(ssId).getSheetByName("dades"); // Agafem el full
var dades = sh.getDataRange().getValues(); // Agafem les dades
for (var i in dades){ // Recorrem totes les dades
var row = dades[i]; // Agafem una filera
if (i == 0){ // A la primera filera hi ha els títols
// Definim les columnes de la taula
taula.addColumn(Charts.ColumnType.STRING, row[0]);
taula.addColumn(Charts.ColumnType.NUMBER, row[1]);
taula.addColumn(Charts.ColumnType.NUMBER, row[2]);
} else { // Guardem els valors a la taula
taula.addRow([row[0], row[1], row[2]]);
}
}
var taula_dades = taula.build(); // Generem la taula a partir de les dades
var graf = Charts.newColumnChart(); // Creem el gràfic
// Posem els paràmetres del gràfic
graf.setXAxisTitle("Dia");
graf.setYAxisTitle("Percentatge");
graf.setTitle("Estoc i comandes");
graf.setDimensions(700, 500);
graf.setDataTable(taula_dades); // Vinculem la taula al gràfic
var grafic = graf.build(); // Generem el gràfic
var grafic_blob = grafic.getBlob(); // Converteix el gràfic a dades binàries
return grafic_blob;
}
function doPost(e){
var data = JSON.parse(e.postData.contents); // Llegeix les dades rebudes per JSON i les guarda
var text = data.message.text; // Comanda enviada
var id = data.message.chat.id; // Identificador de la finestra d'on prové el missatge
var id_usuari = data.message.from.id; // Identificador de l'usuari
var id_missatge = data.message.message_id; // Identificador del missatge
var lang = data.message.from.language_code ; // Idioma de l'usuari
var nom_usr = data.message.from.first_name ; // Nom de l'usuari
var location = data.message.location; // Localització de l'usuari (si es sap)
var realitzat = false;
if(text == '/grafic'){
var blob = grafic(); // Generem el gràfic
var descrip = "Gràfic"; // Posem un títol
sendBlobFile(id,blob,descrip); // Enviem el gràfic a Telegram
realitzat = true;
}
if (!realitzat){
var resposta = "Comanda desconeguda";
sendText(id,resposta);
}
}
function sendText(chatId,text_env,keyBoard){ // Funció que envia un text o un teclat a Telegram
keyBoard = keyBoard || 0;
if(keyBoard.inline_keyboard || keyBoard.keyboard){
var data = {
method: "post",
payload: {
method: "sendMessage",
chat_id: String(chatId),
text: text_env,
parse_mode: "HTML",
reply_markup: JSON.stringify(keyBoard)
}
}
} else {
var data = {
method: "post",
payload: {
method: "sendMessage",
chat_id: String(chatId),
text: text_env,
parse_mode: "HTML"
}
}
}
UrlFetchApp.fetch( telegramUrl + '/', data);
}
function sendBlobFile(chatId,blob_data,caption){
var payload = {
method: "sendPhoto",
chat_id: String(chatId),
photo: blob_data,
caption: caption,
parse_mode: "HTML"
};
var options = {
method: "POST",
payload: payload,
muteHttpExceptions: true
};
UrlFetchApp.fetch( telegramUrl + '/', options);
}
Canviant les línies marcades en color per les següents el diagrama tindrà les barres horitzontals:
var graf = Charts.newBarChart();
// Posem els paràmetres del gràfic
graf.setXAxisTitle("Percentatge");
graf.setYAxisTitle("Dia");
Podem fer que l'eix sigui de tipus logarítmic afegint la línia següent, per exemple després de les marcades en color.
graf.useLogScale();
Podem fer que el gràfic sigui de barres apilades afegint la línia següent, per exemple després de les marcades en color.
graf.setStacked();
Per obtenir un gràfic d'àrees només caldrà canviar la primera de les línies marcades en color per la següent:
var graf = Charts.newAreaChart();
Per obtenir un gràfic de línies només caldrà canviar la primera de les línies marcades en color per la següent:
var graf = Charts.newLineChart();

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.