Twitter Search API ile tweet analizi nasıl yapılır?

Zafer Ayan
6 min readFeb 17, 2020

--

Birkaç gün önce Twitter’da yazılımcı maaşlarının adil bir şekilde dağıtılması ve bu konuda şeffaflık sağlanması amacıyla #KnowYourWorth hashtag’i ile bir akım başlatılmıştı. Hashtag’in yer almadığı tweet’ler için ise 🏫 ⏳ 🏷 🌎 💸 karakterleri kullanılarak arama yapılabiliyordu. Paylaşılan tweet’ler, yapı itibarıyla 5 ikonlu halde yer almaktaydı. Ben de bu tweet’leri birkaç araç yardımıyla toplayıp temizleyerek, bir google sheets dosyası ürettim. Bu yazımda, hangi aşamalardan geçerek tweet analizi yaptığımı ele alacağım.

Twitter developer hesabının oluşturulması

Normalde Twitter Search API’nin kullanılabilmesi için apps.twitter.com üzerinde bir uygulama oluşturulması gerekiyordu. Ama artık developer.twitter.com üzerinden bireysel geliştirici hesabı oluşturmanız gerekiyor ve süreç biraz daha detaylandırılmış durumda. Bu sürecin detaylarını ele alacağım. Eğer halihazırda bir uygulamanız varsa twurl CLI aracının kullanımı başlığına gidebilirsiniz.

İlk adımda Twitter geliştirici araçlarını hangi amaçla kullanacağınız soruluyor. Araştırma yapacağımız için Research kısmını seçerek diğer adıma geçebilirsiniz:

İkinci adımda kişisel twitter hesabınızla oluşturduğunuz geliştirici hesabını ilişkilendirmek için sizin gerçekten doğru kişi olup olmadığınız soruluyor. Burada da adımızı ve bulunduğumuz ülkeyi seçip diğer sayfaya geçiyoruz.

Üçüncü adımda Twitter API’yi hangi amaçla kullanacağımız soruluyor. Biraz detaylı bir form var. Ben aşağıdaki gibi doldurdum:

Dördüncü adımda ise doldurduğumuz bilgileri gözden geçirmemiz isteniyor. İnceleyerek devam edebilirsiniz.

Beşinci adımda geliştirici sözleşmesini okuyup kabul etmeniz gerekiyor.

Altıncı adımda ise twitter hesabınızla ilişkili e-posta adresinize bir doğrulama e-postası gönderiliyor.

Gönderilen linke tıkladıktan sonra geliştirici hesabınızın açılması için bir onay sürecine giriyor. 30dk 1 saat gibi bir sürede size e-posta yolu ile geri dönüş yapıyorlar. Daha sonra https://developer.twitter.com/en/apps üzerinden uygulamanızı oluşturabilirsiniz.

twurl CLI aracının kullanımı

Twitter’a bağlanmak ve tweet’leri çekmek için twurl aracını kullanabiliriz. Bu aracı kullanmak için RubyGems paket yöneticisinin sisteminizde kurulu olması gerekiyor. Eğer gem CLI’ı sisteminizde yüklü değilse downloads bölümünden indirerek yükleyebilirsiniz. twurl CLI’ını aşağıdaki komut vasıtasıyla yükleyebilirsiniz:

sudo gem install twurl

Daha sonra twurl’e hesabınıza erişim yetkilerini vermeniz gerekiyor. Bunun için uygulama ekranında Keys and tokens sekmesinde yer alan kısımdaki API key ve API secret key’i twurl’e aşağıdaki gibi verebilirsiniz:

sudo twurl authorize --bearer --consumer-key APIKey --consumer-secret APISecretKey

Bu komut çalıştırıldıktan sonra aşağıdaki gibi bir ibare ile tarayıcıda ilgili adrese gitmeniz istenecektir. O adrese giderek yetkiyi veriniz:

Sonraki sayfada 6 haneli bir kod görüntülenecektir. Bu kodu kopyalayıp komut satırında yapıştırınız. “Authorization successful” ibaresini gördüğünüzde yetki verme işlemi artık tamamlanmış demektir:

Deneme yapmak için aşağıdaki komutu kullanabilirsiniz:

sudo twurl /1.1/statuses/home_timeline.json

Bu komut, timeline’daki son 20 adet tweet’i getirecektir.

Şimdi yazılımcı maaşları tweet’lerini almak için search API’yi aşağıdaki gibi kullanalım:

sudo twurl --bearer "/1.1/search/tweets.json?tweet_mode=extended&max_id=0&count=100&q=🏫 ⏳ 🏷 🌎 💸" > tweet.json

Komutu açıklayalım:

  • --bearer: uygulama bazlı olarak bearer token’ı kullanmak için bu parametre kullanılır.
  • tweet_mode=extended: tweet metninin tamamının elde edilmesi içindir.
  • max_id=0: Belirli bir id’deki tweet’ten daha önceki tweet’leri almak içindir. Tweet listesi maksimum 100'er setlerde çekildiği için, maxId ile bir önceki 100'lük seti getirmek için kullanacağız. Yani bir çeşit sayfalama gibi düşünebilirsiniz.
  • count=100: 100 adet tweet getirilmesi içindir.
  • q: Sorgulanacak karakterler burada belirtilir. Maaş tweet’lerinde hep 5 emoji kullanıldığı için parametre olarak bunları veriyoruz.

