
Bot için 3 tane kütüphaneden yararlanacağız.
- Twit (https://www.npmjs.com/package/twit)
- Node-cron (https://www.npmjs.com/package/node-cron)
- Express (https://www.npmjs.com/package/express)
npm init -yile projemizi yayınlayım. Daha sonra yukarıda değinmiş olduğum kütüphaneleri projemize kuralım ve devam edelim.
Şimdi sırada twitter api oluşturma kısmı var. Bunu anlatmayacağım. Çünkü internette ufak bir araştırma yapsanız bile birçok sonuç ile karşılacaksınız. Çok kolay bir şekilde api oluşturabilirsiniz. Api oluşturduktan sonra projemize config.js adında bir dosya ekleyelim ve buraya api keylerini ve tokenlerini yazalım. Dosyamız şu şekilde olacak.
module.exports = { consumer_key:'XXXX', consumer_secret:'XXXXXXXX', access_token:'XXXX-XXXXX', access_token_secret:'XXXXX'}XXX yazan yerleri kendi değerlerinizi yazmayı unutmayın.
Şimdi sırada index.js ile botu yazmaya geldik. Bunun için projemize kurmuş olduğumuz kütüphaneleri ve config dosyamızı import edelim.
const twiti = require(twit);şeklinde config dosyamızı twit kütüphanesi ile bağlayalım.
const twit = new twiti(config);
let params = { q: 'evleniyorum', count: 15, result_type: 'recent',}twit.get('search/tweets', params, (err, data, response) => { let tweets = data.statuses var sayac = 0; for (let dat of tweets) { let username = dat.user.screen_name let tweetID = dat.id_str let reply = dat.in_reply_to_status_id_str if (!err && reply === null && sayac === 0) { twit.post('statuses/update', { status: `@${username} Düğününde dijital davetiye oluşturmaya ne dersin? Hemen örnek bir davetiyeyi incele: davetiyem.co/damatgelin . Seni aramızda görmekten mutluluk duyarız.`, in_reply_to_status_id: tweetID }, (err,data) => { if(err) { console.log("error") } else{ sayac = 1; console.log(`sayac : ${sayac} degeri bu ve ${username} tweet atıldı`) console.log(username + ' tweeted!') } }) twit.post('favorites/create', { id: tweetID }, (error, dataa) => { if(error) { console.log('CANNOT BE FAVORITE... Error'); } else{ console.log('FAVORITED... Success!!!'); } }) } }})Burada params içerisinde;- q: istediğim kelimeyi içeren tweetleri çekiyorum
- count : buraya kaç tane tweeti çekeceğimi belirtiyorum
- result_type: gelen sonuçların hangi tipte olduğunu belirtiyorum
Buradaki mantıktan bahsedecek olursam. İlk önce istediğim tweetleri çekiyorum ve içerisinde kontroller yapıyorum. Tweetin cevaplanmış veya rt olmamış tweet olmasını ve sadece bir tweete cevap atması için kontrollerini sağlıyorum. Eğer bunları uyuyorsa o tweete cevap atmayı ve o tweeti beğenmesini istiyorum. Genel itibari ile böyle çalışıyor.
Peki express ve node-cron kütüphanesini neden kullanıyorum? Projeyi heroku ile ayağa kaldırıp sürekli çalışır halde olmasını istiyorum. O yüzden express ile web çatısı kuruyorum. / adresine yönlendirdim ve 20 dakikada bir çalışması için node-cron kullandım. Çünkü sürekli tweet atarsam twitter bir süre sonra belli bir süreliğine engelliyor ve tweet atamıyorsun. O yüzden node-cron ile 20 dakikaya ayarladım. Böylelikle 20 dakikada bir tweeti arayıp varsa yeni bir tweet, o tweete cevap ve beğeni atıyor. Böylelikle sistem sorunsuz bir şekilde çalışıyor.
Projeyi aynı zamanda açık kaynak olarak paylaştım. https://github.com/berat/twitBot adresinden projenin kaynak kodlarını ulaşabilir ve starlayabilirsiniz
Takip etmeyi de unutmayalım 
Konunun orijinal adresi: https://medium.com/@beratbozkurt/node-js-ile-twitter-bot-yapmak-b16faacdd859