Bloğa geri dön

Python Kullanarak Twitter Verisi Çekme

Python Kullanarak Twitter Verisi Çekme

Twitter sadece genişletilmiş bir haber kaynağı değil, aynı zamanda dünyanın düşüncelerinin açık ara en iyi örneklerinden biridir. 330 milyondan fazla aktif kullanıcısıyla, insanların düşüncelerini paylaşmayı sevdiği en popüler platformlardan biridir. Twitter verileri, aşağıdakiler gibi çeşitli amaçlar için kullanılabilir: araştırma, tüketici içgörüleri, demografik içgörüler, ve çok daha fazlası.

Bu nedenle, bu eğitimin birincil amacı, projeniz veya işletmenizle ilgili bir Twitter veri örneğini nasıl elde edeceğinizi öğretmektir.

Devam etmeden önce, bu değişkenlerin tümünün elinizin altında olduğundan emin olun:

  1. Consumer Key
  2. Consumer Secret
  3. Access Token
  4. Access Token Secret

Yukarıda belirtilen detayları nasıl edineceğinizi öğrenmek istiyorsanız, şu yazıyı okuyun: meslektaşım Dattatray Upase tarafından yazılan blog yazısı.

Şimdi biraz kod yazalım!

Giriş değişkenlerini tanımlama

İlk olarak, program için ihtiyaç duyacağınız bazı genel değişkenleri tanımlamanız gerekir:

Şunu içe aktarıyorum: ‘sys’ komut satırı argümanlarını almak için, çünkü anahtar kelimeleri, başlangıç tarihini veya bitiş tarihini değiştirmek isteyebilirim. Dil olarak İngilizceyi seçtim, ancak desteklenen diğer dillerin neler olduğunu kontrol etmek isteyebilirsiniz. Sonuçlar şurada saklanacaktır: ‘data’ sonunda.

Sonuç olarak, betiğin tipik bir kullanımı şu şekilde olacaktır:

python script.py start_date end_date keyword

Twitter API'sine Erişim
Twitter, API'lerinin bir oauth2 yetkilendirme çerçevesi aracılığıyla kullanılmasına izin verir. Tweetlerin filtrelenmesinin yapılabileceği belgeleri web sitelerinde sağlarlar. Yukarıdaki kod parçası bunu sizin için uygulayacaktır.

The req_count değişkeni, programımın yürütülmesinde API'yi kaç kez kullandığımın sayısıdır. Verilen kodla aşağıdaki hatayla karşılaşıyorum:

TypeError: Unicode-objects must be encoded before hashing

Bunu önlemek için, post_body=”” ifadesini post_body=b”” olarak değiştiriyorum ve bu sorunu çözüyor.

Twitter API Kullanımı ve Referansı

Twitter verilerini almak için API URL'sini ayarlama zamanı geldi. Şu parametreyi kullanıyorum: min_faves. İşte URL'nin açıklaması ve bazı optimizasyon ipuçları:

‘min_faves’, verilerde bir tweet'in sahip olması gereken minimum favori sayısını ayarlamak için kullanılır. Çok kullanışlı bir özelliktir ancak Twitter API belgelerinde bahsedilmemiştir.

‘q’, girmek istediğiniz sorguyu veya anahtar kelimeleri temsil eder. Burada mümkün olduğunca az anahtar kelime verdiğinizden emin olmanız önemlidir. Örneğin, Facebook ve Google hakkında tweetler istediğimi hayal edelim. Her ikisini de anahtar kelime olarak verirsem, diyelim ki FACEBOOK ve GOOGLE, bu bir kısıtlama olduğu için bana en fazla 100 tweet döndürecektir. Ancak sorguyu iki kez çalıştırırsam – bir kez Facebook ile ve bir kez Google ile, toplamda 200 tweet alabilirim. Uzun lafın kısası, sorgu başına bir anahtar kelime kullanmak daha iyidir.

‘lang’, filtrelenen tweetlerin dilini temsil eder. Tweetleri İngilizce olarak almak istediğim için bunu ‘en’ olarak ayarlıyorum.

‘since’, tweetleri aramak istediğiniz dönemin başlangıç tarihidir. Bu başlangıç tarihi son 7 gün içinde olmalıdır. Bu da Twitter API Belgelerinde belgelenmemiş başka bir özelliktir.

‘until’, istediğiniz dönemin bitiş tarihini temsil eder. Mantıksal olarak, bu da son 7 gün içinde olmalıdır. Bu da Twitter API Belgelerinde belgelenmemiştir.

‘result_type’, istediğiniz tweet türünü temsil eder. 3 değeri vardır:

‘recent’, en son tweetleri, yani seçilen dönemin sonundaki tweetleri verir.

‘popular’, en popüler tweetleri verir ve bu nedenle birçok tweeti kaçırır. Her zaman en çok beğenilen ve retweetlenen tweetleri alırsınız. min_faves özelliği burada hiçbir işe yaramaz.

‘mixed’, yeni ve popüler tweetlerin bir karışımını verir.

‘count’, sonuçtaki maksimum tweet sayısını temsil eder. Varsayılan değer 15 olarak ayarlanmıştır ve maksimum değer 100'dür.

Karışık result_type ve min_faves kullanımı ile sorguyu birden çok kez çalıştırarak maksimum tweet sayısını elde edebiliriz.

Daha fazla belgelenmiş özellik için şuraya da göz atabilirsiniz: Twitter’ın API Belgeleri.

Alınan Tweet Verilerini Kaydetme/Otomatik Kaydetme

