Python İle Basit Twitter API İşlemleri

Tweepy Paketi Kullanımı

Bir süredir Twitter API üzerine çalışmak istiyordum. Bu aşamada da kendime öğrendiklerimi pratiğe dökebileceğim şekilde, makine öğrenimini de dahil ederek birkaç eşik belirledim. İlk eşik belirli gündemleri kayıt altına almak, ardından Flask ve Vue ile edindiğim bu gündem içeriklerini basit bir duygu analizi (sentiment analysis) sürecinden geçirip çeşitli işlemlerden geçirip yayınlamak.

AA

Twitter tarafından paylaşılmış Araçlar ve Kütüphaneler sayfasına ulaşıp kullanılabilecek çözümleri inceledim1. Bu sayfada JavaScript, Go, Python, Lua, Julia, R ve Ruby gibi pek çok programlama dili ile hazırlanmış, özellikle bağlamında çeşitlilik gösteren pek çok seçenek mevcut. Yazının devamında Python programlama diline ait tweepy kütüphanesi ile ilerleyeceğim2.

Tweepy

Tweepy, Twitter API çözümü olarak gelişirilmiş popüler Python kütüphanelerinden biri2. pip install tweepy komutu ile kolay bir şekilde kurulumu gerçekleştirilebilecek kütüphane ile hızlı bir şekilde belirli konularda ya da kullanıcılar tarafından yapılmış paylaşımları listelemek (timeline için en ilgili 20, id için her sorguda 100'e kadar (re)tweet), kullanıcı ve kullanıcı etkinliklerine ulaşmak, otomatik bir şekilde paylaşımlar gerçekleştirebilmek mümkün3 4 5 6 7 8.

Twitter API v2 ve Standard v1.1 için izin verilen maksimum istek sayısı, bir zaman aralığına, belirli bir süreye veya zaman aralığına bağlıdır. Genel istek sınırı aralığı 15 dakikadır. Kullanıcı temelinde bir endpoint için 900 istek/15 dakikalık isteğe izin, uygulama temelinde ise sınır 300 istek olan belirtilmiştir9.

Tweepy'nin işlevselliği Twitter API ile uyumlu olarak aşağıdaki özellikleri sunar:

  • OAuth
  • API class
  • Models
  • Cursors
  • Streams

Aşağıdaki örnek akışında Twitter API v2 tweepy v3 kapsamında olmadığı için Standard v1.1 ile ilerleyeceğim. Bu nednele tweepy.API() sınıfını kullanaca ve home timeline içeriğine ulaşacağım10 11.

import tweepy
import pandas as pd

consumer_key = '...'
consumer_secret = '...'
access_token = '...'
access_token_secret = '...'

# OAuth
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# API class
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

# API class > Mehods > User Timelines
public_tweets = api.home_timeline()
df = pd.DataFrame([tweet.text for tweet in public_tweets])

API sınıfı bağlamında şu metodlara erişilebilir12:

  • User timelines
  • Tweets
  • Users
  • Followers
  • User Account
  • Likes
  • Blocking users
  • Searches
  • Trends
  • Streaming

O halde örnek akışımıza geçelim ve belirli bir tarih aralığında, sadece ilettiğimiz hashtag'i içeren tweet'lere ulaşalım.

Öncelikle sanal ortamımızı (venv) oluşturalım ve çalışmayı diğer Python ortam(lar)ından ayıralım13. Proje adı olarak twBot ismini kullandım, istediğiniz gibi değiştirebilirsiniz. Ancak, sonraki adımlarda da bu değişikliği sürdürmeyi unutmamalısınız.

python3 -m venv twBot
cd twBot && source bin/activate && which pip

Bu komutların uygulanmasının ardından proje klasörü içerisinde yer alan pip yolunun dönmesi gerekir. Örneğin, /Users/user/Desktop/flask/bin/pip

İlgili paketleri ve sürümlerini aşağıda görebilirsiniz.

certifi==2021.5.30
charset-normalizer==2.0.3
DateTime==4.3
idna==3.2
oauthlib==3.1.1
PySocks==1.7.1
pytz==2021.1
requests==2.26.0
requests-oauthlib==1.3.0
six==1.16.0
tweepy==3.10.0
urllib3==1.26.6
zope.interface==5.4.0

Bu listeyi requirements.txt adı ile proje dizinine kayıt edip yine dizin içerisinden pip ile çağırabilirsiniz.

bin/pip install -r requirements.txt

Yeni eklenen paketlerin ardından requirements.txt dosya içeriğini güncellemek için pip freeze > requirements.txt komutu kullanılabilir.

Evet, kullanacağımız Python kod parçacığımız şu şekilde14:

Bu kod parçacığı içerisinde yer alan kimlik bilgilerini düzenlemeyi unutmamalısınız.

tw = getTweets(
    consumer_key='...',
    consumer_secret='...',
    access_token='...',
    access_token_secret='...'
)

İlgili kod parçacığını bir dosya olarak kayıt ederseniz (colab ile de kullanabilirsiniz) bin/python ile düzenli olarak çalıştırabilir ve tweet'lerin dosya olarak derlenmesini sağlayabilirsiniz.

bin/python ./getTweets.py

Aşağıdaki kod parçacığı içerisinde yer alan query parametresi hangi konulardaki tweet'leri toplayacağımızı belirtmekte. -filter:retweets ise ilgili tweet'ler eğer bir retweet ise hariç tutulmakta. has:images -is:retweet ve from:ceaksan from:twitterapi has:links gibi tweet içeriği ve/veya kullanıcı adı gibi eklemeler de yapılabilir15. Sorgu item temelinde ele alınmakta. Ancak, isterseniz küçük bir değişiklik ile page temelinde de tweet'lere ulaşabilirsiniz16.

tw.writeToFile(filename='twitter.csv',
               query='#Tokyo2020 -filter:retweets',
               count=100,
               lang='tr',
               items=100)

Yine yukarıdaki kod parçacığının devamı olarak, Model işlemleri gerçekleştirelim. İlk olarak, mention'ları listeleyelim ve ardından önce bu mention'ı favoriye alıp ardından ilgili kişiyi takip edelim.

tweets = tw.api.mentions_timeline()
for tweet in tweets:
  print(tweet.text)
  tweet.favorite()
  tweet.user.follow()

Son olarak, belirli bir sayıdaki tweet'leri listelemek dışında, stream ile eşleşen tweet'leri anlık olarak takip edelim17 18.

class TWStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        print(status.text)

TWListener = TWStreamListener()
twStream = tweepy.Stream(auth = tw.api.auth, listener=TWListener)
twStream.filter(track=['Tokyo2020', 'Turkey'])