| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
En aquest exemple tractarem les dades JSON obtingudes del web de Red Eléctrica de España per obtenir el preu de la tarifa PVPC del dia actual. El bot de conversa retorna, segons la comanda, les següents informacions:
| Comanda | Resultat |
| /help | Comandes disponibles |
| /resum | Resum de la tarifa PVPC avui
(preus màxim i mínim i preu en el moment actual) |
| /ara | Preu de la tarifa PVPC ara mateix |
| /h0 /h23 |
Preu de la tarifa PVPC a l'hora indicada |
La comanda que farem servir serà aquesta:
https://apidatos.ree.es/es/datos/mercados/precios-mercados-tiempo-real?start_date=2020-10-23T00:00 &end_date=2020-10-23T23:30&time_trunc=hour
La comanda hauria d'estar en una sola línia. Hem marcat en color els paràmetres que cal adaptar per poder consultar el dia actual. La consulta de l'exemple (corresponent al 23-10-2020) torna una informació molt llarga. Les dades estan en format JSON que podem processar, per exemple, amb JSON formatter si en volem veure l'estructura per saber què ens interessa. El valor de la variable hh pot ser considerat text i caldrà convertir-lo a numèric. Ens interessen els vint-i-quatre preus horaris de la tarifa PVPC. Si suposem que el resultat de tractar el format JSON el tenim a la variable dades, podem extreure el preu de l'hora h amb:
var dades = JSON.parse(response); var pvpc = dades.included[0].attributes.values; var preu = pvpc[h].value; // Preu a l'hora h
El codi de l'script é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 nostre bot amb Telegram
var url_ree = "https://apidatos.ree.es/es/datos/mercados/precios-mercados-tiempo-real?"; // Adreça de les dades
var realitzat = false;
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 comanda = text.split("@"); // El signe @ separa la comanda dels paràmetres
var cmd = comanda[0]; // Comanda
var par = comanda[1]; // Paràmetres
if(cmd == '/help'){
var resposta = "<b>Comandes disponibles:</b>\n";
resposta = resposta + "/resum Resum de la tarifa PVPC avui\n";
resposta = resposta + "/ara Preu de la tarifa PVPC ara mateix\n";
resposta = resposta + "/h0 /h23 Preu de la tarifa PVPC a l'hora indicada\n";
sendText(id,resposta);
realitzat = true;
}
if(cmd == '/resum'){
preuEnergia(id,25); // Resum de la tarifa PVPC avui
realitzat = true;
}
if(cmd == '/ara'){
preuEnergia(id,24); // Preu de la tarifa PVPC ara mateix
realitzat = true;
}
if(cmd.indexOf("/h") == 0){
if(cmd.length > 2){
var hh = cmd.substring(2,cmd.length);
if (hh.length < 3){
var hsol = +hh;
preuEnergia(id,hsol); // Preu de la tarifa PVPC a l'hora indicada
realitzat = true;
}
}
}
if(!realitzat){
var resposta = "Comanda desconeguda";
sendText(id,resposta);
}
}
function preuEnergia(chatId,hh){
// Si hh = 24 volem l'hora actual
// Si hh = 25 volem el resum del dia
var ara = new Date(); // Dia i hora actuals
var mes = +ara.getMonth() + 1; // Sumem 1 perquè la funció dona els valors entre 0 i 11
// Construïm la data en el format requerit
var data = ara.getFullYear() + "-";
if (mes < 10){
data = data + "0";
}
data = data + mes + "-";
if (ara.getDate() < 10){
data = data + "0";
}
data = data + ara.getDate();
// Construïm la URL per demanar les dades
var peticio = url_ree + "start_date=" + data + "T00:00" + "&end_date=" + data;
peticio = peticio + "T23:30" + "&time_trunc=hour";
var response = UrlFetchApp.fetch(peticio); // Carrega la resposta a la petició
var dades = JSON.parse(response); // Tracta les dades rebudes com a JSON i les guarda a dades
var pvpc = dades.included[0].attributes.values; // Preus horaris
var resposta = "Petició incorrecta";
if (hh == 24){
hh = ara.getHours();
}
if ((hh >= 0) && (hh <= 23)){ // Si és per a una hora
var preu = pvpc[hh].value.toString().replace(".",","); // Canviem munts per comes
resposta = "El preu de la tarifa PVPC a les " + hh + " h d'avui és de " + preu + " €/MWh";
}
if (hh == 25){ // Si és el resum
hh = ara.getHours(); // Hora actual
var max = 0;
var min = 10000;
var hmax = 0;
var hmin = 0;
for(var i = 0; i < 24; i++){
var preu = pvpc[i].value;
if (preu > max){
max = preu; // Guarda el màxim
hmax = i;
}
if (preu < min){
min = preu; // Guarda el mínim
hmin = i;
}
}
// Preparem la resposta
resposta = "<b>Preu de la tarifa PVPC:</b>\n";
resposta = resposta + "Ara: " + pvpc[hh].value.toString().replace(".",",") + " €/MWh";
resposta = resposta + " (" + hh + " h)\n";
resposta = resposta + "Màx. avui: " + max.toString().replace(".",",") + " €/MWh";
resposta = resposta + " (" + hmax + " h)\n";
resposta = resposta + "Mín. avui: " + min.toString().replace(".",",") + " €/MWh";
resposta = resposta + " (" + hmin + " h)\n";
}
sendText(chatId,resposta);
}
function sendText(chatId,text_env,keyBoard){ // Funció que prepara per enviar 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);
}

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