@oroscoop_bot: un generatore casuale di oroscopi. Piccoli passaggi semplici saltando da telegram a u
- oroscoop4c
- 23 dic 2017
- Tempo di lettura: 5 min
Se siete arrivati a leggere questo tutorial, evidentemente vi abbiamo incuriosito un bel po’.
E, con altrettanta certezza, vi sarete accorti che @oroscoop_bot è una burla senza alcuna pretesa. Una burla didattica, però.
Ma andiamo con ordine.
Una burla, si diceva. Infatti prende spunto da due idee, che abbiamo pensato di mixare un po’. La prima è @supercazzola_bot, ovvero un bot che fa il verso al noto film italiano “Amici miei” di Mario Monicelli, oramai un classico (o, meglio, un cult) della tradizione cinematografica italiana.
Il bot è stato realizzato da Piersoft Paolicelli (qui il suo blog), in collaborazione con un gruppo di amici (Luca Scalzullo, Fedele Congedo, Paola Lisimberti, Mimmo Aprile, Ida Leone), tra i quali il nostro Prof. di Informatica, Mimmo Aprile.
Paolicelli è un civic hacker che, peraltro, è stato spesso graditissimo ospite del nostro Istituto, seminando i germi dell’Innovazione nella didattica, introducendo concetti di Open Data e, appunto, Bot Telegram.
Ma, al contempo, questo bot ha risvolti didattici.
Magari non legati all’oggetto del contenuto, se rapportato a @divinacommediabot, altro “prodotto” di Paolicelli&Friends che, ovviamente, riguarda ll’opera dantesca ed è basato su un progetto didattico interdisciplinare molto articolato.
Un po’ più vicino al nostro progetto è invece @Smontafavole_bot, un prodotto del Prof. Luca Scalzullo e dei suoi studenti (qui il link al tutorial).
Questa guida si ispira ai lavori sopra citati per dare la possibilità ai lettori di riprodurre un generatore simile, modificandolo, mediante un progetto nato dalla creatività della classe IVC del Liceo Scientifico V. Lilla di Oria (BR), che ha sviluppato un bot telegram che consente di comprendere cosa sia una base dati e come si interagisce con essa, costruendo codice in grado di estrarre i dati in modo strutturato, a seconda di quanto richiesto da un comando eseguito in una applicazione (Telegram, appunto) che usa delle API (Application Programming Interface).
@oroscoop_bot è un generatore casuale di oroscopi, scritti in un inglese maccheronico (italiano più inglese), permettendo ai lettori una previsione sul proprio anno nuovo, influenzato dagli astri.
L’oroscopo viene costruito dal bot in maniera random ma “pesca” da frasi che sono state costruite in modo da avere una struttura (il “dato strutturato”, uno degli elementi portanti degli archivi informatizzati, appunto) rispetta i criteri base: ha un incipit, ossia un saluto di buon anno nuovo, poi affronta i temi dell’amore, lavoro, fortuna e salute. Dopo un buon fritto misto di previsioni sul proprio anno, @oroscoop_bot chiude il tutto con un saluto finale.
L’esperienza è già stata fatta e può ad esempio, essere vista sul canale telegram @oroscoop_bot
Il tutorial è strutturato in più fasi:
Creazione di un bot su telegram
Creazione del google sheet
Creazione dello script
Collegamenti e conclusioni
Creazione del bot telegram
Una volta installato Telegram (servizio di messaggistica istantanea) cercate il bot che si chiama @BotFather e vi apparirà questa finestra.

