Dopo mesi di astinenza ho ripreso in mano l’IDE per fare qualcosa di produttivo… Ovviamente, “io ho rispetto per tutti ma non sono un programmatore, tantomeno di merda” (cit), quindi direi che il modo in cui l’ho fatto NON vada preso ad esempio.
Ma funziona e risolve il mio problema, quindi tanto basta. Se volete qualcuno che vi insegni a programmare, andate qui. No, senza ironie, è lui che mi ha aiutato.
Il problema
Ok, bene, ho un canale Telegram che pubblica news e voglio che siano ripubblicate su Twitter. Non so, ad oggi, cosa potrà fare quel bot, sto scrivendo l’articolo a fine aprile e magari nel frattempo la Lombardia è diventata indipendente e il sistema è anche collegato al televideo nazionale che esegue l’inno solenne con l’immagine del Celeste, boh, ma intanto fa quello.
Ho provato, all’inizio, con IFTTT, ma c’è un problema, anzi, due:
- Il canale su Telegram si chiama in un modo, quello su Twitter in un altro, peccato che ogni messaggio abbia il tag di Telegram in coda
- Ogni giorno, per il Covid, pubblico (spero pubblicavo, o magari siamo finiti in default e davvero la Lombardia ora è uno stato, boooh?! Se ora pubblico su scikingpc.lmb forse lo sapete meglio di me, o magari c’è stata la sesta ondata grazie alla variante di Bussolengo e pubblico ancora dal bunker nucleare… Chissà…) un lungo “sunto giornaliero” che preferisco spezzettare in più messaggi.
Ora, IFTTT ammette dei filtri, ma vogliono i soldi. Siccome ho un server che mi costa un cinque euro di corrente l’anno, ho deciso di usarlo invece di pagare qualcun altro.
E quindi, dopo un po’, son giunto all’idea di base, ossia:
- Chiamata alle API Telegram
- Smandruppamento per emilinare i tag di Telegram, tagli e così via
- Pubblicazione su Twitter
Le API Telegram
Con Telegram ho già avuto a che fare, ma sempre attraverso librerie. Siccome ciò che mi serviva ora era banale, invece, ho usato direttamente Requests, così da non dover caricare troppe librerie.
L’elaborazione del risultato, ovviamente, l’ho gentilmente copiata da StackOverflow (mi merito un punto programmazione?!) cambiando solo alcune cose, il tutto con un processo di ingegneria inversa sull’output.
Cioè mi ero rotto il cazzo di leggere la documentazione e ho preferito vedere i casi presenti e agire di conseguenza. L’ho detto che sono un pessimo programmatore, no?
Ecco, così il codice arriva a funzionare decentemente, includendo cose come postare anche contenuti presi da post editati o con foto.
Il tutto con una serie impressionante di try-catch. L’ho detto che sono un pessimo programmatore, no?
Vabbè, starà pur insieme con lo sputo, ma funziona. Ed ecco lo smandruppamento…
Il cuore dell’applicazione
Ecco, il cuore dell’applicazione, ossia quello che elabora i testi per mandarli su Twitter. Al momento in cui scrivo, sicuramente verrà cambiato più avanti, funziona così:
- Controlla che l’ultimo messaggio (diventerà più un while simile, non l’ho ancora implementato perché non mi è servito) sia meno vecchio di 5 minuti (dato che il programma è crontabbato ogni 5 minuti)
- Controlla che non sia un post da non pubblicare (come gli editoriali e le comunicazioni)
- Se pubblicabile, controlla che non sia il sunto
- Se non lo è, elimina il tag, toglie eventuali spazi residui, twitta e mi avvisa su Telegram
- Se è il sunto, elimina la prima riga (che dice “ecco il sunto di oggi, in pratica), l’ultima con il tag, toglie gli spazi residui e dividi ogni messaggio in un tweet singolo e avvisami
Più avanti ci metterò un sostitutore di parole note con username, del tipo “El Salvini l’ha did” diventerebbe su Twitter “el @matteosalvinimi l’ha did”, ma non è prioritario, inoltre anche un “limitatore” che, se il tweet supera i 240 caratteri, lo taglia e mette un link a Telegram sarebbe auspicabile. Comunque, non urgente. Alla fine, ci ho messo due giorni a farlo e la parte più difficile è stata aspettare Twitter…
La parte Twitter
Twitter, invece, ho scelto di gestirlo con una libreria, dato che la procedura di login mi annoia. Dopo aver avuto un accesso da dev (mai garantito quando mi serviva per l’università [**] ma garantito subito ora, sarà che non analizzo dati con questo account…), che su Twitter va chiesto motivandolo, inizio a lavorare ed è davvero semplice.
Realmente, basta copiare il codice di login e usare la funzione per twittare. Davvero facilissimo.
Possibili problemi
L’app è sicura, nel senso che verifica che i messaggi arrivino da un canale autorizzato, ma potenzialmente vulnerabile a DoS. Infatti, finché non la modifico con un ciclo while (cosa che farò, ma l’articolo lo scrivo prima così da lasciare una traccia a eventuali programmatori in erba), leggerà solo l’ultimo messaggio e basterebbe teoricamente che qualcuno spammasse al bot perché non possa ricevere messaggi legittimi. È un problema che risolverò ma che non ritengo urgente per un semplice fatto: STO, ossia sicurezza tramite segretezza. Nel momento in cui la sicurezza principale è garantita (nessuno può inneggiare alla liberazione del Wanton Fritto tramite il mio Twitter) la sicurezza secondaria è relativamente meno urgente ed è possibile mettere prima online il bot è poi renderlo più resistente.
[**] Ma a che cazzo ti serviva per l’università?
Storia divertente, legata al corso di programmazione web. Tra le varie attività proposte, infatti, c’era proprio quella di un sistema basato sull’analisi di dati su Twitter.
Volevo fare, in principio, un generatore casuale di tweet di politici con le markov chain, tuttavia mi sono reso conto che per quando divertente il valore didattico poteva essere relativamente basso. E poi ci pensano già i politici a generare abbastanza stronzate di loro.
Decisi poi di passare a un analizzatore che, da una dichiarazione, avrebbe potuto capire chi l’aveva detta. A parte una sospettosa somiglianza tra i tweet di Salvini e Speranza (a proposito, Salvini è stato rimosso da Giorgetti? E Speranza è ancora vivo o i ristoratori infuriati per i ristori l’hanno mangiato tipo Jan de Witt? O magari dopo il default è diventato premier? Bah), bello, ma Twitter continuava a non autorizzarmi e di copiare i tweet a mano non è che avessi voglia.
Così ho usato Wikipedia e ho fatto un classificatore dialettale bayesiano.
Pingback: crontab e variabili d’ambiente: cosa guardare se un programma smette di funzionare improvvisamente – Computer Blog
Pingback: Bestemmie con le emoji in Python – Computer Blog
Pingback: Il nuovo inoltro di Lombardia Incoeu – Computer Blog