Metadata-Version: 2.4
Name: apiservisim
Version: 0.2.1
Summary: Apiservisim Türkçe API'leri için bağımlılıksız Python istemcisi
Project-URL: Homepage, https://apiservisim.vercel.app/
Project-URL: Repository, https://github.com/fortextexe/apiservisim
Keywords: apiservisim,api,turkey,türkçe,sdk
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# Apiservisim Python SDK

Apiservisim'in Türkçe API'lerine Python ile erişmek için bağımlılıksız istemci. Python 3.10+ ve yalnızca standart kütüphane gerekir.

## Kurulum

```bash
python -m pip install apiservisim
```

Paket adı **`apiservisim`**'dir. PyPI sürümleri ayrı numaralandırılır. Kaynak koddan geliştirme kurulumu için `python -m pip install .` komutunu `python-sdk` klasöründe çalıştırın.

## API kataloğu

Aşağıda web sitesindeki **36 API kartının tamamı** ve birincil endpoint şablonları yer alır. Ek alt yollar ve alias'lar sonraki bölümde listelenmiştir.

| API | Birincil endpoint |
|---|---|
| Proxy Kontrol API | `/api/proxy/{adet}` |
| Faiz Oranları API | `/api/faiz` |
| Görsel Boyutlandırma API | `/api/resim` |
| Altın API | `/api/altin` |
| QR Kod API | `/api/qr` |
| Bayrak API | `/api/bayraklar` |
| IBAN Doğrulama API | `/api/iban` |
| Borsa API | `/api/borsa` |
| Döviz API | `/api/doviz` |
| Eczane API | `/api/eczane` |
| Noterlik ve Nöbetçi Noter API | `/api/noterlikler` |
| Namaz Vakitleri API | `/api/namaz` |
| Deprem API · Kandilli | `/api/deprem/kandilli` |
| Deprem API · AFAD | `/api/deprem/afad` |
| Kargo API | `/api/kargo/{carrier}/{takip_no}` |
| Araç Şarj İstasyonları API | `/api/sarj/{path...}` |
| TikTok Video API | `/api/tiktok/{url...}` |
| Akaryakıt API | `/api/petrol-ofisi/{path...}` |
| Adres API | `/api/mahalleler` |
| Planlı Çalışma API | `/api/planli-calisma` |
| Resmî Tatiller API | `/api/resmitatiller` |
| Endeks API | `/api/endeks` |
| Film API | `/api/film` |
| Hava Durumu API | `/api/hava/{sehir}` |
| IP Bilgi API | `/api/ip` |
| Domain Bilgi API | `/api/domain/{domain}` |
| DKIM Doğrulayıcı API | `/api/dkim` |
| E-posta Doğrulama API | `/api/eposta` |
| T.C. Kimlik No Kontrol API | `/api/tckimlik` |
| Kripto API | `/api/kripto` |
| KDV API | `/api/kdv` |
| Plaka Tanıma API | `/api/plaka` |
| SEO API | `/api/seo` |
| Güneş Konumu API | `/api/gunes` |
| Haberler API | `/api/haberler` |
| Saat API | `/api/saat` |

## Tüm kamuya açık route şablonları

`API_ENDPOINTS`, aşağıdaki **88 route şablonunu** içerir. Liste, uygulamadaki bütün public API route dosyalarını ve adres servisinin public alias/opsiyonel yollarını kapsar. İç yönetim uçları olan `/api/admin/...` bu pakete ve kataloğa dahil değildir.

