giovannitranquillini / filmfeed

a telegram bot to be updated about film upcoming and now playing in cinemas
1 stars 0 forks source link
expressjs nodejs telegraf telegram tmdb-api

FilmFeed

Cos'è?

FilmFeed è un bot di telegram che fornisce varie informazioni sul mondo del Cinema per il panorama italiano. Le funzionalità principali mostrano i film in arrivo /upcoming, i film attualmente in sala /nowplaying e permette di ricercare uno specifico film con /search o @filmfeedbot.

FilmFeed è scritto interamente in JavaScript con Node.js, si basa su Express.js e telegraf.js, un framework per bot di Telegram.

Tutte le informazioni relative ai film sono ottenute tramite il servizio API di TMDb

Prerequisiti

Usare il bot in locale

In locale (da bash):

    npm install

Usare il codice relativo al polling e non alle webhook:

// webhook
//app.use(bot.webhookCallback('/' + TELEGRAM_TOKEN));
//bot.telegram.setWebhook(HEROKU_APP_URL + TELEGRAM_TOKEN);

...

// polling
bot.startPolling();

Creare un file config-local.js: copiando la struttura di config.js, aggiungere in chiaro i dati riguardanti le chiavi per le API di telegram e TMDb, altrimenti, da bash, creare direttamente in locale le variabili d'ambiente impostando il valore delle chiavi.

Eseguire il bot

    node index.js

( per implementare e testare le nuove feature suggerisco l'uso di un bot apposito, in modo da mantenere sempre attivo il bot principale )

Deploy del bot

Il deploy di FilmFeed è stato fatto su Heroku.

Per farlo dovete accertarvi di avere il Procfile all'interno del vostro progetto. Potete aggiungere direttamente su Heroku le variabili d'ambiente in "la vostra app" > Settings > Config Vars ( in questo caso sarà neccessario anche salvare in URL l'url della nostra applicazione, che ci verrà fornito da heroku )

config vars

Per permettere lo scambio di informazioni fra il nostro bot e Telegram useremo delle webhook, il codice necessario è il seguente e si trova nel file app.js

// webhook
app.use(bot.webhookCallback('/' + TELEGRAM_TOKEN));
bot.telegram.setWebhook(HEROKU_APP_URL + TELEGRAM_TOKEN);

Una volta fatto il deploy su Heroku, se il package.json e il Procfile sono presenti e scritti correttamente, lo stesso Heroku si arrangerà ad eseguire il codice.

Il deploy può essere fatto da console scaricando la Heroku CLI o da Github collegando all'applicazione su Heroku la repo su Github e aggiornando da Heroku ("la mia app" > Deploy).

Risorse utili

Comandi del bot

/nowpalying: recupera i dati riguardanti i film in sala in questo momento, li restiutisce all'utente. Se il film è uscito da meno di 2 settimane viene aggiunto il badge 🆕.

/upcoming: recupera i dati riguardanti i film in arrivo, li riordina in ordine crescente di data e li restituisce tramite messaggio.

/search: aggiungendo del testo dopo il comando /search, è possbile cercare uno specifico film ( esempio: /search inception )

/chooseforme: è un'idea da implementare in futuro, questo comando dovrebbe permettere di consigliare l'utente tramite la ricerca di un insieme di film con determinati parametri (voto, data di rilascio, genere, ...)

@filmfeedbot: simile a /search nello scopo, questo comando sfrutta la inline mode per cercare un film

Altre funzionalità:

Visualizzazione di una scheda descrittiva da browser sotto il path /info. La richiesta HTTP verrà gestita da express che caricherà un file .ejs e i dati del film. All'url viene applicata una query con attributo id che dovrà contenere il valore dell'id del film.