Tweepy ile Twitter API erişimi – 1

Günümüzde sosyal medyadan elde edilen veriler sosyal bilimlerden pazarlama uygulamalarına kadar pek çok alanda kullanılıyor. Sosyal medya pek çok kullanıcının ürettiği sayısız metin verisini bir arada bulabileceğimiz eşsiz bir alan. Bu nedenle veri bilimiyle ilgilenenler için de müthiş bir deneyim fırsatı sunuyor.

Bu yazımızda Python için Twitter API’sine erişmek için geliştirilmiş Tweepy adlı kütüphanenin nasıl kullanılabileceğine dair bir kaç örnek sunacağız.

Twitter API

Şüphesiz Tweepy kullanarak Twitter’a erişmek için öncelikle bir Twitter API erişimine ihtiyacınız var. Bunun için API anahtarı talebinde bulunmanız, yani API kullanımı için gerekli bilgileri almanız gerekir. Twitter API’ına erişim talebi için aşağıdaki adresi ziyaret ederek Standart API başvurusu yapmanız yeterli:

https://developer.twitter.com/en/apply-for-access

API erişiminiz varsa artık size özel Consumer Key, Consumer Secret, Access Token ve Access Token Secret değerlerini yaratarak kullanabilirsiniz demektir. Tweepy’ı kullanmak için bu değerlere muhakkak sahip olmanız gerekiyor zira Twitter API’ına ancak değerlerle erişebilirsiniz.

Şimdi sıra geldi, Tweepy kütüphanesini yüklemeye. Tavsiyem conda ile yüklemenizdir.

pip3 install tweepy 
conda install -c conda-forge tweepy

Artık anahtarlarımız var. Tweepy’ı da kurduk. O halde API değerlerimizi ilgili değişkenlere atayabiliriz. Takdir edersiniz ki ben kendi API bilgilerimi silmek durumunda kaldım 🙂

In [6]:
consumer_key="burayayaziniz"
consumer_secret="burayayaziniz"
access_token="burayayaziniz"
access_token_secret="burayayaziniz"

Artık tweepy’ı import edebilir ve OAuth güvenlik doğrulaması yoluyla api bağlantımızı sağlayabiliriz:

In [7]:
import tweepy

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

api = tweepy.API(auth)

Bağlantımız sağlandı. Bu noktadan sonra Tweepy metodlarını kullanarak Tweetler üzerinde çeşitli işlemler yapabiliriz. Tweetlerle ilgili metodlarda bir Tweet JSON dönecektir (Status nesnesi). Bu JSON’un yapısı hakkında daha fazla bilgi edinmek için Twitter’in kendi geliştirici sayfasındaki şu izahatnameyi inceleyebilirsiniz.

Burada da göreceğiniz üzere, örneğin:

created_at: Tweetin atıldığı tarihi
text: Tweet metnini
user: Bir dizi olarak kullanıcı bilgilerini ve bu dizinin içinde:
user.name kullanıcı adını,
user.screen_name ise kullanıcının görünen adını içerir.

Örnekler

API bağlantınızı mevcut Twitter hesabınız üzerinden yaptığınız için, sözgelimi, kendi timeline’ını home_timeline() metodu ile çekebilirsiniz. Bu metodun parametreleri aşağıdaki gibidir:

API.home_timeline([since_id][, max_id][, count][, page])

Eğer fonskiyonu varsayılan değerleriyle gönderirseniz size ana akışınızdan son 20 tweeti çeker. Bu tweetlerden son 5 adedini kullanıcı adı, görünen adı, atılma zamanı ve tweet metinleriyle aşağıdaki gibi yazdırabiliriz (since_id ile max_id belli iki tweet arasındaki akışı görebilmeniz içindir. Her tweet bir ID’ye sahip olduğundan bu ID’leri kullanarak spesifik bir aralıktaki tweetleri çekebilirsiniz.):

In [116]:
tweetler = api.home_timeline(count=5) #Ana ekran akışını çağırıyoruz.
i = 1
for tweet in tweetler:
    print("%i: %s (%s): %s (%s) \n" % (i, tweet.user.name, tweet.user.screen_name, tweet.text, tweet.created_at))
    i += 1
1: Medyascope (Medyascopetv): Yarın 12:30'da
@ilhanuzgel @Metin4020 @IsinElicin https://t.co/nspFzbfJ0O (2020-01-02 14:48:55) 

