source. Rispetto alla concorrenza si differenzia per alcune particolari features: ➔ Chat segrete: messaggi cifrati con autodistruzione. ➔ Gruppi e Super-gruppi. ➔ Multipiattaforma, basato su Cloud.
un utente “umano” può scambiare ed inviare messaggi. I bot di telegram possono offrire svariate funzionalità: ➔ Inviare/ricevere media ➔ Possono essere fornite di IA ➔ Possono essere usati nelle chat di gruppo I bot sono riconoscibili dai propri nickname, avranno sempre la parola bot alla fine del nome.
messaggi semplici oppure lanciando dei comandi seguiti dal carattere speciale “/”. Comandi standard ➔ /start per avviare il bot ➔ /stop per arrestare il bot ➔ /help informazioni di utilizzo Comandi per bot nei gruppi ➔ @nome_bot [messaggio semplice] ➔ /comando@nome_bot [messaggio]
ricerca via Google, effettuando ricerche sul web usando soltanto il client Telegram. Inviando un messaggio al bot con la parola o frase che abbiamo intenzione di cercare, il bot inoltrerà la richiesta a Google. Riceveremo come risposta dei messaggi contenenti link e descrizione della ricerca fatta.
ciò che ci serve direttamente dall’HTML fornitoci da Google ➔ Approccio 2: JSON ◆ Le API fornite da Google sono inviate in un formato “parsabile” da più linguaggi di programmazione.
permettono di personalizzare la ricerca in base alle proprie necessità, in questo caso useremo una tra le più semplici. Basta fare una richiesta GET al link seguente seguito dal termine che si vuole cercare: http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=TERMINE+DA+CERCARE
in Google nel 2009. É stato creato per rispondere alle moderne esigenze degli sviluppatori: ➔ brevi tempi di compilazione. ➔ performante su tutti i calcolatori. ➔ soddisfa le necessità attuali della programmazione concorrente. ➔ ha un Garbage collector
la funzione Marshal. Una volta definita la struttura da codificare, produciamo una sua istanza e la convertiamo in stringa JSON usando json.Marshal(istanza).
la funzione Unmarshal. Una volta definita la struttura da codificare e la stringa Json da trasformare in istanza basta invocare json.Unmarshal(stringa, riferimento), passando come parametri la stringa ed il riferimento dell’istanza da popolare. Basterà passare il riferimento della variabile lista per popolarla con i valori contenuti nella jsonString
l’URL delle API di Google. Come abbiamo visto, sappiamo che la risposta a questa richiesta sarà una stringa JSON che dovremo poi convertire in una struttura dati usando il metodo Unmarshal.
la variabile searchResults conterrà i risultati della ricerca Google effettuata, possiamo manipolarla come meglio vogliamo. searchResults.ResponseData.Results conterrà i risultati della ricerca. Adesso siamo in grado di ricevere risposte Google usando un programma Go.
la creazione di altri bot telegram. Per creare un nuovo bot basta aggiungere BothFather su telegram come @BotFather e creare un nuovo bot tramite il comando /newbot. Riceveremo l’API KEY, necessaria per far comunicare il nostro bot con Telegram.
il bot alle API di Telegram, occorre un procedimento simile a quello che abbiamo appena visto per effettuare la ricerca Google. ➔ Registrazione del bot usando nome del bot e API key ➔ Scambio di messaggi usando le API di telegram (sempre in formato JSON) utilizzeremo una libreria già scritta: github.com/cortinico/telebot
➔ Configuration: variabile contenente i parametri di accesso ➔ Il tipo Responder è una funzione che restituisce una coppia di valori ◆ Responder: funzione che gestisce messaggi ricevuti e da inviare
complete e sofisticate di quella presentata qui ➔ C’è un limite imposto da Google per il numero di ricerche che è possibile fare ◆ per superare questo limite bisogna pagare ➔ Questo bot gira in una macchina locale ◆ una volta spenta, il bot non sarà più operativo ➔ Go presentata molte altre caratteristiche non presentate qui Per questo e molto altro ancora, ci affidiamo alla vostra curiosità ;-)
Google ◦ Permette l’esecuzione di VM predefinite o customizzate ◦ Storage su SSD, connessioni in Fibra, Global load balancing ◦ Ottimo per applicativi CPU Intensive
Google ◦ Fully managed ◦ Scala su richiesta ◦ Si deploya il codice, AppEngine deciderà quante/quali istanze avviare ◦ Ottimo per applicativi che possono avere picchi di richieste nel tempo (ad esempio un Bot di telegram…)
Relazionale • Cloud Storage Archivazione di file grossi • Mem Cache Caching di dati globali • Authentication Login degli utenti tramite Google Auth • Task Queues Esecuzione asincrona di task futuri • Logging Scrittura di Log • Urlfetch Esecuzione di chiamate HTTP • Mail API Invio di email • Security Scanner Ricerca di vulnerabilità nella propria applicazione
Non si può scrivere sul filesystem! ◦ Non si può “rispondere lentamente” ◦ Non si possono effettuare system call The Go runtime restricts the use of standard library packages that would violate the sandbox policies. Such functions have been replaced by stubs that return an os.ErrPermission error or removed entirely. From https://cloud.google.com/appengine/docs/go/runtime
in una cartella (/home/gopher/appengine) 3. Imposta la variabile d’ambiente PATH $ export PATH=$PATH:/home/gopher/appengine 4. Assicurati di avere Python 2.7 (Lo SDK è scritto in parte in Python) $ /usr/bin/env python -V Python 2.7.10 5. Siete pronti per sviluppare per App Engine in Go!
◦ Un wrapper del comando go (goapp build, goapp run, ...) ◦ $ goapp help [topic] Ottiene aiuto su un comando ◦ $ goapp serve Esegue un development environment locale ◦ $ goapp deploy Deploya l’app su AppEngine
semplicemente Go • api_version: go1 È disponibile solo una api_version (per ora…) • handlers: … Definisce l’elenco degli endpoint • application: my-app-id L’application ID da cloud.google.com • version: v1 La versione dell’applicazione, per supportare versioni multiple dell’app
Telegram ◦ Implementa il Long Polling (con timeout) ◦ Perfetto per testare il bot ◦ Funziona in ogni circostanza (dietro NAT, etc…) ◦ Non necessita di configurazioni particolari (firewall, etc…)
Telegram ◦ Riceve i messaggi con una logica push ◦ Si fornice l’URL dove si riceveranno delle POST per ogni messaggio al bot ◦ Richiede un certificato SSL ◦ Se si usa un certificato self-signed, deve essere passato come parametro
per come è pensata la piattaforma (esegui codice su richiesta HTTP). ◦ Ci permette di risparmiare risorse ◦ Il certificato SSL viene offerto gratuitamente da Google
(altrimenti inutilizzabile su GAE) ◦ Scrive sul log di App Engine ◦ Per l’utente è molto simile a telebot ◦ Espone l’oggetto http.Response, necessario per accedere alle funzionalità di App Engine (context)
nuovo bot con @BotFather 3. Copiamo la cartella bot_example/ da github.com/cortinico/telebotgae/ 4. Mettiamo il project ID dentro il file app.yaml 5. Mettiamo l’API Key e il nome del bot nel file hello.go 6. Scrivi la logica del bot nel file hello.go 7. Deploya con $ goapp deploy 8. Ricordati di chiamare setWebhook