UNPKG

maher-tradingview-api

Version:

Tradingview instant stocks API, indicator alerts, trading bot, and more !

111 lines (95 loc) 3.71 kB
// API Service for Market Data class MarketDataService { constructor(baseURL = '') { this.baseURL = baseURL || window.location.origin; this.controllers = new Map(); } // إلغاء الطلبات السابقة لنفس الرمز cancelPreviousRequest(symbol) { if (this.controllers.has(symbol)) { this.controllers.get(symbol).abort(); this.controllers.delete(symbol); } } // الحصول على بيانات السوق async getMarketData(symbol, timeframe = '1d') { try { this.cancelPreviousRequest(symbol); const controller = new AbortController(); this.controllers.set(symbol, controller); const response = await fetch( `${this.baseURL}/api/market-data/${symbol}?timeframe=${timeframe}`, { signal: controller.signal } ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); this.controllers.delete(symbol); return data; } catch (error) { if (error.name === 'AbortError') { console.log('تم إلغاء الطلب السابق'); return null; } throw error; } } // تحويل البيانات إلى التنسيق المطلوب للرسوم البيانية transformDataForChart(data) { if (!data || !data.data || !Array.isArray(data.data)) { return null; } return { labels: data.data.map(candle => { const date = new Date(candle.time); return date.toLocaleDateString('ar-SA'); }), datasets: [{ label: data.symbol, data: data.data.map(candle => ({ x: new Date(candle.time), y: candle.close, open: candle.open, high: candle.high, low: candle.low, close: candle.close, volume: candle.volume })) }] }; } // الحصول على معلومات إضافية عن السهم async getSymbolInfo(symbol) { try { const response = await fetch(`${this.baseURL}/api/symbol-info/${symbol}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return await response.json(); } catch (error) { console.error('خطأ في الحصول على معلومات السهم:', error); throw error; } } // تحديث البيانات في الوقت الحقيقي subscribeToRealtimeUpdates(symbol, callback) { const ws = new WebSocket(`${this.baseURL.replace('http', 'ws')}/ws/market-data/${symbol}`); ws.onmessage = (event) => { try { const data = JSON.parse(event.data); callback(data); } catch (error) { console.error('خطأ في معالجة بيانات الوقت الحقيقي:', error); } }; ws.onerror = (error) => { console.error('خطأ في اتصال WebSocket:', error); }; return () => { ws.close(); }; } } // تصدير الخدمة window.MarketDataService = new MarketDataService();