यह पृष्ठ मशीन द्वारा अनुवादित है। अंग्रेज़ी संस्करण मूल स्रोत है और अधिक सटीक या अधिक अद्यतन हो सकता है। अंग्रेज़ी में देखें

Browser WebSocket

नेटिव WebSocket API का उपयोग करके वेब ब्राउज़र से सीधे finlight.me WebSocket API से कनेक्ट करें। यह डैशबोर्ड, ट्रेडिंग टर्मिनल और किसी भी फ्रंटएंड एप्लिकेशन के लिए आदर्श है जिसे सर्वर-साइड प्रॉक्सी के बिना रीयल-टाइम लेख अपडेट की आवश्यकता होती है।


यह कैसे काम करता है

  1. अपनी API कुंजी को क्वेरी पैरामीटर के रूप में देकर wss://wss.finlight.me (एनरिच्ड) या wss://wss.finlight.me/raw (raw) से कनेक्ट करें
  2. अपने फ़िल्टर मानदंड और एक clientNonce के साथ JSON संदेश भेजकर सदस्यता लें
  3. अपने कनेक्शन की पुष्टि करने वाला एक admit संदेश प्राप्त करें, उसके बाद लेख आने पर sendArticle संदेश
  4. हर 25 सेकंड में ping संदेश भेजकर कनेक्शन बनाए रखें
  5. ws.close() कॉल करके डिस्कनेक्ट करें

कनेक्शन URL

  • Name
    एनरिच्ड
    Type
    wss://wss.finlight.me
    Description

    पूर्ण संवर्धन वाले लेख: सेंटिमेंट विश्लेषण, इकाई निष्कर्षण, श्रेणियाँ और पूर्ण कंटेंट (आपके सब्सक्रिप्शन स्तर के आधार पर)।

  • Name
    Raw
    Type
    wss://wss.finlight.me/raw
    Description

    संवर्धन के बिना कम-विलंबता वाले raw लेख। उन उपयोग-मामलों के लिए सर्वोत्तम जहाँ गति सबसे पहले है और आपको लेख यथासंभव तेज़ी से चाहिए।

क्वेरी पैरामीटर

  • Name
    apiKey
    Type
    string
    Description

    आपकी finlight API कुंजी। प्रमाणीकरण के लिए उपयोग की जाती है क्योंकि ब्राउज़र WebSocket कस्टम हेडर सेट नहीं कर सकता।

  • Name
    takeover
    Type
    string
    Description

    जब आपकी समवर्ती कनेक्शन सीमा पहुँच जाए तो सबसे पुराने कनेक्शन को स्वतः बदलने के लिए "true" पर सेट करें।

  • Name
    clientVersion
    Type
    string
    Description

    आपके क्लाइंट एप्लिकेशन के लिए वैकल्पिक पहचानकर्ता। जैसे "my-dashboard/1.0"


सदस्यता संदेश

कनेक्शन खुलने के बाद, लेखों की सदस्यता लेने के लिए एक JSON संदेश भेजें। सर्वर एक admit संदेश के साथ प्रतिक्रिया देगा, फिर मेल खाने वाले लेख पुश करना शुरू करेगा।

  • Name
    clientNonce
    Type
    string
    Description

    इस सदस्यता अनुरोध के लिए एक अद्वितीय पहचानकर्ता (जैसे, UUID)। सर्वर इसे admit प्रतिक्रिया में वापस भेजता है।

  • Name
    query
    Type
    string
    Description

    प्रासंगिक लेख खोजने के लिए खोज क्वेरी। उन्नत क्वेरीज़ का समर्थन करती है।

  • Name
    sources
    Type
    string[]
    Description

    स्रोत डोमेन के अनुसार फ़िल्टर करें। जैसे ["www.reuters.com", "www.cnbc.com"]

  • Name
    excludeSources
    Type
    string[]
    Description

    विशिष्ट स्रोत डोमेन को बाहर रखता है।

  • Name
    tickers
    Type
    string[]
    Description

    टिकर प्रतीकों के अनुसार फ़िल्टर करें। जैसे ["AAPL", "NVDA"] (केवल एनरिच्ड)

  • Name
    countries
    Type
    string[]
    Description

    ISO 3166-1 alpha-2 में देश कोड के अनुसार फ़िल्टर करें। जैसे ["US", "DE"] (केवल एनरिच्ड)

  • Name
    language
    Type
    string
    Description

    भाषा के अनुसार फ़िल्टर करें (ISO 639-1)। डिफ़ॉल्ट en है, जो केवल अंग्रेज़ी लौटाता है और अन्य भाषाओं को बाहर रखता हैभाषा और कवरेज देखें।


सर्वर संदेश

सर्वर एक action फ़ील्ड वाले JSON संदेश भेजता है जो संदेश के प्रकार को दर्शाता है:

  • Name
    admit
    Type
    object
    Description

    सफल हैंडशेक के बाद भेजा जाता है। इसमें leaseId, serverNow (टाइमस्टैम्प) और आपका clientNonce होता है।

  • Name
    sendArticle
    Type
    object
    Description

    आपकी सदस्यता से मेल खाने वाला एक नया लेख। लेख डेटा data फ़ील्ड में होता है।

  • Name
    pong
    Type
    object
    Description

    आपकी ping हार्टबीट की प्रतिक्रिया।

  • Name
    preempted
    Type
    object
    Description

    आपका कनेक्शन किसी अन्य सत्र द्वारा बदल दिया गया (जब कोई अन्य क्लाइंट takeover: true के साथ कनेक्ट हुआ)।

  • Name
    error
    Type
    object
    Description

    एक त्रुटि हुई। विवरण के लिए data या error फ़ील्ड जाँचें।


