Ağ Yönetimi

API Kullanarak Otomatik Veri Çekme Sistemi Kurulumu

Bir API‘den veri çekmek, dış bir sistemin sunduğu adrese erişip belirli bir veri talebinde bulunmak anlamına gelir. Bu talebe karşılık gelen yanıt genellikle JSON formatında olur ve düzenli bir veri yapısı sunar. Süreç, isteğin atılması, yanıtın alınması ve verinin kullanılması aşamalarından oluşur.

Bu görselin Alt özniteliği boş. Dosya adı: recovery-1024x576.jpg

API Veri Çekme Mantığı Nasıl İşler?

API üzerinden veri çekme mantığı temelde üç ana parçaya dayanır. İlk parça, veriyi sunan API adresidir ve bu adres bir web sitesi gibi algılanmamalıdır. Tarayıcı yerine bir uygulama bu adrese istek gönderir.

İkinci parça, API’ye istek atan küçük bir dosyadır. Bu dosya çoğu zaman Python, PHP veya JavaScript ile geliştirilir ve yalnızca veri alma görevini üstlenir.

Üçüncü adımda ise bu dosya çalıştırılır ve API’den gelen veri yanıt olarak sisteme ulaşır.

API Üzerinden Veri Çekme Nasıl Yapılır?

API’nin çalıştığını terminalden görelim

Önce kod yazmadan API’nin yanıt verdiğini doğrulayalım. Terminali açalım ve istek atalım.

curl https://jsonplaceholder.typicode.com/users

JSON verisi ekranda görüntüleniyorsa bu adımın doğru şekilde çalıştığı anlaşılır. JSON çıktısının tek satır gibi görünmesi olağan bir durumdur ve ilerleyen adımlarda daha okunur hale getirilecektir. Terminalde curl ile alınan JSON çıktıları çoğunlukla bu formatta gösterilir.

JSON çıktısını terminalde okunur hale getirelim

Şimdi çıktıyı okuyalım. Bunun en basit yolu, curl çıktısını Python’ın JSON aracıyla formatlamaktır.

curl -s https://jsonplaceholder.typicode.com/users | python -m json.tool

Aynı isteği küçük bir Python dosyasıyla çekelim

Bu aşamada Python kullanarak API üzerinden veri çekme işlemini gerçekleştireceğiz. Eğer sisteminde Python yüklü değilse ya da Windows ortamında Python’un nasıl kurulacağını bilmiyorsan, öncelikle Python Nedir? Windows Kullanıcıları İçin Kurulumu başlıklı rehbere göz atman faydalı olacaktır.


Şimdiye kadar terminalde çalıştırdığımız isteği bir dosya içerisine taşıyalım. Bu sayede aynı işlemi her seferinde yeniden yazmadan tekrar tekrar çalıştırabiliriz.

Önce requests kütüphanesini kuralım

pip install requests

Şimdi veri_cek.py dosyasını oluşturalım ve içine şunu yazalım

import requests
url = "https://jsonplaceholder.typicode.com/users"
r = requests.get(url, timeout=30)
print("HTTP:", r.status_code)
r.raise_for_status()  # hata varsa burada patlar<br>data = r.json()print("Kayıt sayısı:", len(data))
print("İlk kayıt örneği:", data[0])

Dosyayı çalıştıralım

python veri_cek.py

Parametre Göndererek API ile Nasıl Çalıştığımızı Görelim

Bir API’den veri çekerken her zaman tek tip veri almak zorunda değiliz. Çoğu API, gönderdiğimiz parametrelere göre farklı sonuçlar döndürür. Bu nedenle şimdi aynı isteği, bu kez parametre ekleyerek yapalım ve API’nin nasıl davrandığını görelim.

Terminalden basit bir test yapalım

curl "https://httpbin.org/get?limit=5&page=2"

Bu istek çalıştığında, API bize gönderdiğimiz parametreleri geri yansıtır. Böylece parametrelerin doğru şekilde iletildiğini net olarak görürüz.

Şimdi aynı işlemi küçük bir kod parçası ile yapalım.

import requests

url = "https://httpbin.org/get"
params = {"limit": 5, "page": 2}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