Komut çalıştıktan sonra uzun bir JSON cevabı dönecektir. Bu JSON verisini jq komut satırı aracıyla işleyebiliriz.

jq CLI kullanımı

jq komut satırı aracı, JSON verisinin işlenmesi için kullanılır. En basit haliyle aşağıdaki gibi yazılır:

jq '.' tweet.json

Bu komut, tweet.json dosyası içerisindeki JSON’ı alarak kodu formatlar ve renklendirerek okunabilecek hale getirir. jq ile JSON dosyasından istediğimiz alanları çıkarabiliriz. Bunun için aşağıdaki şekilde kullanabiliriz:

jq '[
.statuses[] |
{
id: .id,
text: .full_text,
created_at: .created_at,
url: .entities.urls[].url,
name: .user.name,
screen_name: .user.screen_name
}
]' tweet.json

Üstteki komut, tweet.json dosyası içerisindeki JSON kodunda yer alan statusesarray’inin içerisinde yer alan tweet’lerin ilgili bilgilerinin alarak yeni bir array haline getirir:

Şimdi tüm tweet’lerin 100'erlik gruplar halinde çekilerek dosyalara yazılmasına gelelim:

Kodu açıklayalım:

  • maxId : Bu değer sayfalama için kullanılacak ve hep bir önceki 100 tweet’in getirilmesimi sağlayacaktır. 0 olduğunda en son hangi tweet’ler atılmışsa onları getirir.
  • tempUrl : bir önceki 100 tweet için uygun linki tutar.
  • for i in {1..100} : 100 defa arka arkaya bir önceki 100 adetlik tweet listesinin getirilmesi için kurulan döngüdür.
  • tempUrl= : $maxId değişkeni kullanılarak uygun url oluşturulur.
  • maxId= : twUrl ile istek göndererek jq komutu ile parse ettikten sonra ilgili JSON kodunu text$i.json biçiminde dosyaya yazar ve tweet’ler arasında en küçük ID’nin bulunması için jq 'min_by(.id).id komutu kullanılarak maxId’ye atanır.
  • maxId=$(($maxId — 1)) : Bu komut, maxId’nin bir eksiğini alarak sonraki listede son tweet’in dahil edilmemesini sağlar.
  • echo $maxId : Sonraki maxId’nin değerini ekrana yazar.

Döngü bir süre sonra sürekli aynı tweet’i dönen 500byte’lık bir dosya üretmeye başlayabilir. Bu noktadan sonra Ctrl+C ile komutun çalışmasını kesebilirsiniz.

Komutun çalışması tamamlandığında tweet1.json, tweet2.json gibi onlarca dosya üretecektir. bu dosyalardan tek bir dosya elde etmek için aşağıdaki komutu kullanabilirsiniz:

cat *.json > all.json

Daha sonra all.json içerisinden tweet metinlerini almak için aşağıdaki gibi grep’i kullanabiliriz:

cat all.json | grep '🏫' > step1.txt

RT ile başlayanlar retweet olduğu için bu satırları dosyadan çıkarmamız gerekiyor. Bunun için sed aracını aşağıdaki gibi kullanabiliriz:

sed '/^    "text": "RT/ d' step1.txt > step2.txt

Şimdi “text” ile başlayan ve bina emojisine kadar devam eden kısımları silmek için aşağıdaki gibi kullanabiliriz:

cat step2.txt | grep -Eo '🏫.+' > step3.txt

Satır sonlarındaki t.co linklerini de aşağıdaki şekilde silmemiz mümkün:

sed 's/https:\/\/t.co\/[a-zA-Z0-9]*",//g' step3.txt > step4.txt

Şimdi tekrar eden satırları silmek için önce sort ile sıralayalım ve -u parametresiyle sadece unique satırların alınmasını sağlayalım:

sort -u step4.txt > step5.txt

Daha sonra step5.txt dosyasının içeriğini kopyalayıp sheets.google.com üzerinde yeni bir dosya oluşturup içerisine yapıştırabilirsiniz. Yapıştırdığınız anda aşağıdaki gibi bir yapıştırma panosu ikonu çıkacaktır. Bu panoya tıklayarak çıkan menüden Split text to columns’u seçerek A kolonunun diğer kolonlara ayrıştırılmasını sağlayabilirsiniz:

Custom delimeter seçerek aşağidaki gibi \n karakteri için ayrıştırma yaparak dosyaya son halini verebilirsiniz.

Sonuç olarak

Bu yazıda, twurl ve jq gibi CLI araçlarını kullanarak kısa sürede tweet bilgilerinin alınması ve ayrıştırılması işlemlerini gerçekleştirdik. Siz de dilediğiniz konuda benzer şekilde veri çıkarımını yapabilirsiniz.

Bana destek vermek için alkış simgesine tıklayabilirsiniz.

Sonraki yazımda görüşmek üzere..

--

--

No responses yet