Skip to main content

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-crawler paketinin kullandığı /api/DB/BindHistoryInfo endpoint'i TEFAS sitesinin yeniden yazımıyla kalıcı olarak kaldırıldı. tefasmak yeni 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 impersonationcurl_cffi Chrome 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 exceptionsTefasAPIError, 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tefasmak-1.0.0.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tefasmak-1.0.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

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

Hashes for tefasmak-1.0.0.tar.gz
Algorithm Hash digest
SHA256 47a429891e602f7009abbaace1f525b5233fde69784b2e5f51fbbc5a85ce6578
MD5 a3ad90c9a55a75dd49454f7da882f501
BLAKE2b-256 812e885d9f0cb22f27963a1e9dd02296e3a0125228eb9007231eb5e51235aef8

See more details on using hashes here.

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

Hashes for tefasmak-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e773c56088ab871fa81b768d46dd0b609d176ee4de3f44ffa85eaad4ee4ffb4
MD5 6f6bf0263643fa819223e6fce03a4d07
BLAKE2b-256 56449f38799dc5760fba8af6e2321fad54a66a2b53fbc4f39f87228196eb4ad3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page