WEBSOCKETब्राउज़र

पूर्ण उदाहरण

स्वचालित पुनः कनेक्शन और हार्टबीट के साथ एक न्यूनतम, फ्रेमवर्क-अज्ञेय ब्राउज़र WebSocket क्लाइंट:

  • क्वेरी पैरामीटर के माध्यम से प्रमाणित करता है
  • कनेक्ट होने पर एक सदस्यता संदेश भेजता है
  • 25-सेकंड का हार्टबीट अंतराल बनाए रखता है
  • एक्सपोनेंशियल बैकऑफ़ (500ms से 10s) के साथ पुनः कनेक्ट करता है
  • सभी सर्वर संदेश प्रकारों को संभालता है

Browser Client

WEBSOCKET
wss://wss.finlight.me
const API_KEY = 'YOUR_API_KEY'
const WSS_URL = 'wss://wss.finlight.me' // Use '/raw' path for raw articles

let ws = null
let pingInterval = null
let reconnectTimeout = null
let reconnectAttempt = 0

function connect(filters = {}) {
  const params = new URLSearchParams({
    apiKey: API_KEY,
    takeover: 'true',
    clientVersion: 'my-app/1.0',
  })
  const url = `${WSS_URL}?${params}`

  ws = new WebSocket(url)

  ws.onopen = () => {
    console.log('Connected')
    reconnectAttempt = 0

    // Send subscription with filters
    ws.send(JSON.stringify({
      clientNonce: crypto.randomUUID(),
      query: filters.query || '',
      language: filters.language || 'en',
      sources: filters.sources || [],
      tickers: filters.tickers || [],
      countries: filters.countries || [],
    }))

    // Start heartbeat
    pingInterval = setInterval(() => {
      if (ws.readyState === WebSocket.OPEN) {
        ws.send(JSON.stringify({
          action: 'ping',
          t: Date.now(),
        }))
      }
    }, 25000)
  }

  ws.onmessage = (event) => {
    const msg = JSON.parse(event.data)

    switch (msg.action) {
      case 'admit':
        console.log('Admitted, lease:', msg.leaseId)
        break
      case 'sendArticle':
        console.log('Article:', msg.data.title)
        // Handle the article here
        break
      case 'pong':
        break // Heartbeat OK
      case 'preempted':
        console.warn('Connection replaced')
        break
      case 'error':
        console.error('Server error:', msg.data || msg.error)
        break
    }
  }

  ws.onclose = (event) => {
    clearInterval(pingInterval)

    // Don't reconnect on policy violations
    if (event.code === 1008 || event.code === 4002) {
      console.error('Connection blocked')
      return
    }

    // Exponential backoff reconnect
    const delay = Math.min(500 * 2 ** reconnectAttempt, 10000)
    reconnectAttempt++
    console.log(`Reconnecting in ${delay}ms...`)
    reconnectTimeout = setTimeout(() => connect(filters), delay)
  }

  ws.onerror = () => console.error('WebSocket error')
}

function disconnect() {
  clearInterval(pingInterval)
  clearTimeout(reconnectTimeout)
  if (ws) ws.close(1000)
}

// Usage
connect({ query: 'Nvidia', language: 'en', countries: ['US'] })

admit Response

{
  "action": "admit",
  "leaseId": "a1b2c3d4-e5f6-4789-abcd-ef0123456789",
  "serverNow": 1708185600000,
  "clientNonce": "your-uuid-here"
}

sendArticle Response

{
  "action": "sendArticle",
  "data": {
    "link": "https://www.reuters.com/technology/nvidia-2026-02-17",
    "source": "www.reuters.com",
    "title": "Nvidia Reports Record Revenue",
    "summary": "Nvidia announced record quarterly revenue...",
    "publishDate": "2026-02-17T10:30:00Z",
    "language": "en",
    "sentiment": "positive",
    "confidence": 0.92,
    "countries": ["US"],
    "categories": ["markets", "technology"],
    "companies": [
      {
        "name": "NVIDIA Corporation",
        "ticker": "NVDA",
        "country": "US"
      }
    ]
  }
}

एनरिच्ड बनाम Raw

सुविधाएनरिच्ड (/)Raw (/raw)
सेंटिमेंट विश्लेषणहाँनहीं
इकाई निष्कर्षण (कंपनियाँ)हाँ (स्तर पर निर्भर)नहीं
श्रेणियाँहाँनहीं
पूर्ण कंटेंटहाँ (स्तर पर निर्भर)नहीं
विलंबतामानकसबसे कम
फ़िल्टर: tickersहाँनहीं
फ़िल्टर: countriesहाँनहीं
फ़िल्टर: query, sources, languageहाँहाँ

आगे क्या?

  • पूर्ण लेख मॉडल और सभी उपलब्ध फ़ील्ड के लिए एनरिच्ड सदस्यता पृष्ठ देखें
  • raw-विशिष्ट विवरण के लिए Raw सदस्यता देखें
  • अपने फ़िल्टर परिष्कृत करने के लिए उन्नत क्वेरी निर्माण के बारे में जानें
  • अपनी रीयल-टाइम स्ट्रीम के साथ-साथ ऐतिहासिक लेख खोज के लिए REST API का उपयोग करें