```text
/api/adres
/api/adres/{path...}
/api/akaryakit
/api/altin
/api/aras/{takip_no}
/api/bayraklar
/api/bayraklar/{isim}
/api/borsa
/api/contact
/api/deprem/afad
/api/deprem/kandilli
/api/dkim
/api/domain-history
/api/domain-tld
/api/domain/{domain}
/api/doviz
/api/eczane
/api/emtia
/api/endeks
/api/eposta
/api/faiz
/api/faiz/{path...}
/api/faiz/basvuru/{id}
/api/faiz/img/{path...}
/api/film
/api/gunes
/api/haberler
/api/haberler/kategori
/api/haberler/{kategori}
/api/harem
/api/hava/{sehir}
/api/havalimanlari
/api/havalimanlari/{kod}
/api/havalimanlari/{kod}/tablo
/api/havalimanlari/{kod}/ucuslar
/api/hesapla
/api/history/{domain}
/api/iban
/api/iban/logo/{eft}
/api/ilceler
/api/iller
/api/ip
/api/ip/{path...}
/api/kargo/{carrier}/{takip_no}
/api/kdv
/api/kdv/durum
/api/kdv/{ulke}
/api/kdv/{ulke}/hesapla
/api/kripto
/api/namaz
/api/namaz/{path...}
/api/mahalleler
/api/mahalleler.json
/api/nobetci
/api/nobetci/{il}
/api/noter/iller
/api/noter/yenile
/api/noterlikler
/api/noterlikler/{il}
/api/pariteler
/api/petrol-ofisi
/api/petrol-ofisi/{path...}
/api/plaka
/api/planli-calisma
/api/postakodu
/api/posta-kodu/{path...}
/api/proxy
/api/proxy/{adet}
/api/qr
/api/resim
/api/resmitatiller
/api/resmitatiller/{path...}
/api/saat
/api/saat/{sehir...}
/api/sarj/{path...}
/api/seo
/api/sokaklar
/api/status/history
/api/surat/{takip_no}
/api/tckimlik
/api/tiktok
/api/tiktok/{url...}
/api/tld
/api/ucuslar
/api/ucuslar/{kod}
/api/ucuslar/{kod}/detay
/api/whois
/api/whois/{domain}
```

Python'da `API_CATALOG` servis adlarını ana route'lara eşler; `API_ENDPOINTS` ise ek ve dinamik route'ları da verir. Yeni bir route eklense bile `get`, `post` ve `request` ile doğrudan çağrılabilir.

```python
from apiservisim import API_CATALOG, API_ENDPOINTS, ApiServisim

api = ApiServisim()

print(len(API_CATALOG))   # 36 servis kartı
print(len(API_ENDPOINTS)) # 88 public route şablonu

kurlar = api.call_api("Döviz API")
hava = api.call_api("Hava Durumu API", path_params={"sehir": "istanbul"})
kargo = api.call_api(
    "Kargo API",
    path_params={"carrier": "aras", "takip_no": "TAKIP-NO"},
)
```

Dinamik route'larda `{sehir}` gibi tek segmentli parametreler; `{path...}` gibi catch-all parametrelerde slash içeren metin veya segment listesi kullanılabilir. Path değerleri URL için otomatik kodlanır. `call_api` kayıtlı servis adını ya da doğrudan bir route şablonunu kabul eder.

## HTTP metotları ve yanıtlar

JSON yanıtları Python nesnesi, JSON olmayan yanıtlar `bytes` olarak döner. `request` ile GET, POST, PUT, PATCH veya DELETE kullanılabilir.

```python
qr_png = api.call_api("/api/qr", params={"data": "Merhaba", "size": 600})

saat = api.call_api(
    "/api/saat/{sehir...}",
    path_params={"sehir": "Europe/Paris"},
)

sonuc = api.post("tckimlik", json={"tc": "...", "ad": "..."})
sonuc = api.request("DELETE", "/api/ornek", params={"id": 123})
```

## T.C. Kimlik No Kontrol API'si

```python
import os
from apiservisim import ApiServisim

sonuc = ApiServisim().call_api(
    "T.C. Kimlik No Kontrol API",
    method="POST",
    json={
        "tc": os.environ["TC_KIMLIK_NO"],
        "ad": os.environ["KISI_ADI"],
        "soyad": os.environ["KISI_SOYADI"],
        "dogum_yili": 1990,
    },
)
```

Bu endpoint yalnızca yerel biçim ve kontrol basamağı algoritmasını çalıştırır. Harici kimlik kayıtlarına bağlanmaz ve gerçek bir kişinin kimliğini doğrulamaz. Gerçek kişisel verileri GET URL'sine koymayın veya günlüklerde saklamayın; POST JSON kullanın.

## Özel sunucu adresi, zaman aşımı ve hatalar

```python
from apiservisim import ApiServisim, ApiServisimHTTPError

api = ApiServisim(base_url="https://apiservisim.vercel.app", timeout=20)

try:
    sonuc = api.get("saat", params={"sehir": "İstanbul"})
except ApiServisimHTTPError as hata:
    print(hata.status_code, hata.body)
```

`ApiServisimConnectionError`, bağlantı ve zaman aşımı sorunlarında; `ApiServisimHTTPError` API'nin 4xx/5xx yanıtlarında yükseltilir. Hata gövdesi `ApiServisimHTTPError.body` içindedir.

## Testler

```bash
python -m unittest discover -s tests -v
```