Bir sonraki adım olarak, ‘saveOverride’ parametresine sahip bir otomatik kaydetme/kaydetme yöntemi tanımlamanız gerekir. Bu adım, sadece otomatik kaydetme süresi kısıtlamasını kaldırmak ve dosyayı kaydetmek için gereklidir. Bunu yapmak için bir t_last oluşturarak programın başlangıç zamanını kaydediyorum. Ardından program içinden buna erişiyor ve t_last (son kaydetme zamanı) üzerinden 5 dakika geçip geçmediğini kontrol ediyorum. Eğer 5 dakikadan fazla geçmişse, ‘saveStatus’ değerini True olarak işaretliyorum.

Ardından, ‘saveOverride’ durumunu kontrol ediyorum; bu basitçe programıma ne olursa olsun dosyanın şimdi kaydedilmesi gerektiği talimatını vermem gerektiği anlamına gelir. Bunun için saveStatus değerini True olarak ayarlıyorum.

Ardından, eğer ‘saveStatus’ True ise, betik t_last değerini geçerli zamanla değiştirecektir. Bundan sonra kod bir sözlük nesnesi oluşturur ve verilerin otomatik olarak kaydedildiğini bilmeniz için “[time] zamanında otomatik kaydetme” yazdırır, böylece verilerin otomatik olarak kaydedildiğini bilirsiniz.

Ardından, çıktı dosyasının zaten var olup olmadığını kontrol ediyorum. Eğer varsa, verileri ve zaten kaydedilmiş bir dosyadaki verileri birleştiriyorum. Birleştirdikten sonra aynı dosyaya yazıyorum. Eğer yoksa, yeni bir dosya oluşturup verileri o dosyaya yazıyorum.

Sonuç olarak, istediğim işlevselliğin neredeyse tamamını kodladım.

Daha Fazla Optimize Etme

Son olarak, bu fonksiyonları kullanma zamanı geldi. while(True) anlamına gelen bir while(1) döngüsü yazıyorum. Bu, temel olarak bir ‘break’ ifadesi çağrılana veya bir istisna oluşana kadar talimatın sonsuza kadar çalışmasını sağlar.

İlk olarak, tweet verilerini şu yöntemi kullanarak ‘d’ sözlüğünde topluyorum: json.loads (bu işlem verileri bir sözlük biçimine dönüştürür). Ardından, verilerden durumları çıkaran kod bloğu üzerinde bir try-catch/except yapısı çalıştırıyorum. Try-catch kullanıyorum çünkü bazen Twitter API'si veri döndürmez, bunun yerine hatayı belirten bir JSON döndürür. Bu gibi durumlarda programımın durmasını istemiyorum. Ayrıca, bunun hangi istek numarasında gerçekleştiğini almasını ve Twitter verilerimi autosave komutunu kullanarak kaydetmesini istiyorum. Twitter, 15 dakikada bir 180 istek yapmamıza izin veriyor. Bu, dakikada yaklaşık 12 istek veya her beş saniyede bir istek demektir. Her ihtimale karşı, bir yinelemeyi yürüttükten sonra programımı 5 saniye uyutmak için bir sleep komutu ekliyorum.

Bundan sonra kod, betiğin şimdiye kadar topladığı tweet sayısını gösterecektir.

Son olarak, büyük optimizasyon hilesinin zamanı geldi. Bu betiği neredeyse bir haftadır test ediyordum ve her bir min_faves değeri için aşağıdaki tweet sayılarını elde ettim. İstek başına maksimum 100 tweet alabiliyorum ve mümkün olduğunca çok tweet almak istiyorum. Şu anda, daha yüksek min_faves değerlerine sahip çok fazla tweet yok, ancak belki de şirketin veya anahtar kelimenin trend olduğu zamanları hesaba katmak istiyoruz. min_faves maksimum değeri 999999 olabilir.

min_faves Değeri Tweet Sayısı
100,000 1
90,000 1
80,000 1
70,000 2
60,000 3
50,000 6
40,000 6
30,000 12
25,000 12

Bu nedenle, min_faves değeri 60000'den tweet alacak ve ardından 10000'e ulaşana kadar her seferinde bunu 10000 azaltacak bir mantık kullanıyorum. Ancak diyelim ki anahtar kelime popüler ve min_faves değerinin 30000 olmasıyla çalışırken 100 tweet alırsam, bu durum şu değeri artıracaktır: min_faves 35000'e ve ardından sonuçları tekrar almaya. Yani artık yeni mantık 10000 yerine 5000'dir. Ancak, değişim 1000'den az bir değere düşerse, bunu yoksaymasını ve 1000 çıkarmaya devam etmesini istiyorum.

Sabit bir 1000 aralığı belirtiyorum, bu aralık min_faves şu durumda azalmalıdır: min_faves 10000'e eşit veya daha küçükse.

Programın sonunda, program ‘End’ yazdırarak işin bittiğini size bildirecektir.

Kodun tamamını şurada bulabilirsiniz: GitHub.

Hepsi bu kadar. Bir sonraki Twitter veri eğitiminde, büyük veri aracı ‘Flume’ kullanarak gerçek zamanlı tweet'leri nasıl çekeceğinizi öğreteceğim. Takipte kalın!

author

Akshay Nagpal

Yazar · CloudSigma

Preslav Dobrev, CloudSigma'da Kreatif Tasarımcı olarak görev yapmakta olup geleneksel ve yenilikçi pazarlama kanallarını kullanarak tutarlı bir kurumsal kimlik oluşturmaya odaklanmaktadır. Sanatsal vizyonu stratejik pazarlamayla harmanlayarak etkili marka anlatıları oluşturma konusunda oldukça yeteneklidir.

Yorumlar

Henüz yorum yapılmamış. İlk siz olun.