2: Kuzey Ormanları Savunması (kuzeyormanlari): İstanbul Çevre Şehircilik İl Müdürlüğü önünde rant kanalına karşı basın açıklaması yapıyoruz. 

#YaKanalYaİstanbul… https://t.co/ZGjEM4ZMOW (2020-01-02 14:48:47) 

3: BirGün Gazetesi (BirGun_Gazetesi): Libya Tezkeresi 184 ret oyuna karşı 325 oyla kabul edildi
https://t.co/rD9M96R586 https://t.co/p5GA2UwpPG (2020-01-02 14:48:45) 

4: Eser Unsalan (eserunsalan): RT @airEref3: Ahmet Altan ve Taraf gazetesinde yazan şerefsizler sadece kumpasları değil bu milletin gençlerinin geleceğini çalan ÖSYM Başk… (2020-01-02 14:48:32) 

5: Gulay Turkmen (gulayturkmen): RT @yelkovansizsaat: tabii ki kurtuluş - tatavla'da bu gelenek son hız devam... genelde yaşlılar evde pişirmeye devam ederken #üstünpalmie… (2020-01-02 14:48:32) 

(Dikkat: Yukarıdaki tweetlerin ancak belli karaktere kadar yüklendiğine ve tam metin görüntülenemediğine dikkat edin.)

Eğer yukarıdaki kodu bir kaç defa çalıştırırsanız bir süre sonra aşağıdaki gibi uyarılar alır ve çalışmanız ara vermek zorunda kalırsınız, çünkü Twitter API erişiminin bazı limitleri var (Neyse ki bu limitler 15 dakikada bir sıfırlanıyor).

RateLimitError: [{'message': 'Rate limit exceeded', 'code': 88}]

Twitter error response: status code = 429

Yine aynı sebeplerle bir kullanıcının tüm takipçilerini çekmek vb. işlemlerde de normal Twitter API bağlantısıyla ancak ve ancak 200 takipçinin getirilmesi gibi sıkıntılarla karşılaşıyoruz. Tweepy’da bu sorunu Cursor adlı metodla aşıyoruz. Cursor, Twitter API’daki erişim limitlerinin etrafından dolaşmanızı sağlıyor. Temel mantığı, Twitter’ı internet tarayıcısında kullanırken imleci aşağıya kaydırdıkça sonuçların yüklenmesi gibi bir sayfalama aslında. Örneğin ben followers metoduyla 220 kişi getirmeye kalkışırsam sadece 20 kişi getiriyor (200’den küçük bir sayı, mesela 190 getirmek isteseydim olurdu):

In [125]:
takipciler = api.followers (id="veridefteri", count=220)
i = 1
for takipci in takipciler:
    print("%i: @%s (%s)" % (i, takipci.screen_name, takipci.name))
    i += 1
1: @bdrykhrmn (Bedriye Kılıç)
2: @MehmetSahinn22 (Mehmet ŞAHİN)
3: @maxtillo1 (maxtillo)
4: @volkantusu (Volkan TUSU)
5: @yasarisler (Yaşar İşler)
6: @kebiraaa (kübra...)
7: @UzAsimcan (asım)
8: @HusnuHatipoglu (Hüsnü HATİPOĞLU)
9: @BilimKalemi (Bilim Kalemi)
10: @hydrylcn (Haydar YALÇIN)
11: @bilgehan_1923 (Denizci)
12: @obefintlig (Gürkan Özturan)
13: @ServetDemir2727 (Doç. Dr. Servet DEMIR)
14: @JohnVaftizci (St. Vaftizci John)
15: @sonpancarmotoru (SonPancarMotoru)
16: @Elzemlavinya (Hello World)
17: @drera18 (Erkan Agyuz)
18: @dasdafavcx (HasanS)
19: @missildar (Merve)
20: @AIMLlover (Emito)
In [178]:
takipciler = tweepy.Cursor(api.followers, id="veridefteri").items(220)
i = 1
for takipci in takipciler:
    print("%i: @%s (%s)" % (i, takipci.screen_name, takipci.name))
    i += 1
