requests ile REST üzerinden anlık altın fiyatı çekme
REST tarafı, tek seferlik veya periyodik sorgular için en sade yoldur. Python'un requests kütüphanesini kurduktan sonra (pip install requests) API anahtarınızı Authorization başlığına ekleyip ilgili sembol uç noktasına GET isteği atmanız yeterlidir. Yanıt JSON formatında döner ve response.json() ile doğrudan bir Python sözlüğüne dönüşür.
Aşağıdaki örnek gram altın fiyatını çeker: headers = {"Authorization": "Bearer API_ANAHTARINIZ"} tanımlayıp requests.get("https://altinapi.hasfiyat.com/v1/price/gram-altin", headers=headers) çağrısı yaparsınız. Dönen veri içinde alış, satış ve zaman damgası alanları bulunur; data["satis"] ile satış fiyatına, data["guncelleme"] ile son güncelleme anına erişirsiniz.
Birden fazla sembolü tek istekte almak isterseniz virgülle ayrılmış sembol listesi gönderebilir, örneğin gram-altin, ceyrek-altin, usd ve eur değerlerini aynı yanıtta toplayabilirsiniz. Hata yönetimi için response.raise_for_status() kullanmak, geçersiz anahtar veya kota aşımı gibi durumlarda temiz bir exception fırlatarak kodunuzu sağlamlaştırır.
python-socketio ile canlı fiyat akışına abone olma
Fiyatların ekranınıza saniye saniye düşmesini istiyorsanız REST yerine WebSocket kullanmalısınız. Hasfiyat, Socket.IO protokolü üzerinden yayın yaptığı için Python tarafında python-socketio kütüphanesi (pip install "python-socketio[client]") doğrudan uyumludur. Bağlantı sırasında kimlik doğrulama bilgisini auth parametresiyle iletirsiniz.
Tipik bir akış şöyle kurulur: sio = socketio.Client() nesnesi oluşturur, @sio.on("price") dekoratörüyle gelen her fiyat güncellemesini yakalayacak bir fonksiyon tanımlar ve sio.connect("https://altinapi.hasfiyat.com", auth={"token": "API_ANAHTARINIZ"}) ile bağlanırsınız. Bağlantı açıldığında ilgilendiğiniz sembollere sio.emit("subscribe", {"symbols": ["gram-altin", "ons"]}) çağrısıyla abone olursunuz.
Callback fonksiyonu her yeni tik geldiğinde tetiklenir ve gelen sözlükten sembol, alış ve satış değerlerini okuyabilirsiniz. sio.wait() çağrısı ana thread'i canlı tutarak akışın kesintisiz sürmesini sağlar. Bağlantı koptuğunda python-socketio otomatik yeniden bağlanma denediği için, 14 kaynaklı failover altyapısıyla birleşince kesintisiz bir fiyat akışı elde edersiniz.
Kimlik doğrulama, semboller ve üretime hazırlık
Her iki yöntemde de kimlik API anahtarınızla doğrulanır; REST'te Authorization header, WebSocket'te auth nesnesi kullanılır. Anahtarı kod içine gömmek yerine ortam değişkeninden (os.environ) okumak, sızıntı riskini azaltan temel bir güvenlik pratiğidir. Anahtarınızı asla istemci tarafı JavaScript veya herkese açık depolara koymayın.
Hasfiyat 67'den fazla sembol sunar: gram ve has altın, çeyrek, ata ve cumhuriyet altını, ons XAU, gümüş, platin, paladyum, 995/916/750/585 ayar bazlı değerler ile USD, EUR, GBP pariteleri ve serbest piyasa alış/satış fiyatları. Python tarafında bu semboller basit string sabitleri olduğu için sözlük veya liste yapılarında kolayca yönetilir.
Üretim ortamında REST çağrılarını periyodik senkronizasyon, WebSocket'i ise anlık gösterim için birlikte kullanmak yaygın bir desendir. Canlı akış ve otomatik failover sayesinde Python uygulamanız güvenilir bir altın ve döviz veri kaynağına kavuşur; kaydolup API anahtarınızı alarak yukarıdaki örnekleri dakikalar içinde çalıştırabilirsiniz.
Sık sorulan sorular
Python ile Hasfiyat altın API'sine nasıl istek atarım?
Python'da en pratik yol `requests` kütüphanesini kullanmaktır: `requests.get(url, headers={'Authorization': 'Bearer API_ANAHTARINIZ'})` ile REST uç noktasına istek atarsınız. Dönen yanıt JSON formatındadır ve `response.json()` ile sözlüğe çevrilir. Anlık takip için ayrıca `python-socketio` ile WebSocket bağlantısı kurabilirsiniz.
Python requests ile gram altın fiyatını nasıl çekerim?
`requests.get` ile fiyat uç noktasına Authorization header'ı ekleyerek istek atın, ardından `response.json()` içinden gram altın sembolünün alış/satış değerlerini okuyun. Örneğin `data['gram-altin']['satis']` gibi ilgili anahtardan güncel satış fiyatına ulaşırsınız. Yanıt milisaniyeler içinde döner ve 14 kaynaktan derlenmiş fiyatı içerir.
python-socketio ile canlı altın fiyatlarına nasıl abone olurum?
`python-socketio` kütüphanesini kurup `sio = socketio.Client()` ile istemci oluşturun, `sio.connect(url, headers={'Authorization': 'Bearer API_ANAHTARINIZ'})` ile bağlanın. `@sio.on('price')` dekoratörüyle bir olay dinleyicisi tanımlayarak fiyat güncellemelerini gerçek zamanlı alırsınız. Socket.IO bağlantısı saniye-altı gecikmeyle her değişimde otomatik veri gönderir.
Python'da API anahtarını Authorization header'ına nasıl eklerim?
İsteğe bir sözlük olarak header geçirin: `headers = {'Authorization': 'Bearer API_ANAHTARINIZ'}` ve bunu `requests.get(url, headers=headers)` çağrısına verin. WebSocket tarafında ise `sio.connect(url, headers=headers)` şeklinde aynı header'ı iletirsiniz. Anahtar her istekte doğrulandığı için header'ı boş bırakırsanız 401 hatası alırsınız.
Python ile altın alış ve satış fiyatını ayrı ayrı nasıl okurum?
API'de her sembol için alış (buy) ve satış (sell) değerleri ayrı alanlarda döner, bu yüzden JSON yanıtından `data['gram-altin']['alis']` ve `data['gram-altin']['satis']` şeklinde iki değeri ayrı okursunuz. Sarrafiye ürünlerinde alış-satış makası önemli olduğu için ikisini de takip etmeniz önerilir. Değerler kaynağın anlık kotasyonunu yansıtır.
requests kütüphanesinde zaman aşımı ve hata yakalamayı nasıl yaparım?
`requests.get(url, headers=headers, timeout=5)` ile zaman aşımı belirleyin ve isteği `try/except requests.exceptions.RequestException` bloğuna alın. Ayrıca `response.raise_for_status()` çağırarak 4xx/5xx durum kodlarında istisna fırlatabilirsiniz. Böylece ağ kesintisi veya geçersiz anahtar durumunda uygulamanız çökmeden hatayı yönetir.
Python'da API'den dönen JSON yanıtını nasıl parse ederim?
`requests` yanıtında doğrudan `response.json()` çağırarak JSON'u Python sözlüğüne çevirirsiniz; ayrıca `json` modülüne gerek yoktur. Sonra `data['sembol']['satis']` gibi anahtarlarla değerlere ulaşırsınız. Beklenmedik yapıya karşı `data.get('gram-altin')` kullanmak KeyError riskini azaltır.
python-socketio bağlantısı koptuğunda otomatik yeniden bağlanma nasıl olur?
`socketio.Client(reconnection=True, reconnection_attempts=0)` ile istemciyi sınırsız yeniden deneme yapacak şekilde oluşturun; kütüphane bağlantı koptuğunda otomatik olarak yeniden bağlanır. `@sio.event def reconnect()` ile yeniden bağlanma anını yakalayabilirsiniz. Ayrıca sunucu tarafında çoklu-kaynak failover olduğu için bir veri kaynağı düşse bile fiyat akışı devam eder.
Python'da API anahtarımı koda gömmeden nasıl güvende tutarım?
Anahtarı kaynak koda yazmak yerine ortam değişkeninde saklayın: `import os; key = os.environ['HASFIYAT_API_KEY']` ve `.env` dosyasını `.gitignore`'a ekleyin. `python-dotenv` ile `.env` dosyasını yükleyebilirsiniz. Böylece anahtar sürüm kontrolüne veya paylaşılan koda sızmaz.
Python ile ons altın (XAU) fiyatını nasıl alırım?
REST yanıtında ons altın için XAU sembolünü sorgulayın: `data['ons']['satis']` veya ilgili XAU anahtarından dolar bazlı ons fiyatını okursunuz. Bu değer uluslararası spot piyasayı yansıtır ve gram altın hesabınızda çevrim için kullanabilirsiniz. API 67'den fazla sembol arasında ons XAU'yu da sağlar.
Python ile USD/TRY dolar kurunu nasıl çekerim?
Döviz sembolleri de aynı REST uç noktasından döner; `data['USD']['satis']` gibi USD/TRY paritesinin alış-satış değerlerini okursunuz. API altın yanında USD, EUR, GBP çapraz paritelerini ve serbest piyasa alış/satış kurlarını sağlar. Kripto ve BIST bu kapsamın dışındadır.
Socket.IO ile sadece belirli sembollere nasıl abone olurum (Python)?
Bağlandıktan sonra `sio.emit('subscribe', {'symbols': ['gram-altin', 'USD']})` gibi bir olay göndererek yalnızca ilgilendiğiniz sembolleri dinleyebilirsiniz. Böylece tüm 67+ sembol yerine sadece gerekli fiyat güncellemelerini alır, bant genişliğini azaltırsınız. Dinleyici tarafında gelen veriyi `@sio.on('price')` içinde işlersiniz.
Python'da 401 Unauthorized hatası alıyorum, sebebi ne olabilir?
401 hatası genellikle Authorization header'ının eksik, yanlış formatta ya da API anahtarının geçersiz olmasından kaynaklanır. Header'ın `'Authorization': 'Bearer API_ANAHTARINIZ'` biçiminde ve anahtarın aktif olduğundan emin olun. Anahtarı ortam değişkeninden okuyorsanız değişkenin gerçekten yüklendiğini `print(os.environ.get(...))` ile kontrol edin.
Python ile çeyrek altın fiyatını nasıl sorgularım?
Sarrafiye sembolleri REST yanıtında yer alır; çeyrek altın için ilgili sembolden `data['ceyrek-altin']['satis']` değerini okursunuz. API ayrıca yarım, tam, ata, cumhuriyet, reşat gibi sarrafiye ürünlerini de ayrı sembollerle sağlar. Her biri için alış ve satış değerleri ayrı döner.
requests ile GET isteğinde hangi uç noktayı kullanmalıyım?
Anlık fiyat için REST GET uç noktasına Authorization header'ıyla istek atarsınız; tüm semboller tek çağrıda ya da sembol bazlı filtreyle döner. Dokümantasyondaki temel URL'yi kullanıp header'ı eklemeniz yeterlidir. Sürekli akış gerekiyorsa GET yerine WebSocket tercih edin.
Python'da 429 rate limit hatasını nasıl yönetirim?
429 alırsanız isteklerinizi yavaşlatıp üstel geri çekilme (exponential backoff) uygulayın: her denemede bekleme süresini artırın ve `time.sleep` ile bekleyin. Sürekli yüksek frekansta veriye ihtiyaç duyuyorsanız tekrar tekrar GET atmak yerine WebSocket aboneliğine geçmek çok daha verimlidir. Böylece hem kotayı korur hem gecikmeyi düşürürsünüz.
python-socketio ile olay dinleyicisini (event handler) nasıl yazarım?
Dekoratör kullanarak `@sio.on('price')` altında bir fonksiyon tanımlarsınız; fonksiyon parametresi olarak sunucudan gelen fiyat verisini alır. `@sio.event` ile `connect` ve `disconnect` olaylarını da yakalayabilirsiniz. Bu dinleyiciler sayesinde her fiyat değişiminde kodunuz otomatik tetiklenir.
Python ile tüm sembollerin listesini tek istekte nasıl alırım?
REST GET uç noktasına sembol filtresi vermeden istek atarsanız yanıtta 67'den fazla sembol tek seferde döner. `response.json().keys()` ile mevcut tüm sembol anahtarlarını listeleyebilirsiniz. Bu, uygulamanızda hangi altın ve döviz enstrümanlarının bulunduğunu keşfetmenin en hızlı yoludur.
Python asyncio ile Hasfiyat WebSocket'ini kullanabilir miyim?
Evet, `python-socketio` senkron `Client` yanında `AsyncClient` de sunar; `async def` fonksiyonları içinde `await sio.connect(...)` ve `await sio.wait()` kullanırsınız. Bu, aynı olay döngüsünde başka asenkron işlerle fiyat akışını birlikte yürütmenizi sağlar. Olay dinleyicilerini `@sio.on` ile yine tanımlarsınız ancak `async def` olarak yazarsınız.
Python ile gümüş, platin ve paladyum fiyatlarını nasıl alırım?
Değerli metal sembolleri REST yanıtında yer alır; gümüş, platin ve paladyum için ilgili sembol anahtarlarından alış-satış değerlerini okursunuz. API altın dışında bu üç metali de 14 kaynaktan derleyerek sağlar. Kripto para bu kapsamın dışında olduğundan yalnızca fiziki değerli metaller ve dövizler döner.
Python'da ayar bazlı (995, 916, 750, 585) altın fiyatını nasıl hesaplarım?
API ayar bazlı sembolleri doğrudan sağlar; 995, 916, 750 ve 585 milyem karşılıkları için ilgili sembol anahtarlarından değerleri okursunuz, kendiniz oran hesaplamanıza gerek kalmaz. Bu özellikle kuyumcu ve sarraf uygulamalarında farklı ayarlardaki ürünleri fiyatlamak için kullanışlıdır. Her ayar için alış ve satış ayrı döner.
Python betiğimde fiyatları belirli aralıkla nasıl güncellerim?
Sürekli döngüde GET atmak yerine, düşük frekans yeterliyse `while True` içinde `time.sleep(interval)` ile aralıklı REST isteği yapabilirsiniz. Ancak saniye-altı güncel veri istiyorsanız polling yerine `python-socketio` aboneliği kurmak hem daha verimli hem daha günceldir. WebSocket, fiyat değiştikçe size veri iter, siz sormak zorunda kalmazsınız.
Python'da SSL/bağlantı hatası alırsam ne yapmalıyım?
SSL veya bağlantı hataları genellikle ağ, sertifika ya da geçici kesintiden kaynaklanır; isteği `try/except requests.exceptions.ConnectionError` ile sarıp yeniden deneme mantığı ekleyin. `certifi` paketinin güncel olduğundan emin olun ve `verify=True` bırakın. Sunucu tarafındaki çoklu-kaynak failover sayesinde bir kaynak düşse bile API yanıt vermeye devam eder.
Python ile Cumhuriyet ve Ata altını fiyatını nasıl çekerim?
Cumhuriyet ve Ata altını API'de ayrı sarrafiye sembolleridir; JSON yanıtından ilgili anahtarlarla `alis` ve `satis` değerlerini okursunuz. API ayrıca Reşat ve tam/yarım/çeyrek gibi tüm sarrafiye çeşitlerini kapsar. Bu değerler serbest piyasadaki güncel kotasyonları yansıtır.
Python uygulamamda birden fazla sembolü aynı anda nasıl takip ederim?
WebSocket bağlandıktan sonra `sio.emit('subscribe', {'symbols': [...]})` ile birden fazla sembolü tek abonelikte dinler, gelen her güncellemeyi `@sio.on('price')` içinde sembole göre ayırırsınız. REST tarafında ise tek GET isteğiyle tüm semboller döndüğü için hepsini birden okuyabilirsiniz. Panolar ve fiyat tabloları için WebSocket yaklaşımı daha akıcıdır.
Python'da API yanıtındaki zaman damgasını nasıl okurum?
Yanıt içinde güncelleme zamanını bildiren alanı okuyup `datetime` modülüyle Python nesnesine çevirebilirsiniz; böylece fiyatın ne kadar taze olduğunu kontrol edersiniz. Bu özellikle birden fazla kaynağın failover sırasında hangi anda güncellendiğini görmek için yararlıdır. Zaman damgasını yerel saat dilimine çevirmek için `astimezone` kullanın.
Python ile webhook üzerinden fiyat bildirimini nasıl alırım?
Hasfiyat webhook desteği sunar; kendi tarafınızda Flask veya FastAPI ile bir POST uç noktası açıp API panelinde bu URL'yi tanımlarsınız, fiyat olayları JSON gövdesiyle size iletilir. Gelen isteği `request.json` ile okuyup işlersiniz. Webhook, sürekli açık bağlantı tutmadan olay bazlı bildirim almak istediğinizde WebSocket'e alternatiftir.
Python'da bir veri kaynağı düşerse fiyat almaya devam eder miyim?
Evet, sunucu tarafında 14 kaynak arasında çoklu-kaynak failover çalışır; Harem, Hakan, Nadir Döviz gibi kaynaklardan biri düşerse fiyat otomatik olarak diğerinden derlenir. Sizin Python kodunuz bunu fark etmez, aynı sembolden kesintisiz veri okumaya devam edersiniz. Bu yüzden istemci tarafında ekstra kaynak yönetimi yazmanıza gerek yoktur.
Canlı altın & döviz verisine hemen bağlanın
Dakikalar içinde REST veya Socket.IO ile gerçek zamanlı fiyat akışına başlayın.

