TEFAS (Türkiye Elektronik Fon Alım Satım Platformu) için modern Python sarmalayıcısı — Akamai TSPD bypass için curl_cffi TLS impersonation kullanır.
Project description
tefasmak
TEFAS (Türkiye Elektronik Fon Alım Satım Platformu) için modern Python sarmalayıcısı.
Yeni TEFAS sitesinin (Next.js, Nisan 2026+) public JSON endpoint'lerine erişir.
Akamai TSPD bot korumasını curl_cffi ile
Chrome TLS impersonation kullanarak geçer — ilk POST'ta temiz JSON döner, warmup loop yok.
Eski
tefas-crawlerpaketinin kullandığı/api/DB/BindHistoryInfoendpoint'i TEFAS sitesinin yeniden yazımıyla kalıcı olarak kaldırıldı.tefasmakyeni endpoint setine modern bir alternatif sunar.
Kurulum
pip install tefasmak
curl_cffi yüklenemediği ortamlarda requests fallback'i etkinleşir:
pip install "tefasmak[requests]"
Hızlı kullanım
from tefasmak import (
fon_anlik_bilgi,
fon_5y_fiyat,
fon_portfoy_dagilimi,
portfoy_dagilimi_normalize,
fonlar_donemsel_getiri,
)
# Tek fon — anlık bilgi
info = fon_anlik_bilgi("IPB")
print(info["sonFiyat"], info["gunlukGetiri"], info["portBuyukluk"])
# 5 yıllık günlük fiyat geçmişi (getiri grafiği için)
fiyatlar = fon_5y_fiyat("IPB")
print(f"{len(fiyatlar)} gün, son: {fiyatlar[-1]['tarih']} = {fiyatlar[-1]['fiyat']}")
# Portföy dağılımı (kısa kod → insan-okurabilir)
ham = fon_portfoy_dagilimi("IPB")
dagilim = portfoy_dagilimi_normalize(ham)
# {'Hisse Senedi': 34.46, 'Ters Repo': 38.3, ...}
# TÜM fonların dönemsel getirisi tek istekte
getiriler = fonlar_donemsel_getiri() # 1a/3a/6a/yb/1y/3y/5y kolonları dolu
Bulk çekim
from tefasmak import fonlar_son_fiyat_bulk, fonlar_gunluk_detay_aralik
# Tüm fonların güncel fiyatı (~2000 fon, 2 istek)
bulk = fonlar_son_fiyat_bulk("YAT")
print(len(bulk), "fon")
# Tarih aralığı (chunked + paginated + dedupe + rate-limit otomatik)
df = fonlar_gunluk_detay_aralik(
fon_tipi="YAT",
bas_tarih="20260101",
bit_tarih="20260430",
)
Endpoint kapsamı
| Kategori | Fonksiyon | Açıklama |
|---|---|---|
| Tek fon | fon_fiyat_gecmisi(kod, periyod) |
Günlük fiyat geçmişi (hafta/1ay/.../5yıl) |
fon_5y_fiyat(kod) |
5 yıllık geçmiş — getiri grafiği için ideal | |
fon_anlik_bilgi(kod) |
sonFiyat, gunlukGetiri, portBuyukluk, kategoriDerece | |
fon_profil_detay(kod, periyod) |
Kategori derecesi + tür ortalama getirisi | |
fon_portfoy_dagilimi(kod, tarih) |
Portföy kategorileri (hs/tr/yyf/...) | |
| Bulk | fonlar_gunluk_detay_hepsi(...) |
Tüm fonlar tek tarih için, sayfalı |
fonlar_gunluk_detay_aralik(...) |
Uzun tarih aralığı, chunked + paginated | |
fonlar_portfoy_dagilimi_aralik(...) |
Portföy dağılımı geçmişi | |
fonlar_donemsel_getiri(...) |
Tüm fonlar 1a/3a/6a/yb/1y/3y/5y, tek istek | |
fonlar_buyukluk(...) |
Portföy büyüklüğü, pay adedi değişimi | |
fonlar_yonetim_ucretleri(...) |
Yönetim ücreti, gider kesintisi | |
| Liste / arama | tum_fonlar(fon_tipi) |
Tüm fonlar: kod, ünvan, kurucu |
fon_unvan_ara(arama) |
Kod/ünvan araması | |
fon_grup_listesi(), fon_tur_listesi() |
Sözlük | |
| İstatistik | islem_hacmi(...) |
Toplam işlem hacmi raporu |
uye_stok_bakiye(...) |
Üye stok bakiyeleri | |
fon_bazli_islem_hacmi(), uye_bazli_islem_hacmi() |
Detaylı işlem raporları | |
| Diğer | duyurular() |
TEFAS duyuruları |
fund_returns_export(...) |
Excel export'un JSON karşılığı |
Fon tipleri
| Kod | Açıklama |
|---|---|
YAT |
Yatırım Fonları (varsayılan) |
EMK |
Emeklilik Fonları |
BYF |
Borsa Yatırım Fonu (ETF) |
GYF |
Gayrimenkul Yatırım Fonu |
GSYF |
Girişim Sermayesi Yatırım Fonu |
Özellikler
- TLS impersonation —
curl_cffiChrome 131 fingerprint ile Akamai TSPD bypass; ilk POST'tan temiz JSON - Otomatik rate-limit — TEFAS 6 req/dk sınırı için ardışık çağrılar arası 8sn bekleme
- Chunked tarih çekimi — TEFAS'ın 1 ay sınırını aşan aralıklar için 28-gün pencerelere otomatik bölme + dedupe
- Sayfalı bulk — 1000'lik sayfa boyutu (2000 fon = 2 istek)
- Session cache — 10 dk TTL ile cookie tazeleme
- Backoff + retry — 429/boş yanıt için exponential backoff, max 5 deneme
- Custom exceptions —
TefasAPIError,TefasRateLimitError,TefasInvalidParameterError
Portföy dağılımı kısa kodları
fon_portfoy_dagilimi ham sözlükte kısa kodlar döner (hs, tr, yyf, vint vb.).
İnsan-okurabilir karşılıkları için portfoy_dagilimi_normalize veya PORTFOY_KOD_LABEL:
from tefasmak import PORTFOY_KOD_LABEL, fon_portfoy_dagilimi, portfoy_dagilimi_normalize
ham = fon_portfoy_dagilimi("IPB")
print(portfoy_dagilimi_normalize(ham))
# {'Hisse Senedi': 34.46, 'Ters Repo': 38.3, 'Yatırım Fonları Katılma Payları': 16.01, ...}
print(PORTFOY_KOD_LABEL["khau"]) # 'Altın Katılma Hesabı'
60+ kategori desteklenir (hisse, repo, mevduat, kıymetli madenler, eurobond, kira sertifikası, BYF, GYF, GSYF vb.).
Hata yönetimi
from tefasmak import (
fon_anlik_bilgi,
TefasAPIError,
TefasRateLimitError,
TefasInvalidParameterError,
)
try:
info = fon_anlik_bilgi("XYZ")
except TefasRateLimitError:
# 429 — exponential backoff bittikten sonra fırlatılır
...
except TefasInvalidParameterError:
# Tarih formatı vb. geçersiz
...
except TefasAPIError:
# Genel TEFAS hatası
...
TefasInvalidParameterError aynı zamanda ValueError alt sınıfıdır — eski kod
except ValueError ile yakalamaya devam edebilir.
Notlar
- TEFAS API public'tir, kimlik bilgisi gerektirmez.
- Site'nin servis politikalarına saygı gösterin (rate-limit otomatik uygulanır).
- Veri kaynağı: https://www.tefas.gov.tr — bağımsız bir projedir, TEFAS/MKK ile resmi bağı yoktur.
Lisans
MIT — bkz. LICENSE.
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 tefasmak-1.0.0.tar.gz.
File metadata
- Download URL: tefasmak-1.0.0.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47a429891e602f7009abbaace1f525b5233fde69784b2e5f51fbbc5a85ce6578
|
|
| MD5 |
a3ad90c9a55a75dd49454f7da882f501
|
|
| BLAKE2b-256 |
812e885d9f0cb22f27963a1e9dd02296e3a0125228eb9007231eb5e51235aef8
|
File details
Details for the file tefasmak-1.0.0-py3-none-any.whl.
File metadata
- Download URL: tefasmak-1.0.0-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e773c56088ab871fa81b768d46dd0b609d176ee4de3f44ffa85eaad4ee4ffb4
|
|
| MD5 |
6f6bf0263643fa819223e6fce03a4d07
|
|
| BLAKE2b-256 |
56449f38799dc5760fba8af6e2321fad54a66a2b53fbc4f39f87228196eb4ad3
|