Node.js İle Twitter Bot Yapmak

Berat Bozkurt
2 min readJan 4, 2020

--

Photo by Reza Namdari on Unsplash

Hikayemde de bahsettiğim gibi, projemde twitter’da istediğim anahtar kelime ile tweet atan kullanıcalara manüel olarak tweet/dm atmak istemiyorum. Çünkü bu gerçekten zahmetli ve uzun bir süre gerektiren bir iş. Ben yazılımcı değil miyim? Neden bir tane uygulama yapıp benim yerime 15 dakikada bir bu işlemi yapmıyor? Başladım kolları sıvamaya :)

Bot için 3 tane kütüphaneden yararlanacağız.

Aslında sadece Twit kütüphanesi yetiyor ama ben sistemin sürekli çalışır durumda olmasını istediğim için Node-cron ve Express kütüphanelerini de projeye dahil ettim.

npm init -y

ile 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.

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’);

const twit = new twiti(config);

şeklinde config dosyamızı twit kütüphanesi ile bağlayalım.

Burada params içerisinde;

  • q: “istediğim kelimeyi içeren tweetleri çekiyorum”
  • count : buraya kaç tane tweet’i çekeceğimi belirtiyorum
  • result_type: ‘gelen sonuçların hangi tipte olduğunu belirtiyorum”

twit.get fonksiyonu ile search/tweets parametresine istekte bulunup istediğim tweetleri çektiğimi belirtiyorum. İçerisinde de bir kaç takım kontroller var. Eğer bu kontrolleri geçerse tweet atma ve beğenme işlemini gerçekleştiriyorum.

Buradaki mantıktan bahsedecek olursam. İlk önce istediğim tweetleri çekiyorum ve içerisinde kontroller yapıyorum. Tweet’in cevaplanmış veya rt olmamış tweet olmasını ve sadece bir tweet’e cevap atması için kontrollerini sağlıyorum. Eğer bunları uyuyorsa o tweet’e cevap atmayı ve o tweet’i 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 tweet’i arayıp varsa yeni bir tweet, o tweet’e 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 star’layabilirsiniz :) Takip etmeyi de unutmayalım :)

Bana twitter, instagram, mail adresimden ulaşabilirsiniz.

--

--

Berat Bozkurt