API Kavramı ve Twitter API

Bu yazıda API kavramının ne olduğundan ve Twitter API’larında bahsedilmiştir. Veri toplamak için gerekli ilk adımlar gösterilmiştir. Kod örnekleriyle verilerin toplanması adımları sonraki yazıda paylaşılacaktır.

Twitter’in resmi API’larını kullanarak ücretsiz olarak veri toplamamız mümkündür. Twitter’in bu amaçla sunduğu 2 adet hizmet bulunmaktadır. Bunlar Stream API ve REST API’dır.  Twitter paylaşımlarının anlık olarak, yani paylaşım gerçekleştirilir gerçekleştirilmez toplanması imkanını Stream API sağlamaktadır. Eğer geçmişe yönelik (son  1 hafta) veriler toplanacaksa REST API kullanılmalıdır. Stream API’nın arama sonuçlarının sadece %1-2’ ini garanti ettiği unutulmamalıdır. Yani içerisinde “Ankara” kelimesi geçen tweet’ler sorgulandığında eğer o an 1000 tane tweet bu kelimeyi içeriyorsa sistem bize bunların yaklaşık 10 – 20 tanesini dönderecektir.

Daha önce API kavramıyla karşılaşmamış olabiliriz. Kısaca açıklamak gerekirse API bir sisteme istek kabul eder ve bir cevap döndürür. İngilizce açılımı “Application Programming Interface” Türkçe karşılığı “Uygulama Programlama Arabirimi”. Bir örnekle açıklarsak; bir restorana gittiğimizde bize bir menü verilir. Menüde talep edebileceğimiz yiyecek ve içecekler bulunur. Biz de isteğimizi garsona bildiririz. Garson siparişimizi mutfağa aktarır ve bize siparişimizi getirir. API’lar da tıpkı garson gibidir. İsteğimizi öğrenir, iletir ve sonucu getirir.

API’larla ilgi önemli bir husus programlama dillerinden bağımsız olmalarıdır. Çünki isteklerin hangi programlama ya da veri tabanı aşamalarından geçtiğini bilmeyiz. Bu aşamalar bizden soyutlanır. Çünki yapılan işler GET ve POST isteklerinden ibarettir ve bu isteklere cevap olarak bir JSON veya XML çıktısı verilir.

Örneğin github’ın API ile “irhallac” isimli kullanıcının bilgililerini isteyelim

İstek: https://api.github.com/users/irhallac

Sonuç: 

{
“login”: “irhallac”,
“id”: 5973117,
“avatar_url”: “https://avatars0.githubusercontent.com/u/5973117?v=4”,
“gravatar_id”: “”,
“url”: “https://api.github.com/users/irhallac”,
“html_url”: “https://github.com/irhallac”,
“followers_url”: “https://api.github.com/users/irhallac/followers”,
“following_url”: “https://api.github.com/users/irhallac/following{/other_user}”,
“gists_url”: “https://api.github.com/users/irhallac/gists{/gist_id}”,
“starred_url”: “https://api.github.com/users/irhallac/starred{/owner}{/repo}”,
“subscriptions_url”: “https://api.github.com/users/irhallac/subscriptions”,
“organizations_url”: “https://api.github.com/users/irhallac/orgs”,
“repos_url”: “https://api.github.com/users/irhallac/repos”,
“events_url”: “https://api.github.com/users/irhallac/events{/privacy}”,
“received_events_url”: “https://api.github.com/users/irhallac/received_events”,
“type”: “User”,
“site_admin”: false,
“name”: null,
“company”: null,
“blog”: “”,
“location”: “Munich/Germany”,
“email”: null,
“hireable”: null,
“bio”: “Ibrahim”,
“public_repos”: 8,
“public_gists”: 0,
“followers”: 12,
“following”: 8,
“created_at”: “2013-11-18T20:27:41Z”,
“updated_at”: “2018-02-20T19:23:23Z”
}

Bu istek için gerekli url’i kopyalayıp tarayıcıya yapıştırdığımızda yukardaki sonucu verecektir. Bir program içerisinde bu sonucu almak istediğimiz zaman HTTP GET metodunu kullanmamız gerekir. Örneğin Python dilinde requests kütüphanesi kullanılarak GET metodu kullanılabilir.

Bu istek için gerekli url’i kopyalayıp tarayıcıya yapıştırdığımızda yukardaki sonucu verecektir. Bir program içerisinde bu sonucu almak istediğimiz zaman HTTP GET metodunu kullanmamız gerekir. Örneğin Python dilinde requests kütüphanesi kullanılarak GET metodu kullanılabilir.

 import requests
 r = requests.get("https://api.github.com/users/irhallac")
 print(r.content)

 

Ekrana daha önce tarayıcıdan aldığımız JSON nesnesinin aynısı yazdırılır. Farklı bir programlama dili için farklı kütüphanelerin GET ve POST metodu implementasyonları mevcuttur.

Twitter API referans dokümanı incelendiğinde https://developer.twitter.com/en/docs/api-reference-index onlarca farklı istek için GET ve POST yordamları görülmektedir. Bunların her birinin nasıl çalıştığını incelemek zor bir iştir ve bunların hatasız çalışması için gereken istek sayısı, frekansı, giden ve gelen parametrelerin yazımı gibi detayları öğrenmemize gerek yoktur. Çünki bizim için bu işi yapmış olan API kütüphaneleri mevcuttur. Farklı programlama dillerinde yazılmış çok sayıda Twitter API kütüphanesi vardır. Bu kütüphanelerin listesine https://developer.twitter.com/en/docs/developer-utilities/twitter-libraries adresinden bakılabilir.

Twitter’dan veri toplayabilmemiz için bizim kim olduğumuzu bilmesi gerekir. İstek yapabilmemiz için bir authentication aşamasından geçilir. Kimlik doğrulama için API bizden  aşağıdaki bilgiler istenir.

Consumer Key (API Key)
Consumer Secret (API Secret)
Access Token
Access Token Secret

Kendi twitter hesabımızla giriş yaparak https://apps.twitter.com/ adresinden yeni bir uygulama oluşturup yukardaki uygulama bilgilerini alırız. Daha sonra Twitter API ile yapılan bağlantılarda bu bilgilerle OAuth nesnesi oluşturulur. OAuth ile hatasız bir şekilde bağlantı yapılabildiği test edildikten sonra sorgulama işlemleri yapılır.

Örnek bir uygulama sayfası ekranı aşağıda verilmiştir.

Bir sonraki yazıda tweepy kütüphanesi ile veri toplama örnekleri yapılacaktır.