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.
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'])
- Twitter API Tools and libraries. Twitter Developer Platform ↩
- Tweepy Documentation. Tweepy ↩ ↩
- Tutorials. Twitter Developer Platform ↩
- API Reference. Tweepy ↩
- Data dictionary ↩
- Miguel Garcia. How to Make a Twitter Bot in Python With Tweepy ↩
- Getting historical Tweets using the full-archive search endpoint. Twitter Developer Platform ↩
- Explore a user’s Tweets. Twitter Developer Platform ↩
- Rate limits. Twitter Developer Platform ↩
- Get Tweet timelines. Twitter Developer Platform ↩
- Tweepy 3.10.0, AttributeError: module 'tweepy' has no attribute 'Client'. stackoverflow ↩
- Twitter API v1.1 Reference ↩
- Installing packages using pip and virtual environments. PyPA ↩
- ceaksan/GetTweets.py. GitHub ↩
- Listen for important events. Twitter Developer Platform ↩
- Items or Pages. Cursor Tutorial. Tweepy ↩
- Streaming With Tweepy ↩
- Stream Tweets in real-time. Twitter Developer Platform ↩