Il passo che segue è il click del tasto “AVVIA” a cui susseguono una lunga lista di comandi con cui gestire al meglio i vostri bot. In basso digitate liberamente /newbot (il comando che ci interessa) che vi consentirà, appunto, di creare il vostro primo bot telegram. Una volta inviato il comando vi chiede di dare un nome al bot. Infine, BotFather vi fa un’ultima richiesta (assolutamente importante) ovvero di dare un username al vostro nuovo bot con l’unico obbligo di farlo terminare con la parolina “bot” o “_bot”. BotFather vi regalerà una serie di informazioni ed in particolare un complicatissimo TOKEN API che rappresenta la chiave di accesso al bot. Appuntatevelo, vi servirà!
Creazione del google sheet
Bisogna specificare che Google sheet consente la pubblicazione del contenuto direttamente sul web e la possibilità di essere interrogato e che quindi fungerà da database per il nostro bot telegram. Il primo passaggio è la creazione di 13 fogli di calcolo: si, avete capito bene, 13 e non 12, poichè il nostro @oroscoop_bot comprende ll’Ofiuco.
Se non sapete cosa sia, leggetevi la trattazione di Giovanni Donatiello su questo sito.
Ciascun foglio si compone di dieci brevi oroscopi, elencati nelle colonne a partire dalla seconda, e strutturati per: incipit, amore, lavoro, fortuna, salute e conclusione. Fate in modo che gli oroscopi abbiano la stessa struttura logica, per poter essere smontati e sostituiti.
Quello che dovrete fare è appuntarvi un altro stranissimo codice che è il KeyID dello spreadsheet e che troverete nel link in alto, qualcosa come la parte in rosso:
https://docs.google.com/spreadsheets/d/1bRbzfFmx_-RygPzIHLY8NPIqhvnVt77CNEe9ySHIADI/edit#gid=1984826736
Ed ora prende sopravvento la fantasia, che è l’ingrediente fondamentale per riempire le caselle. Non siate troppo crudeli.
Creazione dello script
Lo confessiamo! Quando abbiamo visto il codice per la prima volta, avremmo voluto strapparci i capelli. Ma state tranquilli, noi ce l’abbiamo fatta a comprenderlo e modificarlo, quindi ora tocca a voi! Le righe in rosso sono un commento al codice scritto nella riga successiva.
// indicazione tramite KeyId del foglio di calcolo da cui prelevare i dati
ID_SPREADSHEET="1bRbzfFmx_-RygPzIHLY8NPIqhvnVt77CNEe9ySHIADI”;
//questa funzione sceglie casualmente un numero tra un minimo (min) e un massimo indicato (max) e restituisce il numero che genera
function getRandomArbitrary(min, max) {
return Math.random() * (max - min + 1) + min;
}
//la funzione riceve indicazione su quale sia il “foglio” da cui prelevare l’oroscopo e da li va a pescare prendendo per ogni riga (da 1 a 6) una colonna random tra la seconda e l’ultima.
function doGet(foglio) {
var ss = SpreadsheetApp.openById(ID_SPREADSHEET);
var metaSheet = ss.getSheetByName(foglio);
var RSSFeedTitle='';
var lastcol=1;
while (metaSheet.getRange(1,lastcol).getValue()!=''){
lastcol++;
}
for (var i=1; i < 7; i++) {
RSSFeedTitle += metaSheet.getRange(i,getRandomArbitrary(2,(lastcol-1))).getValue()+' \n';
}
return RSSFeedTitle;
}
function doPost(e) {
var update = JSON.parse(e.postData.contents);
// Sostituisci a {API_TOKEN} il tuo token
var API_TOKEN = “{API_TOKEN}”;
if (update.hasOwnProperty('message')) {
var msg = update.message;
var chatId = msg.chat.id;
if (msg.hasOwnProperty('entities') && msg.entities[0].type == 'bot_command') {
if (msg.text == '/favola') {
var payload = {
'method': 'sendMessage',
'chat_id': String(chatId),
'text': doGet(),
'parse_mode': 'Markdown'
}
var data = {
"method": "post",
"payload": payload
}
UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data);
}
}
}
}
Diciamo che questo è un codice iniziale a cui susseguono i 13 codici (ognuno per ogni oroscopo). Per esempio:
// inizio codice segno ARIETE
if (msg.text == '/ariete'| msg.text == '/Ariete') {
var payload = {
'method': 'sendMessage',
'chat_id': String(chatId),
'text': '<b>ARIETE</b>\n'+ doGet('ARIETE'),
'parse_mode': 'HTML'
}
var data = {
"method": "post",
"payload": payload
}
UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data);
}
// fine codice segno ARIETE
Se volete, l’intero foglio di Google è visionabile qui. Per vedere il codice, vi basterà andare sul menù Strumenti→ Editor di Script.
Alla fine dovrete salvare e poi, nel menu a tendina, pubblicare lo script come applicazione web badando di renderlo disponibile in lettura a chiunque anche se anonimi (Anyone even anonymous). Quando avrete fatto vi chiederà il permesso di accedere ai contenuti del google sheet, fatelo liberamente e registrate l’URL finale che vi servirà fra un attimo.
Collegamenti e conclusioni
L’operazione che faremo si chiama WebHook. Un Webhook (in italiano letteralmente: "uncino del web") nella programmazione informatica sul web è un metodo per aumentare o alterare il comportamento di una pagina web, o di un'applicazione web con chiamate di ritorno (callback) personalizzate.
Questo è quello che dice Wikipedia ed in soldoni è un modo per uncinare un database e poterlo interrogare ogni volta che si vuole secondo il codice che abbiamo scritto.
Per fare il webhook abbiamo bisogno di due informazioni, il TOKEN del bot che avete salvato all’inizio e l'URL dell'App web ottenuto dopo la pubblicazione dello script.
occorrerà scrivere nel vostro browser qualcosa del genere in cui dovrete appunto sostituire al {TOKEN} quello ottenuto da botfather e a {WEB_APP_URL} il link di pubblicazione dell'App dello script.
Il browser vi restituirà un messaggio di ok ed il gioco è fatto
Non resta che andare su vostro canale telegram e inserire il comando /start in seguito il comando del segno zodiacale (per esempio /ariete) e divertirvi.

Comments