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://api.hasfiyat.com/api/prices", params={"source": "harem", "symbols": "GRAM ALTIN"}, headers=headers) çağrısı yaparsınız. Dönen JSON'daki data listesinde her kalem title, buy (alış) ve sell (satış) alanlarıyla gelir; verinin yazıldığı an gövdedeki lastUpdate alanındadır. Değerler 6.421,99 gibi Türkçe biçimli metindir; hesaplama için float(v.replace(".", "").replace(",", ".")) ile sayıya çevirirsiniz.
Birden fazla sembolü tek istekte almak isterseniz virgülle ayrılmış sembol listesi gönderebilir, örneğin symbols="HAS ALTIN,YENİ ÇEYREK,USD/TL,EUR/TL" ile bu değerleri 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.
websockets ile canlı fiyat akışına bağlanma
Fiyatların ekranınıza saniye saniye düşmesini istiyorsanız REST yerine WebSocket kullanmalısınız. Hasfiyat canlı akışı standart WebSocket protokolüyle sunduğu için Python tarafında websockets kütüphanesi (pip install websockets) yeterlidir. Kimlik doğrulama için API anahtarınızı bağlantı adresindeki token parametresine yazarsınız.
Tipik bir akış şöyle kurulur: url = "wss://api.hasfiyat.com/stream?source=harem&token=API_ANAHTARINIZ" adresini tanımlar, async with websockets.connect(url) as ws: bloğu içinde async for mesaj in ws: döngüsüyle mesajları okursunuz. Her mesaj json.loads(mesaj) ile çözülür; bir liste geldiyse kaynağın güncel kalemleridir, error alanı olan bir sözlük geldiyse bağlantı reddedilmiştir.
Gelen listedeki her kalemde title, buy ve sell alanları bulunur; istediğiniz kalemi title alanına göre seçersiniz. Bağlantı koptuğunda yeniden bağlanmak için websockets kütüphanesinin async for ws in websockets.connect(url): biçimini kullanabilirsiniz; kütüphane her kopmada artan beklemelerle yeniden bağlanır. Sunucu tarafındaki çok kaynaklı yük devretmeyle 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, 22 ve 14 ayar gibi 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 `websockets` kütüphanesiyle 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 `next(k for k in veri['data'] if k['title'] == 'GRAM ALTIN')['sell']` ile güncel satış fiyatına ulaşırsınız; isteğe `symbols=GRAM ALTIN` eklerseniz liste yalnızca bu kalemi içerir. Yanıt hızlı döner ve farklı kaynaklardan derlenmiş fiyatı içerir.
Python ile canlı altın fiyat akışına nasıl bağlanırım?
`pip install websockets` ile kütüphaneyi kurun, ardından `async with websockets.connect('wss://api.hasfiyat.com/stream?source=harem&token=API_ANAHTARINIZ') as ws:` ile bağlanın ve `async for mesaj in ws:` döngüsünde `json.loads(mesaj)` ile gelen listeyi okuyun. Sunucu fiyat değiştikçe güncel listeyi gönderir; sürekli sorgu atmanız gerekmez.
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 anahtar bağlantı adresindeki `token` parametresiyle iletilir: `wss://api.hasfiyat.com/stream?source=harem&token=API_ANAHTARINIZ`. 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 data listesindeki ilgili kalemden `kalem['buy']` ve `kalem['sell']` ş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. Fiyatlar `veri['data']` listesindedir; her kalemin `title`, `buy` ve `sell` alanlarına erişirsiniz. Aradığınız kalemi `next((k for k in veri['data'] if k['title'] == 'HAS ALTIN'), None)` ile seçmek, kalem yoksa hata yerine None döndürür.
Python WebSocket bağlantısı koptuğunda nasıl yeniden bağlanırım?
`websockets` kütüphanesinde `async for ws in websockets.connect(url):` biçimini kullanın ve döngü içinde `websockets.ConnectionClosed` hatasını yakalayıp `continue` deyin; kütüphane her kopmada artan beklemelerle yeniden bağlanır. Yeniden bağlandığınızda güncel liste hemen gelir. 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, harem kaynağında `ONS` başlıklı kalemdir: `next(k for k in veri['data'] if k['title'] == 'ONS')['sell']` ile 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; harem kaynağında `USD/TL` başlıklı kalemin `buy` ve `sell` alanlarından USD/TRY 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.
WebSocket'te sadece belirli sembolleri nasıl işlerim (Python)?
Akış seçtiğiniz kaynağın tüm kalemlerini tek mesajda gönderir; belirli sembolleri istemci tarafında süzersiniz: `istenen = {'HAS ALTIN', 'USD/TL'}` tanımlayıp `[k for k in json.loads(mesaj) if k['title'] in istenen]` ile yalnızca ilgilendiğiniz kalemleri ayırırsınız. REST tarafında ise `symbols` parametresiyle sunucudan doğrudan yalnızca bu kalemleri isteyebilirsiniz.
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 harem kaynağında `YENİ ÇEYREK` ve `ESKİ ÇEYREK` başlıklarıyla gelir; ilgili kalemin `sell` alanını 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, aylık REST kotanızın dolduğunu gösterir (reason: quota_exceeded); kısa beklemelerle yeniden denemek sonucu değiştirmez. Kodunuzda `if r.status_code == 429:` kontrolüyle istekleri durdurup durumu loglayın ve kullanımınızı panelden kontrol edin. Sürekli yüksek frekansta veriye ihtiyaç duyuyorsanız tekrar tekrar GET atmak yerine WebSocket akışına geçmek çok daha verimlidir; akış REST kotasından düşmez.
Python'da gelen WebSocket mesajlarını nasıl işlerim?
`async for mesaj in ws:` döngüsünde her mesajı `json.loads(mesaj)` ile çözersiniz. Sonuç bir liste ise kaynağın güncel kalemleridir ve her kalemde `title`, `buy`, `sell` alanları bulunur; `error` alanı olan bir sözlükse sunucu bağlantıyı reddetmiştir (örneğin geçersiz anahtar) ve bağlantı kapanır. Bu ayrımı tek bir `isinstance(veri, list)` kontrolüyle yaparsınız.
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. `websockets` kütüphanesi doğrudan asyncio üzerine kuruludur; `async with websockets.connect(url) as ws:` ve `async for mesaj in ws:` kalıbı aynı olay döngüsünde başka asenkron işlerle birlikte çalışır. Akışı `asyncio.create_task()` ile ayrı bir görevde başlatıp uygulamanızın geri kalanını bloklamadan yürütebilirsiniz.
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 farklı kaynaklardan 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?
Has altın fiyatını alıp milyem oranıyla çarparsınız: `has = float(kalem['sell'].replace('.', '').replace(',', '.'))` ardından örneğin 18 ayar için `has * 0.750`. Kaynakta hazır bulunan ayar kalemleri (harem'de 22 AYAR ve 14 AYAR gibi) için doğrudan o kalemin değerini okuyabilirsiniz. 995, 916, 750 ve 585 için ayrı sembol yoktur, oranla hesaplanır.
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 anlık güncel veri istiyorsanız polling yerine `websockets` ile canlı akışa bağlanmak 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; harem kaynağında `YENİ ATA` ve `ESKİ ATA` gibi başlıklarla gelir; ilgili kalemin `buy` ve `sell` 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 akışı seçtiğiniz kaynağın tüm sembollerini tek mesajda gönderir; birden fazla sembolü takip etmek için gelen listeyi `title` alanına göre ayırmanız yeterlidir. REST tarafında ise tek GET isteğinde `symbols` parametresine virgülle birden çok sembol yazarak hepsini birlikte alırsınız. 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 kaynaklar 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 WebSocket ile gerçek zamanlı fiyat akışına başlayın.

