socket.io-client ile WebSocket bağlantısı kurma
Öncelikle projenize istemci kütüphanesini ekleyin: npm install socket.io-client. Ardından const { io } = require("socket.io-client") ile içe aktarıp const socket = io("https://altinapi.hasfiyat.com", { auth: { token: "API_ANAHTARINIZ" } }) çağrısıyla bağlantıyı başlatırsınız. auth nesnesi, el sıkışma anında anahtarınızı sunucuya güvenle iletir.
Bağlantı yaşam döngüsünü olaylarla izlersiniz: socket.on("connect", ...) bağlantı kurulduğunda, socket.on("disconnect", ...) koptuğunda ve socket.on("connect_error", ...) kimlik veya ağ hatasında tetiklenir. Bu olayları loglamak, üretimde bağlantı sağlığını takip etmenizi kolaylaştırır.
Socket.IO varsayılan olarak otomatik yeniden bağlanma yapar; bağlantı düştüğünde katlanarak artan bekleme süreleriyle tekrar dener. Bunu Hasfiyat'ın 14 kaynaklı failover altyapısıyla birleştirdiğinizde, hem istemci hem sunucu tarafında dayanıklı, kesintisiz bir fiyat kanalı oluşur.
Sembollere abone olma ve gelen tikleri işleme
Bağlantı açıldıktan sonra hangi sembollerin akışını istediğinizi sunucuya bildirmeniz gerekir. connect olayı içinde socket.emit("subscribe", { symbols: ["gram-altin", "ceyrek-altin", "usd"] }) çağrısıyla abonelik açarsınız. İhtiyacınız değiştiğinde unsubscribe olayıyla belirli sembollerden çıkabilir, kaynı bağlantıyı verimli kullanabilirsiniz.
Her yeni fiyat güncellemesi socket.on("price", (data) => { ... }) callback'ini tetikler. Gelen data nesnesinde sembol adı, alış, satış ve zaman damgası bulunur. Bu verileri doğrudan bir Express sunucusundan istemcilere yayabilir, Redis'e yazabilir veya bir mesaj kuyruğuna aktararak mikroservis mimarinize besleyebilirsiniz.
Yüksek trafikli bir uygulamada, WebSocket akışını tek bir Node.js süreci üzerinden alıp gelen tikleri kendi istemcilerinize dağıtmak (fan-out) yaygın bir mimaridir. Böylece binlerce kullanıcı için tek bir yukarı akış bağlantısı yeterli olur ve API kotanızı verimli kullanırsınız.
Kimlik doğrulama, REST ile birleştirme ve sembol kapsamı
Canlı akışta kimlik, bağlantı anında iletilen token ile doğrulanır; ayrıca tek seferlik sorgular için REST uç noktalarına Authorization: Bearer başlığıyla istek atabilirsiniz. Anahtarınızı .env dosyasında saklayıp process.env üzerinden okumak, dotenv gibi bir paketle Node.js projelerinde standart ve güvenli bir yöntemdir.
Pratikte iki yöntem birbirini tamamlar: uygulama açılışında REST ile mevcut fiyatların ilk halini (snapshot) çeker, ardından WebSocket akışıyla bu değerleri anlık olarak güncellersiniz. Bu desen, kullanıcı arayüzünüzün ilk saniyeden itibaren dolu görünmesini ve sonrasında canlı kalmasını sağlar.
Hasfiyat üzerinden gram ve has altın, çeyrek, ata ve cumhuriyet altını, ons XAU, gümüş, platin, paladyum, 995/916/750/585 ayar değerleri ile USD, EUR, GBP pariteleri ve serbest piyasa alış/satış fiyatları dahil 67'den fazla sembole erişirsiniz. Kaydolup API anahtarınızı aldıktan sonra yukarıdaki socket.io-client örneğini çalıştırarak dakikalar içinde canlı akışı Node.js uygulamanıza bağlayabilirsiniz.
Sık sorulan sorular
Node.js ile Hasfiyat altın API'sinden fiyat nasıl çekilir?
Node.js 18+ ile yerleşik `fetch` kullanabilirsiniz: `await fetch(url, { headers: { Authorization: 'Bearer API_ANAHTARINIZ' } })` ardından `await res.json()` ile JSON'u okursunuz. Eski sürümlerde `node-fetch` veya `axios` tercih edilir. Anlık akış için ayrıca `socket.io-client` ile WebSocket bağlantısı kurulur.
socket.io-client ile canlı fiyatlara nasıl abone olurum?
`socket.io-client` paketini kurup `const socket = io(url, { extraHeaders: { Authorization: 'Bearer API_ANAHTARINIZ' } })` ile bağlanın, `socket.on('price', data => {...})` ile fiyat olaylarını dinlersiniz. Socket.IO bağlantı koptuğunda varsayılan olarak otomatik yeniden bağlanır. Bu yöntemle saniye-altı gecikmeyle her değişimde veri alırsınız.
Node.js'te fetch ile Authorization header'ını nasıl eklerim?
`fetch(url, { headers: { Authorization: 'Bearer API_ANAHTARINIZ' } })` şeklinde header nesnesini isteğe geçirirsiniz. WebSocket tarafında ise `io(url, { extraHeaders: { Authorization: '...' } })` kullanılır. Anahtar her istekte doğrulandığından header eksikse 401 yanıtı dönersiniz.
Node.js ile altın alış ve satış fiyatını ayrı ayrı nasıl okurum?
JSON yanıtında her sembolün alış ve satış değerleri ayrı alanlarda geldiğinden `data['gram-altin'].alis` ve `data['gram-altin'].satis` şeklinde iki değeri ayrı okursunuz. Sarrafiye uygulamalarında makas önemli olduğu için ikisini birlikte göstermek yaygındır. Değerler ilgili kaynağın anlık kotasyonunu yansıtır.
Node.js'te fetch isteğinde hata yakalamayı nasıl yaparım?
İsteği `try/catch` bloğuna alın ve `if (!res.ok) throw new Error(res.status)` ile 4xx/5xx durumlarını kontrol edin; ağ hataları zaten `catch`'e düşer. `AbortController` ile zaman aşımı ekleyerek yanıt gecikirse isteği iptal edebilirsiniz. Böylece geçersiz anahtar veya bağlantı sorunlarında uygulamanız kontrollü davranır.
Node.js'te API anahtarımı .env ile nasıl güvenli tutarım?
Anahtarı koda yazmak yerine `.env` dosyasında saklayıp `dotenv` paketiyle `process.env.HASFIYAT_API_KEY` üzerinden okursunuz ve `.env`'i `.gitignore`'a eklersiniz. Anahtarı asla tarayıcıda çalışan istemci JavaScript'ine gömmeyin, çünkü orada herkese açık hale gelir. Sunucu tarafı Node.js kodunda tutmak en güvenli yoldur.
socket.io-client'ta yeniden bağlanmayı nasıl yapılandırırım?
`io(url, { reconnection: true, reconnectionAttempts: Infinity, reconnectionDelay: 1000 })` ile otomatik yeniden bağlanmayı yapılandırırsınız; kütüphane bağlantı koptuğunda tekrar bağlanmayı dener. `socket.on('reconnect', ...)` ile yeniden bağlanma anını yakalayabilirsiniz. Sunucudaki çoklu-kaynak failover sayesinde ayrıca bir veri kaynağı düşse de akış devam eder.
Node.js'te belirli sembollere nasıl abone olurum?
Bağlandıktan sonra `socket.emit('subscribe', { symbols: ['gram-altin', 'USD'] })` ile yalnızca ilgilendiğiniz sembolleri dinlersiniz. Gelen güncellemeleri `socket.on('price', data => {...})` içinde sembole göre ayırırsınız. Böylece tüm 67+ sembol yerine yalnızca gerekli veriyi alarak trafik azaltırsınız.
Node.js ile USD/TRY ve EUR/TRY kurlarını nasıl çekerim?
Döviz sembolleri aynı REST uç noktasından döndüğü için `data.USD.satis` ve `data.EUR.satis` şeklinde okursunuz. API çapraz pariteleri (USD, EUR, GBP) ve serbest piyasa alış/satış kurlarını sağlar. Kripto para ve BIST verileri bu API kapsamında değildir.
Node.js'te 401 hatası alıyorum, nasıl düzeltirim?
401 genellikle Authorization header'ının eksik veya anahtarın geçersiz olduğunu gösterir; header'ı `Bearer API_ANAHTARINIZ` formatında ve anahtarın aktif olduğundan emin olun. `process.env` ile okuyorsanız `dotenv` yapılandırmasının en üstte çağrıldığını ve değişkenin dolu geldiğini `console.log` ile kontrol edin. Header'ı WebSocket tarafında `extraHeaders` altında verdiğinizi doğrulayın.
Node.js ile çeyrek, yarım ve tam altın fiyatını nasıl alırım?
Sarrafiye ürünleri ayrı sembollerle döndüğü için `data['ceyrek-altin']`, `data['yarim-altin']` ve `data['tam-altin']` anahtarlarından alış-satış değerlerini okursunuz. API ata, cumhuriyet ve reşat çeşitlerini de kapsar. Her ürün için makası göstermek kullanıcıya değer katar.
Node.js'te axios ile fetch arasında hangisini seçmeliyim?
Node 18+ ile gelen yerleşik `fetch` çoğu durumda yeterlidir ve ek bağımlılık gerektirmez; ancak `axios` otomatik JSON çözme, interceptor ve daha kolay hata yönetimi sunar. Basit GET istekleri için `fetch`, karmaşık istemci mantığı için `axios` tercih edebilirsiniz. Her iki yöntemde de Authorization header'ını aynı şekilde eklersiniz.
Node.js'te ons altın (XAU) fiyatını nasıl alırım?
REST yanıtından ons altın sembolünü okuyarak `data.ons.satis` gibi dolar bazlı XAU değerine ulaşırsınız. Bu değeri USD/TRY kuruyla çarparak gram altın çevrimi yapabilirsiniz. API 67'den fazla sembol arasında ons XAU'yu da milisaniye gecikmeyle sağlar.
Node.js'te WebSocket verisini bir React/Vue arayüzüne nasıl aktarırım?
WebSocket bağlantısını sunucu tarafı Node.js'te tutup gelen fiyatları kendi backend'inizden istemci arayüzüne WebSocket veya SSE ile iletmeniz güvenli yaklaşımdır; böylece API anahtarı tarayıcıya sızmaz. React/Vue tarafında bu iç kanalı dinleyip state'i güncellersiniz. Anahtarı asla doğrudan ön yüz koduna koymayın.
Node.js'te fiyat değişince Trendyol/Hepsiburada ürünlerini nasıl güncellerim?
WebSocket ile aldığınız güncel altın fiyatını hesaplayıp pazaryeri API'leri üzerinden ilgili ürünün fiyatını Node.js'te güncelleyebilirsiniz. Hasfiyat Trendyol, Hepsiburada, N11, Amazon, Çiçeksepeti ve Pazarama gibi pazaryerleriyle entegrasyona uygundur. Fiyat güncellemesini olay tetiklemeli yaparak makası ve ayar bilgisini doğru sembolden aldığınızdan emin olun.
Node.js'te webhook ile fiyat bildirimini nasıl alırım?
Express ile bir POST uç noktası açıp API panelinde bu URL'yi webhook olarak tanımlarsınız; fiyat olayları JSON gövdesiyle iletilir ve `req.body` ile okursunuz. Webhook, sürekli açık bağlantı yönetmek istemediğinizde WebSocket'e bir alternatiftir. Gelen isteği işlemeden önce beklenen sembol ve alan yapısını doğrulayın.
Node.js'te gümüş, platin ve paladyum fiyatını nasıl çekerim?
Değerli metal sembolleri REST yanıtında yer alır; gümüş, platin ve paladyum için ilgili sembol anahtarlarından `data.gumus.satis` gibi değerleri okursunuz. API bu metalleri 14 kaynaktan derleyip alış-satış olarak sunar. Kripto para bu kapsamın dışında olduğundan yalnızca fiziki metaller ve dövizler döner.
Node.js'te ayar bazlı (995, 916, 750, 585) altın değerlerini nasıl alırım?
API ayar bazlı sembolleri hazır sunduğu için `data['995']`, `data['916']`, `data['750']` ve `data['585']` anahtarlarından değerleri doğrudan okursunuz, milyem hesabı yapmanıza gerek kalmaz. Bu, farklı ayarlarda ürün fiyatlayan kuyumcu uygulamaları için pratiktir. Her ayar için alış ve satış ayrı döner.
Node.js'te fetch'e zaman aşımı nasıl eklerim?
`AbortController` oluşturup `setTimeout` ile belirli süre sonra `controller.abort()` çağırın ve `fetch(url, { signal: controller.signal, headers })` şeklinde sinyali geçirin. Süre dolarsa istek iptal edilir ve `catch` bloğuna düşer. Böylece yanıt gecikmesinde uygulamanız takılıp kalmaz.
Node.js'te aynı anda birden fazla sembolü nasıl takip ederim?
WebSocket bağlandıktan sonra `socket.emit('subscribe', { symbols: [...] })` ile birden çok sembole tek abonelikte kaydolur, gelen her güncellemeyi `socket.on('price')` içinde sembole göre işlersiniz. REST tarafında ise tek GET isteğiyle tüm semboller döndüğünden hepsini birlikte okuyabilirsiniz. Canlı fiyat panoları için WebSocket yaklaşımı daha akıcıdır.
Node.js'te bir kaynak düşerse fiyat almaya devam eder miyim?
Evet, sunucu tarafında 14 kaynak arasında çoklu-kaynak failover çalışır; Harem, Hakan, Mayda gibi kaynaklardan biri düşerse fiyat otomatik diğerinden derlenir. Node.js istemciniz bunu fark etmeden aynı sembolden kesintisiz veri okumaya devam eder. Bu yüzden istemci tarafında ayrı kaynak yönetimi yazmanıza gerek yoktur.
Node.js'te 429 rate limit yerine WebSocket kullanmak neden daha iyi?
Sık aralıklarla REST GET atmak rate limit'e (429) takılabilir ve her istekte gecikme ekler; oysa `socket.io-client` aboneliği fiyat değiştikçe size veri iter, tekrar tekrar sormanız gerekmez. Bu hem kotayı korur hem saniye-altı gecikme sağlar. Sürekli canlı veri gereken panolarda WebSocket tercih edin.
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.

