maher-tradingview-api
Version:
Tradingview instant stocks API, indicator alerts, trading bot, and more !
111 lines (95 loc) • 3.71 kB
JavaScript
// 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();