1: @bdrykhrmn (Bedriye Kılıç)
2: @MehmetSahinn22 (Mehmet ŞAHİN)
3: @maxtillo1 (maxtillo)
4: @volkantusu (Volkan TUSU)
5: @yasarisler (Yaşar İşler)
6: @kebiraaa (kübra...)
7: @UzAsimcan (asım)
8: @HusnuHatipoglu (Hüsnü HATİPOĞLU)
9: @BilimKalemi (Bilim Kalemi)
10: @hydrylcn (Haydar YALÇIN)
11: @bilgehan_1923 (Denizci)
12: @obefintlig (Gürkan Özturan)
13: @ServetDemir2727 (Doç. Dr. Servet DEMIR)
14: @JohnVaftizci (St. Vaftizci John)
15: @sonpancarmotoru (SonPancarMotoru)
16: @Elzemlavinya (Hello World)
17: @drera18 (Erkan Agyuz)
18: @dasdafavcx (HasanS)
19: @missildar (Merve)
20: @AIMLlover (Emito)
21: @AtknK (ATAKAN KARAKAŞ)
22: @Busrarikn (BüşraArıkan)
23: @TUAF02FUAT (Fuat YILDIRIM)
24: @altugyilmaz (Altuğ YILMAZ)
25: @N2Dome (dome)
26: @gkhannkaptan (Gökhan Kaptan)
27: @experimenthalis (Fatih ŞEN)
28: @OyaDemir12 (Oya Demir)
29: @UmutDisel (Umut. Dişel)
30: @tumaykose (Ekrem Tümay Köse)
31: @alhtyr (Ali Ihtiyar)
32: @xeribe_ (Bahar)
33: @rewernew (Rewer)
34: @Kenanglol1 (Kenan)
35: @sirbobbydixon (sirbobby)
36: @mehmetnezih (Nezih)
37: @metanet (Ensar Basri Kahvεci)
38: @chimp41 (Mustafa Çelik)
39: @khrmnhande (Hande)
40: @eisencarbid (Eisen Carbid)
41: @ufuksecilmis (ufuk seçilmiş)
42: @denizeercann (Deniz Ercan)
43: @simurgian (Simurgian)
44: @toomanyfaces__ (Ozan)
45: @sevv_all (Seval)
46: @havaneserinken1 (havaneserinken)
47: @snnkbc (Sinan🇹🇷)
48: @maydaharun (Harun)
49: @Haticetugce41 (Haticetugce4)
50: @okeyedorduncu (GÖZDE ÖRDENK)
51: @yusufemresahinn (Yusuf Emre Şahin)
52: @Mustafa70449623 (Mustafa Kaşlı)
53: @MuhammedBaranC (Muhammed)
54: @halil64881736 (halil)
55: @omerfeee (Ömer)
56: @gokcantatli (goko)
57: @coskuncengiz (Coşkun CENGİZ)
58: @cansuisikk (Cansu)
59: @niyeymiski (asdfghjkl)
60: @berkiplikci (Berk)
61: @nedimtunc213 (Nedim Tunc)
62: @BaskanlikAjansi (Başkanlık Ajansı)
63: @ildenn (İlden Dirini)
64: @1soz1kahve (1soz1kahve)
65: @No4Turkey (Kemal Doğan)
66: @Celaleddinn07 (ben ne izlemedim az önce)
67: @SUZANKSKYOL (SUZAN KISIKYOL🦋🦋🦋)
68: @denizbroglie (Deniz)
69: @ErdoganSakin (Sakin Erdoğan)
70: @ozgurmumcu (Özgür Mumcu)
71: @kardelen_okay (Kardelen Okay)
72: @GizemGunduzoz (F.Gizem)
73: @hakansonmeez34 (Hakan SÖNMEZ)
74: @Yokavarmali (23)
75: @simurgenka (Nazlıcan Demir)
76: @remziduzagac (remzi duzagac)
77: @Oxygen1923 (hakansu)
78: @LeadershipNavy (🌍⚓️Navy Citizenship⚓️🌍)
79: @_umutekici_ (Umut)
80: @mcmurph72369145 (mcmurphy)
81: @fraundorian (fraundorian)
82: @BahattinAltunn (Bahattin Altun)
83: @Jouleli (Tuğba ÖzDjango)
84: @kazimkivanceren (Kıvanç Eren)
85: @bimucizeistiyor (Saudade)
86: @ouroboros__w (egi)
87: @OverratedChief (.)
88: @Gezgin__99 (GEZGİN)
89: @Fatmauyar1298 (Fatma uyar)
90: @fthkuzu (Fatih Kuzu)
91: @drisikc (ışık çakın)
92: @ekinmrv (mervebzkrt)
93: @oguzabel (Oguzhan)
94: @naripooool (narin polat)
95: @the11thdr (Gizem)
96: @pisagor1335 (Hatice Sivri)
97: @ruhemsiresi (merve)
98: @deniz60422219 (deniz)
99: @neminemt (bêgotin)
100: @oykuoin (Öykü)
101: @JaqenHaaghar (Bartu Jaqen H'ghar)
102: @mamimasas (selin)
103: @bmancobabannesi (gulpembe)
104: @HakanKu36645822 (Hakan Kuş)
105: @cumamay (cuma mayı)
106: @durmazbatuhan34 (Batuhan Durmaz)
107: @alidevran031 (Devr-i Alem)
108: @orhansrtky (Orhan)
109: @edaengiin (edaengin)
110: @utku_utku8 (Efe Utku)
111: @okumayanbilge (Özge)
112: @surungenbeyin (surungenbeyin)
113: @emindemired (Emin Demir)
114: @hnflcn (Hanife Laçin)
115: @mervetpdmr (m.tpdmr)
116: @behzattas (behzat taş)
117: @iloveubutimlost (♡)
118: @ozlemdoganbiyo (Özlem)
119: @yesilinarabasi (Mehmet)
120: @Aa93960836 (AA)
121: @fraktalnecmi (Doru)
122: @neslihang1 (neslihan)
123: @oguzhaanyeni (oğuzhan)
124: @frhtzkan1 (Ferhat Özkan)
125: @buraksahin907 (Burak Şahin)
126: @Cagatay_Ozan (Çağatay Karabulut)
127: @__Tubigo__ (Tubigo)
128: @sefa89_ (Sefa)
129: @giderim34 (HASAN)
130: @Nikbin181 (Nikbin18)
131: @ufucksng (Ufuk Süngü)
132: @Vncnt_Elif (Elif)
133: @kafeteyna (Yılmaz)
134: @sedatas_ (Seda Taş)
135: @bgunsur (BG)
136: @ekogenc (ekonomist)
137: @dongelyunusemre (Yunus Emre Döngel)
138: @bisevimlikiz (bisevimlikız)
139: @quidadaeternum_ (☪️Furkan☪️)
140: @yildizm46 (Miracetdin)
141: @sabahcin (Sabahattin Çinçin 🇹🇷🇹🇷🇹🇷🇹🇷🇹🇷🇹🇷)
142: @melihdemiroren (melih demirören)
143: @olmasoylesennur (şen şen şennur)
144: @erayalp (Eray Alp)
145: @emre_zdmr (Emre.)
146: @eymenkur (Eymen Kurdoğlu)
147: @silistreden (Ahmet Aylin Öztürk)
148: @_BurakOzkan (Burak Özkan)
149: @hbhamiburak (Hami Burak Yıldız)
150: @kostikus (asli kaya)
151: @ekremkirbas (M. Ekrem Kırbaş)
152: @_nedenben__ (Türevsiz Birey)
153: @uzunsongul (songül uzun)
154: @salihozcelik (Salih Özçelik)
155: @bugrahanbyrktr (Bugrahan Bayraktar)
156: @HTarikSengul (H. Tarık Şengül)
157: @pecertaba (pecertaba)
158: @ArsenDeniz3 (Arsen Deniz)
159: @clkkdhnd (Hande Çolakkadıoğlu)
160: @AKILZON1 (AKILZON (ZONGULDAK))
161: @1272mcm (m)
162: @brst56 (brst)
163: @toprakbeden (Toprak Beden)
164: @fatmbkt (Fatma Buket)
165: @zeyneppnilay (Zeynep Kütküt)
166: @eekorkmz (Ebru)
167: @36carlito (carlito)
168: @akkayab_ (Burak)
169: @EskiKafa10 (Eski Kafa)
170: @canbican (Can Bican)
171: @melikeesgin (Melike Esgin)
172: @muhERCAN (ilhami ERCAN)
173: @FOzkoyuncu (Fatih Özkoyuncu)
174: @meliquuee (melike)
175: @Deftoeasy7 (dorukational)
176: @triquetricmart1 (triquetricmarten)
177: @elkimelkim (fataman)
178: @methespes (methespes)
179: @attugcu (Akif Tugcu)
180: @MTKOCAK (Mehmet Tufan KOÇAK)
181: @ilknurerdogan55 (ilknur erdoğan)
182: @SuleymanArslan (Yobo)
183: @aiforsociety (AI for society)
184: @denizGrbz (Deniz Gurbuz)
185: @yasaraksi1 (yasar aksu)
186: @serraorey (Serra Örey)
187: @itsnogood117 (mmm)
188: @shuharilol (Eren Güneştaş)
189: @dnzakt35 (Deniz Akat)
190: @kubrAgldst (K C)
191: @shammgoat (Aybek)
192: @dlrmhcr (Dilara Muhacir)
193: @unusualbottle (senkron)
194: @mehtap02011 (mehtap)
195: @iremdogrusoz (İrem Doğrusöz)
196: @dirrdil (dırdıl)
197: @Emre56430351 (Emre)
198: @feyzan71 (feyzan71)
199: @anaartel1971ste (ali eşki)
200: @cahil1psikolog (Cahil1adam)
201: @MahsuniTurkatar (Mahsuni Türkatar)
202: @UgurlarSinem (Sinem Uğurlar)
203: @remdesola (rem)
204: @atsaky (Yıldıray Atsak)
205: @tucunc (tuc)
206: @mustafa_etik (Mustafa Etik)
207: @av_onier (Av. Erol ÖNİER)
208: @ayhanozaslan07 (Ayhan Ozaslan)
209: @horny_terry (alper)
210: @Met_Aksut (metin aksüt)
211: @ovoner (Ö.Vehbi Öner)
212: @OmerKeven (OmerKeven)
213: @nihasmiharbi (🔭 İbrahim Şahin)
214: @tnrvrdhilal (T N R V R D)
215: @ozlemgunal (ozlemaltunel)
216: @hacioglu (Murat Hacıoğlu)
217: @zeynepkockrky (Zeynep)
218: @senayzalioglu (Şenay Zalioğlu Turan)
219: @degisikyap (Sn.Ukala 🏳️‍🌈)
220: @bulent7caliskan (Çalışkan)

Hemen her işimizde Cursor’ı kullanabiliriz. Mesela yukarıda tweetlerin kısaltılarak geldiğini hatırlayınız. Eğer home_timeline metodunu Cursor ile kullanırsak tweetleri extended modda çağırıp eksiksiz hallerine ulaşabiliriz:

In [114]:
tweetler = tweepy.Cursor(api.home_timeline, tweet_mode='extended', truncated=False).items(5)
i = 1
for tweet in tweetler:
    print("%i: %s (%s): %s (%s) \n" % (i, tweet.user.name, tweet.user.screen_name, tweet.full_text, tweet.created_at))
    i += 1
1: Medyascope (Medyascopetv): Yarın 12:30'da
@ilhanuzgel @Metin4020 @IsinElicin https://t.co/nspFzbfJ0O (2020-01-02 14:48:55) 

2: Kuzey Ormanları Savunması (kuzeyormanlari): İstanbul Çevre Şehircilik İl Müdürlüğü önünde rant kanalına karşı basın açıklaması yapıyoruz. 

#YaKanalYaİstanbul diyoruz. Sen de katıl, son su ve nefes kaynaklarımızın, tarım alanlarımızın rant odakları tarafından yağmalanmasına izin vermeyelim. https://t.co/zGjHvp6CMx (2020-01-02 14:48:47) 

3: BirGün Gazetesi (BirGun_Gazetesi): Libya Tezkeresi 184 ret oyuna karşı 325 oyla kabul edildi
https://t.co/rD9M96R586 https://t.co/p5GA2UwpPG (2020-01-02 14:48:45) 

4: Eser Unsalan (eserunsalan): RT @airEref3: Ahmet Altan ve Taraf gazetesinde yazan şerefsizler sadece kumpasları değil bu milletin gençlerinin geleceğini çalan ÖSYM Başk… (2020-01-02 14:48:32) 

5: Gulay Turkmen (gulayturkmen): RT @yelkovansizsaat: tabii ki kurtuluş - tatavla'da bu gelenek son hız devam... genelde yaşlılar evde pişirmeye devam ederken #üstünpalmie… (2020-01-02 14:48:32) 

Diyelim RT’leri görmek istemiyoruz… Açıkçası tüm arama taramalarıma rağmen bunun metoda direkt geçilebildiği bir parametre görmedim. Benim bulduğum yöntem aşağıdaki gibi: (Daha etkin bir yöntem varsa öğrenmeyi çok istediğimden bana mesaj gönderirseniz memnun olurum).

In [115]:
tweetler = tweepy.Cursor(api.home_timeline, tweet_mode='extended', truncated=False).items(5)
i = 1
for tweet in tweetler:
    if "RT @" not in tweet.full_text:
        print("%i: %s (%s): %s (%s) \n" % (i, tweet.user.name, tweet.user.screen_name, tweet.full_text, tweet.created_at))
        i += 1
1: Medyascope (Medyascopetv): Yarın 12:30'da
@ilhanuzgel @Metin4020 @IsinElicin https://t.co/nspFzbfJ0O (2020-01-02 14:48:55) 

2: Kuzey Ormanları Savunması (kuzeyormanlari): İstanbul Çevre Şehircilik İl Müdürlüğü önünde rant kanalına karşı basın açıklaması yapıyoruz. 

#YaKanalYaİstanbul diyoruz. Sen de katıl, son su ve nefes kaynaklarımızın, tarım alanlarımızın rant odakları tarafından yağmalanmasına izin vermeyelim. https://t.co/zGjHvp6CMx (2020-01-02 14:48:47) 

3: BirGün Gazetesi (BirGun_Gazetesi): Libya Tezkeresi 184 ret oyuna karşı 325 oyla kabul edildi
https://t.co/rD9M96R586 https://t.co/p5GA2UwpPG (2020-01-02 14:48:45) 

Kullanıcı işlemlerinden örnekler

Peki bir kullanıcının ayrıntılarına erişmek istersek ne yapacağız? Diyelim ki bir kaç hesabın ayrıntılarını yazdırmak istiyoruz. Bunun için get_user metodunu kullanacağız. Bu metoddan bir user nesnesi döner. Bu nesnenin içeriğine Twitter geliştirici sayfasındaki açıklamalardan ulaşabilirsiniz. Adresi ziyaret ederseniz göreceğiniz üzere bir kullanıcı hakkındaki bütün detaylar burada yer almaktadır. Örneğin:

In [130]:
hesap_listesi = ["veridefteri", "acikbilim"]
for hesap in hesap_listesi:
    kullanici = api.get_user(id=hesap)
    print("Kullanıcı adı: @%s [%s] (Takip ettikleri: %i, Takip eden: %i)" % (kullanici.screen_name, kullanici.id, kullanici.friends_count, kullanici.followers_count))
    print(kullanici.description)
    print("-------------------------------------\n")
Kullanıcı adı: @VeriDefteri [924188418627731457] (Takip ettikleri: 33, Takip eden: 11548)
Veri Bilimi ve Yapay Öğrenme Üzerine Kısa Notlar
-------------------------------------

Kullanıcı adı: @AcikBilim [385788851] (Takip ettikleri: 330, Takip eden: 62773)
BİZİ DESTEKLEMEK İÇİN: https://t.co/cnatuoq2G3

Bağımsız Bilim Medyası. Muhabbet Teorisi, Nöroblog, Bilimfili, Bilimkurgu Kulübü ve daha fazlası.
-------------------------------------

Biraz daha somut bir uygulama yapalım. Acaba Veri Defteri hesabının 0 takipçili takipçisi var mı? Bu kod parçacığı 0 kullanıcılı olası yumurta hesapların tespitinde kullanılabilir:

In [181]:
takipciler = tweepy.Cursor(api.followers, id="veridefteri").items(100) #Limitleri zorlamamak için 100 takipçi arasından bakalım.
for takipci in takipciler:    
    kullanici = api.get_user(id=takipci.screen_name)
    if kullanici.followers_count==0:
        mask_name = '*' * len(kullanici.screen_name) #Her ihtimale karşı burada kullanıcı isimlerini maskeleyeyim :)
        print("Kullanıcı adı: @%s (Takip ettikleri: %i, Takip eden: %i)" % (mask_name, kullanici.friends_count, kullanici.followers_count))
    
Kullanıcı adı: @************ (Takip ettikleri: 160, Takip eden: 0)
Kullanıcı adı: @******* (Takip ettikleri: 88, Takip eden: 0)
Kullanıcı adı: @********* (Takip ettikleri: 59, Takip eden: 0)
Kullanıcı adı: @*************** (Takip ettikleri: 137, Takip eden: 0)
Kullanıcı adı: @************* (Takip ettikleri: 362, Takip eden: 0)

Gündem ve etiketler

Bildiğiniz üzere Twitter’ın sahip olduğu özelliklerden biri de coğrafi olarak düzenlenmiş gündem etiketleri (nam-ı diğer Trending topics). Twitter API’ına erişerek belli bir bölgeye ait gündemi görmek mümkün. Bunun için de trends_place adlı metoddan faydalanıyoruz. Bu metoddan şu adreste görebileceğiniz yapıda bir yanıt dönüyor.

API.trends_place(id[, exclude])

Bu metoda geçilen id ülkeyi belirtmek için kullanılıyor. Burada konumlara id vermek için Yahoo! Where on Earth ID (WOEID) sistemi kullanılıyor. Mevcut konum kodları için api.trends_available metodundan dönen JSON’ı kontrol edebilirsiniz. Bu JSON yanıtını şu sayfadan da görebilirsiniz. Buradan baktığımızda İstanbul’un kodunun 2344116 olduğunu görüyoruz. Bakalım İstanbul’un şu andaki gündemi neymiş?

In [168]:
gundem = api.trends_place(id="2344116")[0]
for trend in gundem['trends']:
    print ("%s (%s)" % (trend['name'], trend['tweet_volume']))
    
#LibyaTezkeresi (24242)
#iyikivarsınEren (37715)
MahkumaYeniYılda BeyazSayfa (47490)
#SözleşmeliyeAcilenKadro (43407)
#egitimtakvimi2020 (55034)
#parol (None)
Veinze Socks (None)
Saadet Partisi (None)
Alper Boğuşlu (None)
Cihangir İslam (None)
Hasic (None)
Marco Knoop (None)
Doğu Akdeniz'de (None)
Genel Sağlık Sigortası (None)
Cüneyt Özdemir (None)
Viagra (None)
Lejyoner (None)
Mehmetçik (None)
Orkan Çınar (None)
Kanal Çanakkale (None)
Mobilyada KDV (None)
Güney Kıbrıs (None)
Aytun Çıray (None)
DevletinDini KHKmıAdaletmi (None)
Engin Altay (None)
istanbul fatih'te (None)
Libya Tezkeresine (None)
#trabzonseninleberatalbayrak (None)
#BarışManço (16617)
#SarıKamıştaBuluşmayaSon3 (None)
#OurHappinessJISOODay (392434)
#TikTok (20509)
#BedelliAskerlikUzaktanEğitim (None)
#Poşet30olduYalanı (None)
#CerenDamar (None)
#아미가치는클래식 (268780)
#WelcomeBackHanbin (378408)
#SunshineDonghyukDay (74551)
#sgkDMDnincihazınıöde (13489)
#Eyt2020SeçimDiyor (None)
#harunbayılbayıl (None)
#iyikidoğdunEren (None)
#WonhoWillBeBack (79142)
#yemekhakkımadokunma (None)
#ipeke (None)
#Azerin (None)
#oncemaas (None)
#MüşteriDeğilÖğrenciyiz (None)

Arkası yarın

Bu yazıda Tweepy’ın kullanımına yönelik bir giriş yaptık ve temel çalışma mantığını görmüş olduk. Sıradaki yazılarda daha somut taramalar ve bazı analizler yapacağız. Görüşmek üzere.

4 comments

  1. Merhabalar. Ben de kendi deneyimlerimden buna benzer bir şey yazmayı düşünüyordum. Tweepy’nin kullanım talimatları çok işe yaramıyor maalesef. Elinize sağlık. Ben de retweet filtreleme işini “RT @” bakarak yapıyorum ve bence işe yarıyor. Eğer gelen tweet bir retweet ise, jsonda “retweeted_status” diye bir alan var. Ben bu alan var mı yok mu diye kontrol etmeye de başladım. Tek sorun çıkabilicek durum kullanıcıların kopyala-yapıştır yapıp önüne RT koyması ve bu sistemde retweet sayılmıyor (ama aslında bence özünde retweet). Ama bu topladığım tweetler içinde çok nadir karşılaştığım bir durum.

  2. Merhaba, Üzerine bitirme projesi olarak çalıştığım bir konu yazınızdan baya bir şey öğrendim, devamını heyecanla bekliyorum.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.