Skip to main content

Python client for the Finlight API

Project description

Finlight Client – Python Library

A Python client library for interacting with the Finlight News API. Finlight delivers real-time and historical financial news articles, enriched with sentiment analysis, company tagging, and market metadata. This library makes it easy to integrate Finlight into your Python applications.


✨ Features

  • Fetch structured news articles with date parsing and metadata.
  • Filter by tickers, sources, languages, and date ranges.
  • Stream real-time news updates via WebSocket.
  • Auto-reconnect and ping/pong watchdog for WebSocket.
  • Strongly typed models using pydantic and dataclass.
  • Lightweight and developer-friendly.

📦 Installation

pip install finlight-client

🚀 Quick Start

Fetch Articles via REST API

from finlight_client import FinlightApi, ApiConfig
from finlight_client.models import GetArticlesParams

def main():
    # Initialize the client
    config = ApiConfig(api_key="your_api_key")
    client = FinlightApi(config)

    # Create query parameters
    params = GetArticlesParams(
        query="Nvidia",
        language="en",
        from_="2024-01-01",
        to="2024-12-31",
        includeContent=True
    )
    
    # Fetch articles
    response = client.articles.fetch_articles(params=params)

    # Print results
    for article in response['articles']:
        print(f"{article['publishDate']} | {article['title']}")

if __name__ == "__main__":
    main()

Stream Real-Time Articles via WebSocket

import asyncio
from finlight_client import FinlightApi, ApiConfig
from finlight_client.models import GetArticlesWebSocketParams

def on_article(article):
    print("📨 Received:", article.title)

async def main():
    # Initialize the client
    config = ApiConfig(api_key="your_api_key")
    client = FinlightApi(config)

    # Create WebSocket parameters
    payload = GetArticlesWebSocketParams(
        query="Nvidia",
        sources=["www.reuters.com"],
        language="en",
        extended=True,
    )

    # Connect and listen for articles
    await client.websocket.connect(
        request_payload=payload,
        on_article=on_article
    )

if __name__ == "__main__":
    asyncio.run(main())

⚙️ Configuration

ApiConfig allows fine-tuning of your API client:

Parameter Type Description Default
api_key str Your API key Required
base_url AnyHttpUrl Base REST API URL https://api.finlight.me
wss_url AnyHttpUrl WebSocket server URL wss://wss.finlight.me
timeout int Request timeout in ms 5000
retry_count int Retry attempts on failures 3

📚 API Overview

ArticleService.fetch_articles(params: GetArticlesParams) -> dict

  • Fetch articles with flexible filtering.
  • Automatically parses ISO date strings into datetime.

SourcesService.get_sources() -> List[Source]

  • Retrieve available news sources.
  • Returns list of sources with metadata about content availability.

WebSocketClient.connect(request_payload, on_article)

  • Subscribe to live article updates.
  • Reconnects automatically on disconnects.
  • Pings the server every 30s to keep the connection alive.

🧯 Error Handling

  • Invalid date strings raise clear Python ValueErrors.
  • REST and WebSocket exceptions are logged and managed.
  • WebSocket includes reconnect, watchdog, and ping/pong mechanisms.

📖 Additional Examples

Fetch Available Sources

from finlight_client import FinlightApi, ApiConfig

def main():
    config = ApiConfig(api_key="your_api_key")
    client = FinlightApi(config)
    
    sources = client.sources.get_sources()
    
    for source in sources:
        print(f"{source['domain']} - Content: {source['isContentAvailable']}")

if __name__ == "__main__":
    main()

🧰 Model Summary

GetArticlesParams

Query parameters to filter articles, including:

  • query: Search text
  • tickers: List of ticker symbols
  • sources, excludeSources: Source filtering
  • language: e.g., "en", "de"
  • from_, to: Date range (YYYY-MM-DD or ISO)
  • includeContent, includeEntities, excludeEmptyContent
  • order, page, pageSize

Article

Each article includes:

  • title, link, publishDate, source, language
  • summary, content, sentiment, confidence
  • images: List of image URLs
  • companies: List of tagged Company objects

🤝 Contributing

We welcome contributions and suggestions!

  • Fork this repo
  • Create a feature branch
  • Submit a pull request with tests if applicable

📄 License

MIT License – see LICENSE


🔗 Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finlight_client-1.2.0.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

finlight_client-1.2.0-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file finlight_client-1.2.0.tar.gz.

File metadata

  • Download URL: finlight_client-1.2.0.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.4

File hashes

Hashes for finlight_client-1.2.0.tar.gz
Algorithm Hash digest
SHA256 a3d08fc77d2ad3e84727cab3b398d91fa84c1e9c7c09574eae6601f0e4f39e1b
MD5 5cec82b1fa2f18ed1d9eb8aab0376f09
BLAKE2b-256 59143c3b032e0c32ada7425677e06fc84b43f8890ce7f5909dfd12f5c4304c1b

See more details on using hashes here.

File details

Details for the file finlight_client-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for finlight_client-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca864c9bcc3f2bcdbebe7d783225daa002381783078a09145b9fec613f60f23f
MD5 d5a65e08903acf87b27fac36eae39dbc
BLAKE2b-256 8aa738c6d286de7e3120435469ef30393a368bf34d9fe83e59e898ea44d7f4f1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page