print(response.json()["args"])

Bu çıktıda limit ve page değerlerini görüyorsak, parametreli API çağrısı doğru şekilde çalışıyor demektir. Bundan sonraki adımlarda gerçek API’lerle çalışırken de aynı mantığı kullanacağız.

API Anahtarı ile Yetkilendirme Nasıl Çalışır?

Birçok API, veri erişimi için anahtar kullanımını zorunlu tutar. Bu anahtar çoğunlukla isteğin başlık alanında yer alır ve her istekle birlikte gönderilir. Mantık değişmez; doğru anahtar veriyle sonuçlanır, yanlış anahtar hata ile karşılanır.

Gerçek sistemlerde çoğu API anahtar ister. Bu anahtar genellikle isteğin başlığına eklenir. Mantık basittir. Anahtar doğruysa veri gelir, yanlışsa hata döner.

import requests

url = "https://api.ornek.com/data"
headers = {
    "Authorization": "Bearer API_TOKEN_BURAYA"
}

r = requests.get(url, headers=headers, timeout=30)
print("HTTP kodu:", r.status_code)
print(r.text[:300])

Bu noktada 401 veya 403 alıyorsak anahtar ya hatalıdır ya da yetkimiz yoktur.

Çok Fazla Veri Varsa Sayfa Sayfa Çekelim

Bazı API’ler veriyi parça parça verir. JSONPlaceholder bu durumu desteklediği için gerçek bir örnekle görelim.

curl "https://jsonplaceholder.typicode.com/posts?_page=1&_limit=5" | python -m json.tool

Şimdi bunu kodla döngüye alalım.

import requests

base_url = "https://jsonplaceholder.typicode.com/posts"
all_posts = []

for page in range(1, 4):
    r = requests.get(base_url, params={"_page": page, "_limit": 5}, timeout=30)
    r.raise_for_status()
    posts = r.json()
    all_posts.extend(posts)
    print(f"{page}. sayfa çekildi")

print("Toplam kayıt:", len(all_posts))

Bu kodla birlikte veriyi kontrollü şekilde parça parça çekmiş oluruz.

Otomatik Hale Getirme

Tüm adımlar sorunsuz çalıştıysa artık otomatik çalıştırabiliriz. Linux sistemlerde bunun en basit yolu cron kullanmaktır.

*/10 * * * * /usr/bin/python3 /opt/veri_cek.py >> /var/log/veri_cek.log 2>&1

Bu ayarla birlikte script her 10 dakikada bir çalışır.

https://contabo.com/blog/wp-content/uploads/2023/05/blog-head_syntax-of-cron.jpg?utm_source=chatgpt.com

Sık Sorulan Sorular

API çağrısı çok yavaş çalışıyorsa bunu nasıl teşhis edebilirim?

DNS çözümlemesi, TLS bağlantı süresi veya network gecikmesi bu duruma sebep olabilir. Terminalden curl -w ile bağlantı sürelerini görmek, sorunun API mi yoksa ağ mı kaynaklı olduğunu anlamaya yardımcı olur.

curl komutu her işletim sisteminde çalışır mı?

curl, Linux ve macOS sistemlerde varsayılan olarak yüklü gelir. Windows 10 ve üzeri sürümlerde de PowerShell üzerinden hazır olarak bulunur. Daha eski Windows sürümlerinde curl manuel olarak kurulabilir veya alternatif araçlar kullanılabilir.

API’den veri çekerken neden timeout tanımlamak gerekir?

API çağrıları ağ üzerinden yapıldığı için karşı tarafın cevap vermemesi veya bağlantının kopması mümkündür. Timeout tanımlanmazsa uygulama süresiz bekleyebilir. Bu da script’in kilitlenmesine ve otomatik çalışan sistemlerin durmasına neden olur.

API anahtarım doğru ama yine de 403 alıyorum, neden?

Bu genellikle anahtarın aktif olduğu ama ilgili endpoint için yetkisinin olmadığı anlamına gelir. Birçok API anahtarı oluşturulurken varsayılan olarak tüm izinler verilmez. Yetki kapsamı (scope) kontrol edilmelidir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir