Twarc2 ile Tweet Çekme: Akademik Erişim

Baştan uyarı: Bu metin tam anlamıyla comprehensive bir yazı değil. Üstünkörü geçtiğim yerler olacak, ama buralara da uygun yönlendirmeleri bırakacağım. Yazının hitap ettiği kitle ise akademisyenler. 


2021 yılının başında Twitter'dan Jack arkadaşımız sağolsun akademisyenleri düşündü ve 'academic track' diye bir kullanım açtı. Bu sayede artık sadece parası kaynağı bol olan üniversiteler değil, sen ben gibi sıradan araştırmacılar da Twitter'dan 2006 yılına ait 10 milyon tweet çekebiliyoruz bütün datasıyla beraber. Şimdi aylık tweet çekme limitimiz 10 milyon mesela. Dakikalık ve 15 dakikalık limitlerimiz de daha yüksek üstelik. Yani 15 Temmuz gecesine ait bütün tivitleri hızlıca toplamak istiyorsunuz mesela, ya da 2015-2018 yılları arasında 'Berat Albayrak' geçen tivitleri çekmek istiyorsunuz. Bu durumda akademisyen developer hesabı açmanızı tavsiye ediyorum. 

Biraz klişe ama: önce bir Twitter Developer hesabı açmanız lazım. Birtakım yönergeleri bununla alakalı şurada bulabilirsiniz. Temelde Twitter sizin gerçekten bir akademisyen olduğunuzu anlamaya çalışıyor. Bunun için varsa Google Scholar sayfanız veya üniversitenin websitesinde sizin adınıza açılmış bir sayfa işleri kolaylaştırıyor. Ayrıca, nasıl bir akademik araştırma için kullanacağınızı da belirtmeniz gerekiyor. Başvuruyu yaptıktan sonra genelde 3-5 gün içerisinde sınırlanıyor.

Bu yazıda esas anlatmak istediğim ise twarc2. Muazzam bir araç geliştirmişler. Önce diğer programlarla kıyaslıyayım.

Eğer R kullanıcısıysanız daha önceki yöntemlere aşina olabilirsiniz: rtweet gibi. Fakat bu paket Twitter'ın geçen sene çıkarttığı, çok daha gelişmiş API V2'yi desteklemiyor. R'da yeni academic access'e uyumlu yeni bir paket var: academictwitteR. Bu da henüz yeni gelişmekte olduğu için sorunları var, bir de doğrusu çok bir online topluluğunu bulamadım. Ayrıca hala Twitter'dan çekilen JSON dosyasını dönüştürmekte problemler vardı en son denediğimde (2021 yazı).

Eğer Python kullanıcıysanız biraz daha şanslısınız çünkü Tweepy gibi advanced bir araç var halihazırda, ve API V2'ye uyumlu. Bu aslında gayet güzel bir paket, fakat şahsen Python syntax'ine çok alışkın olmadığım için hala sorunlar yaşıyordum.

Şimdi bahsedeceğim şey ise twarc2. Python kütüphanesi olarak da kullanılabiliyor, fakat esas olarak command line tool (kontrol paneli aracı?) olarak geliştirmişler bunu. Benim gibi yazılım işlerinden çok anlamıyorsanız kullanışı oldukça kolay bir araç.

Normalde tweet çekmek dertli bir iş. Her ne kadar Twitter API V2 parametreleri oldukça kapsayıcı olsa da, tweet çekmenin bu parametrelere göre yığınla ayarlaması var. Mesela time.sleep() veya benzeri fonksiyonları koyuyoruz normalde, böylelikle dakikalık kotalarımızı aşmayalım. Yahut Twitter API'sinden JSON şeklinde aldığımız dosyayı günün sonunda CSV'ye çevirmek gerçekten çok dertli çünkü kullanıcılar (user) unique veriliyor, tweet'ler unique veriliyor; bunların match edilmesi gerekiyor. Bu işleme flatten - düzleştirme deniyor. Ya da tweet çekerken sayfalarda ilerlemeniz gerekiyor (paginate), bunun için de detaylı kod yazmanız gerekebiliyor. Neyse detaylarda boğulmayalım. Özetle demem o ki twarc2 bu ayarlamaları bizim için yapıyor ve Twitter'dan bütün datayı çekiyor sizin ayrıca belirtmenize gerek kalmadan. Ne Tweepy ne AcademicTwitter ne de manuel kodlar - yaşasın twarc2!

Bu kadar övmemin bir diğer sebebi de neredeyse birkaç gün vaktimi aldı düzgün bir şekilde data çekmek, her seferinde bir yerlerde sorun yaşadım ve bu araç günün sonunda ilaç gibi geldi.

Çok uzattık, devam.

Öncelikle bilgisayarınızda python yüklü olması lazım. Değilse buraya alalım sizi.

twarc2'yi bilgisayarımıza yüklüyoruz. Bunun için terminali açıyoruz bilgisayarımızda ve aşağıdaki kodu yapıştırıyoruz:

pip install --upgrade twarc

Macbook kullanıcısyanız:

brew install twarc

Bundan sonrasındaki bütün kodlar terminal'e (kontrol paneline) yazılacak.

Twarc2'e, bizim developer account'ımızı kullanarak tweet çekebilmesi için bearer token'imizi veriyoruz. Token dediğimiz şey aslında bir nevi bizim unique Twitter developer ID'miz. Başta zikrettiğim gibi eğer developer hesabı açtıysanız, developer portal'a gidip giriş yaptıktan sonra, projenin altında BEARER TOKEN sekmesinde bulabilirsiniz bunu. Ondan sonra terminale tekrar gelip şunu yazıyoruz:

