Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

Generem una equació

El web CodeCogs permet generar la imatge d'una equació a partir d'unes indicacions proporcionades en codi LaTex. Aquest mateix web ofereix un servei que ens permet cridar-lo des de Google Apps Script i obtenir la imatge en el format desitjat.

La següent funció genera una imatge en format png a partir del codi LaTex que li entrem com a paràmetre. La pròpia funció envia la imatge al xat de Telegram corresponent a l'identificador que i hem donat com a paràmetre. Podem demanar-li la imatge en un altre format, seguint les instruccions que trobarem en aquesta pàgina. En aquest cas s'envia el codi LaTex com a peu de la imatge però podríem enviar, amb un senzill canvi, qualsevol altre text o no posar peu.

Podem trobar les principals comandes per generar equacions amb LaTex en aquesta pàgina.

function formula(ident,formu){
  // Demanem la imatge de la fórmula a l'adreça https://latex.codecogs.com 
  var url = "https://latex.codecogs.com/png.image?"+ encodeURIComponent(formu);
  // Obtenim la imatge de l'adreça i la passem a format BLOB
  var img = UrlFetchApp.fetch(url).getBlob();
  sendBlobFile(ident,img,formu); // Enviem la imatge a Telegram
                                 // posant el codi LaTex com a peu 
}

Aquesta funció, però, no dona uns resultats satisfactoris a Telegram. Si ho provem, amb el següent codi:

x^2+y^2=1

obtindrem el següent missatge:

Missatge

Una manera de resoldre aquest inconvenient és demanar-li que ens generi la imatge en format SVG i que ens posi el fons blanc. Després la imatge rebuda la guardarem a una carpeta del nostre Google Drive i demanarem que ens generi una imatge en miniatura (thumbnail), que serà la que enviarem a Telegram. Després podrem esborrar el fitxer de la imatge. En aquesta versió, caldrà donar-li també l'identificador de la carpeta. Ara l'adreça per demanar la imatge és més llarga perquè conté la indicació del color del fons. Costa d'entendre perquè alguns caràcters s'han substituït pels seus codis però si desfem la substitució podem observar:

https://latex.codecogs.com/svg.image?\bg{white}

on es veu més clar que li estem indicant que el fons (background, bg) sigui blanc.

function formula(ident,formu){
  // Identificador de la carpeta on guardarem els fitxers
  var folderId = "^^UazkEipsUysdDi4NR4rgZnzPmeWWHdk";
  // Demanem la imatge de la fórmula a l'adreça https://latex.codecogs.com 
  var url = "https://latex.codecogs.com/svg.image?%5Cbg%7Bwhite%7D"+ encodeURIComponent(formu);
  // Obtenim la imatge de l'adreça i la passem a format BLOB
  var img = UrlFetchApp.fetch(url).getBlob();
  // Guardem el BLOB en un fitxer
  var fitxer = DriveApp.getFolderById(folderId).createFile(img);
  // Agafem l'identificador del fitxer creat
  var id_fitxer = fitxer.getId();
  // Fem un bucle per esperar que estigui llesta la miniatura
  var repetir = true;
  var cnt = 0;  // Comptador de dècimes de segon
  while(repetir){  // Mentre no estigui
    var thumb = DriveApp.getFileById(id_fitxer).getThumbnail();  // Mirem si ja s'ha creat la miniatura
    Utilities.sleep(100);  // Esperem una dècima de segon
    cnt++;
    if((cnt > 100) || (thumb)){  // Si ja està o han passat deu segons
      repetir = false;  // Sortim del bucle
    }
  }
  sendBlobFile(ident,thumb,formu); // Enviem la imatge a Telegram
                                   // posant el codi LaTex com a peu 
  DriveApp.getFileById(id_fitxer).setTrashed(true);  // Marca com a esborrat el document provisional
}

En aquest cas, si ho provem amb el següent codi:

x^2+y^2=1

obtindrem el següent missatge:

Missatge

En aquest exemple hi ha un programa complet que fa servir aquesta funció.

 

 

 

 

 

 

 

 

 

 

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