Ağ Yönetimi

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

      API üzerinden veri çekme, başka bir sistemin paylaştığı bir adrese istek göndererek oradan bilgi alınmasıdır. Dönen yanıt çoğunlukla JSON formatındadır ve bu format veriyi kolayca okunabilir hale getirir. Temelde istek gönderilir, yanıt alınır ve elde edilen veri kullanılır.

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

      API Veri Çekme Sisteminin Çalışma Yapısı

      API veri çekme sistemleri en basit anlatımıyla üç temel yapıdan oluşur. İlk yapı, veriyi sağlayan API adresidir ve bu adres bir web sitesi gibi tarayıcı üzerinden kullanılmaz. Buraya erişim doğrudan bir yazılım aracılığıyla sağlanır.

      İkinci yapı, bu API adresine istek atan küçük bir dosyadır. Bu dosya çoğunlukla Python, PHP veya JavaScript kullanılarak hazırlanır ve yalnızca veri alma işlemini gerçekleştirir.

      Üçüncü aşamada ise dosya çalıştırılır ve API’den veri yanıt olarak alını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

      Ekranda JSON çıktısı görüyorsan bu aşama başarıyla tamamlanmış demektir. JSON verisinin tek satır halinde görünmesi normal bir durumdur ve bu aşamada okunabilir olması beklenmez. Terminal üzerinden JSON çıktısı görüntüleme mantığı, özellikle curl kullanıldığında genellikle bu şekilde karşımıza çıkar.

      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şamaya geldiğimizde, API üzerinden veri çekmek için Python kullanacağız. Python bilgisayarında kurulu değilse veya Windows ortamında Python kurulumunu bilmiyorsan, öncesinde Python Nedir ve Windows Üzerine Nasıl Kurulur? başlıklı rehberi incelemek doğru olacaktır.


      Şimdi terminalde gördüğümüz isteği bir dosyaya taşıyalım.

      Ö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ı Gerektiren İstekler Nasıl Yapılır?

      Gerçek ortamlarda kullanılan API’lerin büyük bölümü bir anahtar üzerinden çalışır. Bu anahtar genellikle isteğin başlığına eklenir ve sistem tarafından kontrol edilir. Anahtar doğruysa veri döner, yanlış veya eksikse API hata üretir.

      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.

      Hi, I’m Spesifik

      Bir yanıt yazın

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