twarc2 configure
Enter'a bastıktan sonra bu kod bize BEARER TOKEN'imizi soracak. Twitter Developer Portal'dan kopyaladığımız tokenimizi yapıştırıyoruz buraya. Bu line ile birlikte aslında program dosyalarının arasına bizim Bearer Token'ımız kaydediliyor - böylelikle bir daha geri dönüp bakma ihtiyacı bile duymuyoruz.

Sonra basit bir arama ile ilk tweet çekmemizi yapalım. Son 7 güne ait, #sezaikarakoc etiketinde neler var diye hızlıca bakalım:

twarc2 search #sezaikarakoc --limit 300 tweet.jsonl

Bu kod ile #sezaikarakoc kelimesini içeren tweet'leri çekiyoruz. Küçük bir küme tutmak istediğimiz için maksimum tweet sayısını 300 ile sınırlandırdık.

Diyelim ki daha komplike bir arama yapmak istiyorsunuz. Bir örnek üzerinden gidelim.

twarc2 search --archive --limit 3000 --start-time 2021-10-01 --end-time 2021-11-01 '(#Dolar11TL OR #dolar10tl OR (dolar tl)) lang:tr -is:retweet' tweets.json


şimdi bu kodun neler yaptığını anlamaya çalışalım tane tane.

search, tweet arama komutu.
--archive, benim developer hesabımızın academic access'e sahip olduğunu belirtiyor.
--start-time hangi tarihten itibaren tweetleri aramaya başlamasını istediğimi söylüyor. 1 Ekim'den itibaren aramasını istedim mesela burada.
--end-time hangi tarihte aramayı bitirmesini istediğimi söylüyor. 1 Kasım'da bitirmesini söyledim. Ama zaten bu tarihe kadar gelemeyecek muhtemelen, çünkü limiti 3000'de kapattım. 3000 tweet çektiğimde, yani mesela 5-6 ekim gibi, komutu nihayete erdirecek.
bunlardan sonraki, kesme işareti içerisinde aldığım kısım ise query kısmı. Burada arama parametrelerinizi inşa edebiliyorsunuz. Bunun için bulduğum en advanced tool şu github sayfası. En beginner-friendly yöntem ise şu: Twitter Advanced Search kısmına gidin, burada kutucuklara istediğiniz filtremeleri yazın, sonrasında çıkan arama ekranından query'yi yapıştırın.
Bu query'nin biraz içeriğine değineyim. Yukarıdaki kod bana içerisinde #Dolar11TL veya #dolar10tl veya "dolar tl" geçen tweet'leri verecek. lang:tr diye belirttiğim için, sadece Türkçe tweetleri verecek. -is-retweet opsiyonu koyduğum için, retweet'leri vermeyecek. Bunu özellikle koymanızı tavsiye ediyorum. Yoksa mesela 10k kere rt edilmiş bir tivit için 10k satır alıyorsunuz.
En sondaki tweets.json kodu ise benim dosyayı hangi isim ve uzantıyla kaydedeceğimi söylüyor. O an hangi directory'de iseniz oraya kaydoluyor haliyle.

Yoruldum. Ama devam.

Yukarıdaki basit ya da komplike query'lerden birine göre tweet'leri arattınız ve günün sonunda tweets.json diye bir dosya elde ettiniz diyelim.

Fark ettiyseniz bu çok karışık bir dosya. Nested bir data çünkü. Ayrıca tweet'ler, user'lar, place'ler.. hepsi farklı farklı yerlerde. Bunların birbiriyle match edilmesi gerekiyor. Sağolsun twarc2 bunu da tek satırda hallediyor. Bu işleme flatten etmek diyoruz. Bildiğimiz klasik data formatına getirmeye yarıyor:

twarc2 csv tweets.json tweets.csv


Tebrikler! Artık başka programlara da kolaylıkla aktrabileceğiniz bir datasetiniz var! (Biraz İngilizce blog havası katayım dedim.)

CSV dosyasını çıkardıktan sonra ben genelde R'a geçiyorum, ama pekala siz Python'a import edip oradan devam edebilirsiniz analizlerinize.

Eğer büyük bir arama işine gireceksiniz, hangi gün o aramak istediğiniz parametrelere göre kaç tivit atıldığını önceden kontrol edin muhakkak. Çünkü mesela 100 milyon tweet atıldığını bulabilirsiniz konuyla ilgili, bu da sizin kotanızın çok üstünde kalabilir. Ya da çok az tivit atılmışsa aradığınız büyüklükte bir örneklem kümesine erişemeyebilirsiniz. Twarc sağolsun bunun için de bir yöntem geliştirmiş.

twarc2 searches --archive --start-time 2021-10-01 --end-time 2021-11-01 --counts-only query.txt tweet_counts.csv


Bu kod bana, bir önceki inşa ettiğim query'e göre hangi gün kaç tivit atılmış, csv şeklinde veriyor. Harika bir şey. Burada dikkat etmeniz gereken şey şu: Çalıştığınız directory'de query.txt diye bir dosya açıyorsunuz (farklı isim de olabilir tabi) - sonra buraya query'nizi yapıştırıyorsunuz. Tek satırda olması lazım.

Anlaşılmayan yerler olursa sormaktan çekinmeyin.

Eğer teveccüh olursa bunun application tarafında birkaç örnek de gösterebilirim. Ya da bu yamuk-yumuk metni biraz daha düzeltebilirim.

Yorumlar

Bu blogdaki popüler yayınlar

Kurumlar (Institutions) Yazı Dizisi 1

It’s gotta be true, because data says so

damn cycle of the internet