Python client for the YÖK Atlas tercih kılavuzu JSON API
Project description
yokatlas-py
YÖK Atlas tercih kılavuzu JSON API'si için modern, tip güvenli Python istemcisi.
English README · API Referansı · Migration Rehberi
⚠️ v0.6.0 büyük değişiklik içerir. YÖK Atlas Nisan 2026'da React tabanlı SPA'ya geçti ve eski HTML scraping endpoint'leri kapandı. v0.6.0, yeni JSON API'ye karşı sıfırdan yazıldı. v0.x kullanıcıları için MIGRATION.md dosyasına bakın.
Özellikler
- Tek istemci:
YokAtlasClient(sync) veAsyncYokAtlasClient(async) — aynı arayüz. - Tek seferde 4 yıllık veri: Her program, mevcut yıl + 3 önceki yılın taban puanı, başarı sırası, kontenjan/yerleşen sayıları, akademik kadro bilgileri ile döner.
- Akıllı arama:
universite="boğaziçi",program="bilgisayar",il="ankara"gibi serbest yazımlar fuzzy match ile ID'ye dönüşür (Türkçe karakter normalizasyonu dahil). - Pydantic v2 modeller: Tam tip güvenliği, IDE auto-complete, runtime doğrulama.
- Sıfır HTML parsing: Tüm veri JSON,
beautifulsoup4bağımlılığı yok.
Kurulum
pip install yokatlas-py
# veya
uv add yokatlas-py
Python ≥3.10 gerekir.
Hızlı başlangıç
from yokatlas_py import YokAtlasClient, SearchFilters
with YokAtlasClient() as client:
# Boğaziçi'nde sayısal tüm programlar
page = client.search(
SearchFilters(puan_turu="SAY", universite="boğaziçi"),
size=20,
)
print(f"Toplam: {page.total_elements}")
for prog in page.content:
print(
f"{prog.universite_adi} — {prog.birim_adi} | "
f"{prog.current.min_puan} ({prog.current.basari_sirasi})"
)
# Tek bir program (kilavuz kodu ile)
prog = client.get_program(102210277)
if prog:
for stats in prog.all_years:
print(f"{stats.year}: {stats.min_puan} / {stats.basari_sirasi}")
Async kullanım
import asyncio
from yokatlas_py import AsyncYokAtlasClient, SearchFilters
async def main() -> None:
async with AsyncYokAtlasClient() as client:
page = await client.search(SearchFilters(il="ankara", program="tıp"))
for prog in page.content:
print(prog.universite_adi, prog.current.min_puan)
asyncio.run(main())
Modül seviyesinde kısayollar
Tek seferlik scriptler için singleton bir istemci üzerinden çalışan kısayollar:
from yokatlas_py import search_programs, get_program, list_universities
page = search_programs({"puan_turu": "EA", "universite": "boğaziçi"}, size=10)
prog = get_program(102210277)
unis = list_universities() # 221 üniversite
Filtreler
| Alan | Tip | Açıklama |
|---|---|---|
puan_turu |
"SAY" | "SÖZ" | "EA" | "DİL" | "TYT" |
Puan türü |
universite / universite_id |
str | list[str] / list[int] |
Üniversite (akıllı veya ID) |
program / birim_grup_id |
str | list[str] / list[int] |
Program grubu |
il / il_kodu |
str | list[str] / list[int] |
İl |
birim_turu_id |
int |
46 = LİSANS, 47 = ÖNLİSANS |
universite_turu |
"DEVLET" | "VAKIF" |
Üniversite türü |
burs_orani_id |
int |
0 = Ücretsiz / Burslu |
ogrenim_turu_id |
int |
Örgün/İkinci öğretim |
kilavuzKodu |
int |
Tek programa filtre |
min_basari_sirasi / max_basari_sirasi |
int |
Başarı sırası aralığı |
Akıllı (string) alanlar ile ID alanları aynı anda verilemez — biri seçilir.
Yapı
Bir Program 4 yıllık veri taşır:
prog.current # YearlyStats: en güncel yıl (2025)
prog.history # list[YearlyStats]: 3 önceki yıl (2024, 2023, 2022)
prog.all_years # 4 yılın tümü (yeni → eski)
YearlyStats alanları: year, kontenjan, yerlesen, kontenjan_obs, kontenjan_y34, prof, doc, dou, ogr_gor, ar_gor, kpss1, kpss2, min_puan, basari_sirasi.
Yapılandırma
YOKATLAS_* env var'ları ile veya Settings ile:
from yokatlas_py import Settings, YokAtlasClient
settings = Settings(timeout=60.0, lookup_cache_ttl=600)
client = YokAtlasClient(settings=settings)
| Env var | Default | Açıklama |
|---|---|---|
YOKATLAS_BASE_URL |
https://yokatlas.yok.gov.tr |
API kökü |
YOKATLAS_TIMEOUT |
30.0 |
HTTP timeout (sn) |
YOKATLAS_VERIFY_SSL |
true |
TLS sertifika doğrulaması |
YOKATLAS_MAX_RETRIES |
3 |
HTTP retry sayısı |
YOKATLAS_LOOKUP_CACHE_TTL |
3600 |
Üniversite/program/il cache TTL (sn) |
Önemli kısıt — detaylı Atlas verileri artık yok
🛑 Detaylı atlas verileri (cinsiyet/lise alanı/yerleşen il dağılımı, tercih edilen üniversiteler/programlar, akademisyen ünvan dağılımı, yatay geçiş, mezuniyet yılı dağılımı, KPSS yıllara göre, vb. ~25 alt kategori) v0.6.0'da YOK.
Bu, kütüphanenin değil YÖK Atlas'ın kararı: Nisan 2026 SPA geçişiyle birlikte bu sayfalar siteden tamamen kaldırıldı, frontend bile artık bunları render etmiyor ve geriye parse edilebilecek bir endpoint kalmadı.
YÖK Atlas bu verileri ileride geri getirirse (yeni endpoint'ler veya genişletilmiş
searchresponse'u olarak) kütüphaneye ekleyeceğiz. Şimdilik v0.6.0 sadece resmî API'nin sunduğu kontenjan/yerleşen, akademik kadro, KPSS, taban puan, başarı sırası alanlarını (4 yıllık) döner.
Geliştirme
uv sync
uv run pytest # tüm testler (mock)
uv run pytest -m integration # gerçek API (opt-in)
uv run mypy yokatlas_py/
Lisans
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yokatlas_py-0.6.0.tar.gz.
File metadata
- Download URL: yokatlas_py-0.6.0.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4ffa481f1aec9dc6c5b3923944d808354783a6e2e8095f1c451915315b46ea9
|
|
| MD5 |
b242a10ed40c146e1824484c3be0f41a
|
|
| BLAKE2b-256 |
fb88ea81c9274d827b7457367540a0e62fef88248a2e95de49f10e536cba5296
|
Provenance
The following attestation bundles were made for yokatlas_py-0.6.0.tar.gz:
Publisher:
python-publish.yml on saidsurucu/yokatlas-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yokatlas_py-0.6.0.tar.gz -
Subject digest:
c4ffa481f1aec9dc6c5b3923944d808354783a6e2e8095f1c451915315b46ea9 - Sigstore transparency entry: 1405506256
- Sigstore integration time:
-
Permalink:
saidsurucu/yokatlas-py@470411766a85eac1537c3a87933320d1903fed94 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/saidsurucu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@470411766a85eac1537c3a87933320d1903fed94 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file yokatlas_py-0.6.0-py3-none-any.whl.
File metadata
- Download URL: yokatlas_py-0.6.0-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4a1a3a3af2f35e3d606e5de875437c1356f8025c2fe3cb0793ad1dfe22566a2
|
|
| MD5 |
e5c2ce886f6801352be002cd57bee197
|
|
| BLAKE2b-256 |
700bb8168a180d3c21a4a3434c905ac719b88204ddf1568920a6989270293b2f
|
Provenance
The following attestation bundles were made for yokatlas_py-0.6.0-py3-none-any.whl:
Publisher:
python-publish.yml on saidsurucu/yokatlas-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yokatlas_py-0.6.0-py3-none-any.whl -
Subject digest:
c4a1a3a3af2f35e3d606e5de875437c1356f8025c2fe3cb0793ad1dfe22566a2 - Sigstore transparency entry: 1405506278
- Sigstore integration time:
-
Permalink:
saidsurucu/yokatlas-py@470411766a85eac1537c3a87933320d1903fed94 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/saidsurucu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@470411766a85eac1537c3a87933320d1903fed94 -
Trigger Event:
workflow_dispatch
-
Statement type: