Membuat Bot Twitter Di NodeJS

Saya tahu akhir-akhir ini saya agak pendiam, saya cukup banyak istirahat dari coding tentang Chanukah. Jadi tadi malam saya berpikir bahwa alih-alih mengambil bagian dalam “tradisi Yahudi kuno yang menikmati masakan Cina terbaik” saya akan tinggal di rumah dan mengerjakan proyek yang ingin saya jelajahi; menulis bot Twitter.

Saya memilih sesuatu yang sederhana untuk memulai. Siapapun yang memiliki mobil di New York City pasti tahu betapa sakitnya Alternate Side Parking (ASP). Pada hari-hari tertentu dalam seminggu, kita tidak diperbolehkan memarkir kendaraan kita di sisi jalan tertentu selama satu setengah jam. Pada saat yang ditentukan, sepasukan burung nasar berseragam biru turun ke kota dan setiap mobil yang pemiliknya terlambat beberapa menit saja untuk bergerak, akan dihiasi dengan amplop oranye berisi denda yang mahal.

Untungnya, ada beberapa hari sepanjang tahun (terutama hari libur resmi dan hari-hari setelah badai salju besar) di mana kita mendapat penangguhan hukuman. Saya memutuskan untuk membuat bot yang dapat mengirim tweet pada hari-hari itu.

Faktanya adalah NYC sudah memiliki akun Twitter yang men-tweet status ASP (“@NYCASP”), namun akun tersebut men-tweet setiap hari tentang statusnya. Saya tidak ingin feed saya berantakan pada hari-hari ketika peraturan ASP berlaku (yang hampir selalu terjadi), jadi saya pikir saya akan menulis bot yang akan mengikuti @NYCASP untuk saya dan me-retweet hanya pada hari-hari ketika ASP peraturan ditangguhkan.

Untungnya ada paket Node bernama twit yang menyediakan klien API Twitter yang cukup mudah digunakan.

Untuk menyiapkan bot, saya menggunakan "tutorial hebat ini" yang ditulis oleh teman saya dan sesama lulusan Flatiron School, Ben Greenberg. Jika Anda ingin membuat bot Anda sendiri, saya sarankan untuk mengikuti postingannya untuk pengaturan awal, serta petunjuk cara menerapkan ke Heroku sehingga bot Anda dapat ditayangkan. Pada postingan kali ini saya hanya akan menjelaskan bagaimana saya membuat bot itu sendiri.

Pada akhirnya, bot saya terlihat seperti ini:

const twit = require('twit');
require('dotenv').config()                                              
const config = {
    consumer_key: process.env.consumer_key,
    consumer_secret: process.env.consumer_secret,
    access_token: process.env.access_token,
    access_token_secret: process.env.access_token_secret
}
const Twitter = new twit(config)
const userID = "102773464"
const stream = Twitter.stream('statuses/filter', {follow: [userID]})
stream.on('tweet', function (tweet) {
    if(tweet.text.includes("suspended")) {
        retweet(tweet.id_str)
    }
})
const retweet = function(id) {
   Twitter.post('statuses/retweet/:id', {id: id}, function(err,res){
      if(res){
         console.log("Successfully Retweeted")
      } else {
         console.log(error.message)
      }
   })
}

Di baris pertama saya mengimpor paket twit, lalu saya menentukan konfigurasi yang diperlukan agar bot saya dapat memposting. Saya menyembunyikan kunci rahasia di variabel lingkungan yang saya akses menggunakan dotenv.

Saya kemudian mendefinisikan beberapa variabel: variabel Twitter untuk instance twit baru menggunakan konfigurasi saya, variabel userID yang menyimpan ID Pengguna akun Twitter @NYCASP, dan terakhir, saya membuka twit stream yang mendengarkan semuanya aktivitas yang terkait dengan akun twitter @NYCASP.

Sekarang setelah streaming saya berjalan, saya melampirkan pendengar acara ke aliran yang mengaktifkan fungsi panggilan balik setiap kali tweet ditambahkan ke aliran. Fungsi tersebut melihat teks tweet, dan jika berisi kata "suspended", fungsi tersebut akan mengaktifkan fungsi lain yang me-retweetnya.

Cukup sederhana kok!

Sekarang yang tersisa hanyalah menerapkan ke Heroku dan menunggu pagi Natal dan melihat apakah bot saya akan me-retweet penangguhan pagi itu:

Jackpot! Itu berhasil!

Jika Anda warga New York yang ingin mengikuti bot saya, Anda dapat menemukannya di @AlterSideBot