Aller au contenu
Table des matières

AINewsTracker

AINewsTracker collecte des actualités financières, analyse le texte des articles et expose les données obtenues avec FastAPI. Un parcours distinct utilise les informations enregistrées pour des backtests historiques.

API webAPIDocker
PythonFastAPIMongoDBRedisPoetryPytest
  • Mis à jour

1. Aperçu

app/main.py assemble le service, enregistre les groupes de routes et configure le cache Redis. Le traitement des actualités passe par un service, les mesures de texte et le dépôt d’articles avant d’atteindre MongoDB.

L’article associé, Suivre l’actualité financière avec AINewsTracker, suit ce parcours depuis un flux entrant jusqu’à l’article enregistré.

2. Cas d’utilisation

Service FastAPI d'AlgoÉTS qui collecte des nouvelles financières, les note avec FinBERT et les range dans MongoDB.

Diagramme de cas d’utilisation de AINewsTracker : Récupérer des nouvelles; Noter le sentiment; Chercher par entreprise; Charger sociétés et nouvelles; Fournir les articles notésAINewsTrackerRécupérer des nouvellesNoter le sentimentChercher par entrepriseCharger sociétés et nouvellesFournir les articles notésAnalyste quantitatif«système»Sources de nouvelles«système»Service de backtest
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Récupérer des nouvelles
Analyste quantitatifSources de nouvelles

Les routes /news interrogent le flux RSS 8-K de Financial Modeling Prep, GNews ou un flux nommé avec feedparser, téléchargent le texte de chaque article et l'enregistrent ; au-delà de 10, le travail passe en tâche de fond.

Noter le sentiment
Analyste quantitatif

TextMetrics charge ProsusAI/finbert pour le sentiment, Jean-Baptiste/roberta-ticker pour repérer les tickers et distilbart-cnn-12-6 pour les résumés ; GET /articles/{article_id}/score renvoie la note enregistrée.

Chercher par entreprise
Analyste quantitatif

/company enregistre les tickers, et /articles/articles_by_company_id/{company_id} ou POST /articles/articles_by_company_ids renvoient les articles liés à une ou plusieurs entreprises.

Charger sociétés et nouvelles
Analyste quantitatifSources de nouvelles

POST /seed/seed_companies et /seed/seed_news lancent CompanySeeder et NewsSeeder en tâche de fond ; NewsSeeder lit les nouvelles boursières de Financial Modeling Prep avec FMP_API_KEY et enregistre les articles dans MongoDB.

Fournir les articles notés
Service de backtest

GET /v1/articles, protégé par un jeton de service Bearer (AINEWSTRACKER_SERVICE_TOKEN), renvoie les articles filtrés par symboles et période, avec étiquette de sentiment, probabilités et nom du modèle, paginés par curseur.

2.1. Scénario : Collecter et interroger les nouvelles d'Apple en local

  1. Copier .env.example en .env, renseigner FMP_API_KEY, puis lancer docker-compose up --build pour démarrer l'API avec MongoDB et Redis.
  2. Ouvrir http://localhost:8000/api/v1/docs et appeler POST /seed/seed_companies.
  3. Appeler POST /seed/seed_news ; NewsSeeder lit les nouvelles boursières de Financial Modeling Prep en tâche de fond et enregistre les articles notés.
  4. Lire les articles avec GET /articles/ et vérifier l'un d'eux avec GET /articles/{article_id}/score.
  5. Depuis un service de backtest, appeler GET /v1/articles?symbols=AAPL avec le jeton de service Bearer.

Fichiers consultésREADME.mdapp/main.pyapp/routers/news.pyapp/routers/article.pyapp/routers/seed.pyapp/routers/integration.pyapp/core/services/news.pyapp/core/services/metrics.pydocker-compose.ymldocs/tickertools-integration.mdapp/seed/news.py.env.example

3. Démarrage

cp .env.example .env
pip install poetry
poetry shell
poetry install
poetry run pytest
poetry run uvicorn app.main:app --reload

La documentation FastAPI est disponible à http://localhost:8000/api/v1/docs selon le guide du projet. Avec Docker :

docker-compose up --build

4. Guide du dépôt

  • app/main.py crée l’application, enregistre les routes et configure le cache.
  • app/routers/ définit les routes des actualités, articles, entreprises, utilisateurs, données initiales et stratégies.
  • app/core/services/ contient le traitement des actualités et les mesures de texte.
  • app/core/repo/ contient les opérations de persistance regroupées par domaine.
  • app/models/ définit les enregistrements acceptés et retournés.
  • app/seed/ charge les entreprises et actualités depuis des sources externes.
  • app/core/trading/strategy.py traite les demandes de stratégie.

5. Fonctions

  • ingérer des actualités depuis RSS, GNews et des flux configurés;
  • analyser le sentiment, les sujets et l’attribution de tickers;
  • gérer les articles, entreprises, actualités et utilisateurs;
  • amorcer les données d’entreprises et d’actualités;
  • exécuter des stratégies pour une ou plusieurs entreprises;
  • fonctionner avec Poetry ou Docker Compose.

6. Architecture

Cette vue résume les frontières d’exécution vérifiées par GitDiagram. Le diagramme interactif complet développe le modèle et relie les composants à leur code.

flowchart TD
  Client(("Client API")) --> App["Application FastAPI<br/>app/main.py"]
  App --> Routes["Routes<br/>app/routers/"]
  Routes --> News["Traitement des actualités<br/>app/core/services/news.py"]
  News --> Metrics["Mesures de texte<br/>app/core/services/metrics.py"]
  News --> Repos["Dépôts<br/>app/core/repo/"]
  Routes --> Repos
  Repos --> Mongo[("MongoDB<br/>app/core/database/db.py")]
  App --> Redis[("Cache Redis<br/>app/core/database/db.py")]
  Sources{{"Sources financières"}} --> Seeders["Amorçage<br/>app/seed/"]
  Seeders --> News
  Routes --> Strategy["Stratégie<br/>app/core/trading/strategy.py"]
FrontièreResponsabilitéPreuve
ApplicationCycle FastAPI, enregistrement des routes et cacheapp/main.py
Interface HTTPRoutes des actualités, articles, entreprises, utilisateurs, données initiales et stratégiesapp/routers/
AnalyseTraitement des flux et mesures de texteapp/core/services/news.py, app/core/services/metrics.py
DonnéesModèles Article, Company, News et Userapp/models/
PersistanceOpérations MongoDB regroupées par domaineapp/core/repo/
OpérationsAmorçage des données et exécution de stratégiesapp/seed/, app/core/trading/strategy.py

7. Contrat API

DomaineOpérations documentées
ActualitésCréer et lire; récupérer RSS, GNews et les entrées d’un flux
ArticlesCréer, lister, lire et supprimer; consulter le score d’un article
EntreprisesCréer, lister et rechercher par ticker
StratégiesExécuter une stratégie pour une entreprise ou une liste soumise

Le document OpenAPI de l’application en cours d’exécution fait autorité pour les schémas exacts.

8. Déploiement

Le dépôt contient un Dockerfile à la racine, un docker-compose.yml de développement et un répertoire deploy/. L’ordre des dépendances Compose est un ordre de démarrage, pas une garantie de disponibilité.

9. Structure du code

app/
├── main.py
├── core/{database,repo,services,telemetry,trading}/
├── models/
├── routers/
└── seed/
tests/
deploy/
monitoring/

10. Limites

  • Les scores de sentiment et sujets sont des données d’analyse, pas des conseils financiers ni une preuve de causalité.
  • Les backtests historiques ne garantissent pas les résultats futurs.
  • Les flux et API externes ont leurs propres identifiants, disponibilités et conditions d’utilisation.
  • Les routes peuvent changer; le code et le document OpenAPI actuels ont priorité.

11. Sources

12. Pipeline CI/CD

5 workflows GitHub Actions, 5 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.

Mermaid Déroulement du pipeline
flowchart LR
  subgraph wf0["Python application CD"]
    direction LR
    wf0_setup[["setup<br/>ubuntu-latest"]]
  end
  subgraph wf1["Python application CI"]
    direction LR
    wf1_setup["setup<br/>ubuntu-latest"]
  end
  subgraph wf2["CodeQL"]
    direction LR
    wf2_analyze["Analyze<br/>ubuntu-latest"]
  end
  subgraph wf3["Docker CI"]
    direction LR
    wf3_docker[["docker<br/>ubuntu-latest"]]
  end
  subgraph wf4["AINewsTracker Docs"]
    direction LR
    wf4_build_and_deploy[["build_and_deploy<br/>ubuntu-latest"]]
  end
  t0(["publication"])
  t1(["demande de fusion · push"])
  t2(["push · demande de fusion · planification"])
  t3(["push"])
  t4(["push · demande de fusion · lancement manuel"])
  d0[("Registre de conteneurs")]
  d1[("GitHub Pages")]
  t0 --> wf0_setup
  wf0_setup -.-> d0
  t1 --> wf1_setup
  t2 --> wf2_analyze
  t3 --> wf3_docker
  wf3_docker -.-> d0
  t4 --> wf4_build_and_deploy
  wf4_build_and_deploy -.-> d1
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
Python application CD
.github/workflows/cd.yml
publication
  • setup ubuntu-latest
    Checkout (GitHub) · Set up Python · Jimver/cuda-toolkit · Cache Python dependencies · Run poetry · Install dependencies
Registre de conteneurs
Python application CI
.github/workflows/ci.yml
demande de fusion, push
  • setup ubuntu-latest
    Checkout (GitHub) · Install system packages · Set up Python · Cache Python dependencies · Run poetry · Install CUDA
—
CodeQL
.github/workflows/codeql.yml
push, demande de fusion, planification
  • Analyze ubuntu-latest
    Checkout repository · Set up Python · Cache Python dependencies · Run image · Initialize CodeQL · Autobuild
—
Docker CI
.github/workflows/docker.yml
push
  • docker ubuntu-latest
    Set up QEMU · Set up Docker Buildx · Login to Docker Hub · Build and push
Registre de conteneurs
AINewsTracker Docs
.github/workflows/docs.yml
push, demande de fusion, lancement manuel
  • build_and_deploy ubuntu-latest
    actions/checkout · Set up Python · Cache Python dependencies · Run poetry · Install project dependencies · Build mkdocs
GitHub Pages

Généré à partir du code au commit 74a8366.

13. Schéma de déploiement

Mermaid Schéma de déploiement
flowchart LR
  repo[("Dépôt GitHub")]
  ci[["GitHub Actions<br/>5 workflows"]]
  image["Image Docker<br/>FROM tiangolo/uvicorn-gunicorn-fastapi:python3.10"]
  pub_Container_registry[("Registre de conteneurs")]
  pub_GitHub_Pages[("GitHub Pages")]
  host_Vercel("Vercel<br/>vercel.json")
  host_MkDocs_site("Site de documentation (MkDocs)<br/>mkdocs.yml")
  subgraph compose["Docker Compose"]
    svc_redis["redis"]
    svc_mongo["mongo"]
    svc_web["web"]
    svc_prometheus["prometheus"]
  end
  repo -->|"push ou demande de fusion"| ci
  ci -->|"docker build"| image
  image -->|"publie"| pub_Container_registry
  ci -->|"publie"| pub_GitHub_Pages
  ci -.->|"configuré"| host_Vercel
  ci -.->|"configuré"| host_MkDocs_site
  image -->|"docker compose up"| compose

14. Dépendances externes

127 paquets déclarés (127 à l’exécution, 0 pour le développement) dans pyproject.toml, requirements.txt.

Tableau des paquets 80 / 127
Dépendances externes
PaquetVersionUsageRôleRegistre
fastapi^0.81.0exécutionCadriciel webpypi.org
pydantic^1.10.8exécutionValidation des donnéespypi.org
python-multipart^0.0.6exécutionA streaming multipart parser for Pythonpypi.org
pymongo^4.3.3exécutionAccès aux donnéespypi.org
python-dotenv^0.19.2exécutionConfigurationpypi.org
uvicorn—exécutionServeur d’applicationpypi.org
anyio^3.7.0exécutionHigh-level concurrency and networking framework on top of asyncio or Triopypi.org
aioredis^2.0.0exécutionAccès aux donnéespypi.org
configparser^5.3.0exécutionConfigurationpypi.org
contractions^0.1.73exécutionFixes contractions such as you're to you arepypi.org
fastapi_cache2^0.2.1exécutionCache for FastAPIpypi.org
fastapi_health^0.4.0exécutionHeath check on FastAPI applications.pypi.org
matplotlib^3.5.1exécutionGraphiquespypi.org
openpyxl^3.1.1exécutionAnalyse de donnéespypi.org
pandas^1.5.3exécutionAnalyse de donnéespypi.org
pandas-ta^0.3.14bexécutionAnalyse de donnéespypi.org
prometheus-fastapi-instrumentator^5.9.1exécutionJournalisation et observabilitépypi.org
redis^4.5.1exécutionAccès aux donnéespypi.org
rich*exécutionLigne de commandepypi.org
structlog^23.1.0exécutionJournalisation et observabilitépypi.org
prometheus-client^0.17.0exécutionJournalisation et observabilitépypi.org
aiofiles^23.1.0exécutionFile support for asyncio.pypi.org
types-aiofiles^23.1.0.4exécutionTypagepypi.org
slowapi^0.1.8exécutionA rate limiting extension for Starlette and Fastapipypi.org
asyncio^3.4.3exécutionDeprecated backport of asyncio; use the stdlib package insteadpypi.org
jose^1.0.0exécutionAuthentification et sécuritépypi.org
pyjwt^2.7.0exécutionAuthentification et sécuritépypi.org
python-jose^3.3.0exécutionJOSE implementation in Pythonpypi.org
passlib^1.7.4exécutioncomprehensive password hashing framework supporting over 30 schemespypi.org
transformers^4.30.1exécutionApprentissage automatique et IApypi.org
torch^2.0.1exécutionApprentissage automatique et IApypi.org
motor^3.1.2exécutionAccès aux donnéespypi.org
requests^2.31.0exécutionClient HTTPpypi.org
beautifulsoup4^4.12.2exécutionExtraction web et analysepypi.org
feedparser^6.0.10exécutionExtraction web et analysepypi.org
types-redis^4.5.5.2exécutionTypagepypi.org
spacy^3.5.3exécutionApprentissage automatique et IApypi.org
finnhub-python^2.4.18exécutionFinnhub APIpypi.org
aiohttp==3.8.4exécutionClient HTTPpypi.org
aiosignal==1.3.1exécutionaiosignal: a list of registered asynchronous callbackspypi.org
anyascii==0.3.2exécutionUnicode to ASCII transliterationpypi.org
async-timeout==4.0.2exécutionTimeout context manager for asyncio programspypi.org
attrs==23.1.0exécutionValidation des donnéespypi.org
blis==0.7.9exécutionThe Blis BLAS-like linear algebra library, as a self-contained C-extension.pypi.org
catalogue==2.0.8exécutionSuper lightweight function registries for your librarypypi.org
certifi==2023.5.7exécutionPython package for providing Mozilla's CA Bundle.pypi.org
cffi==1.15.1exécutionForeign Function Interface for Python calling C code.pypi.org
charset-normalizer==3.1.0exécutionThe Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.pypi.org
click==8.1.3exécutionLigne de commandepypi.org
colorama==0.4.6exécutionLigne de commandepypi.org
confection==0.0.4exécutionThe sweetest config system for Pythonpypi.org
contourpy==1.1.0exécutionPython library for calculating contours of 2D quadrilateral gridspypi.org
cryptography==41.0.1exécutionAuthentification et sécuritépypi.org
cycler==0.11.0exécutionComposable style cyclespypi.org
cymem==2.0.7exécutionManage calls to calloc/free through Cythonpypi.org
deprecated==1.2.14exécutionPython @deprecated decorator to deprecate old python classes, functions or methods.pypi.org
dnspython==2.3.0exécutionDNS toolkitpypi.org
ecdsa==0.18.0exécutionECDSA cryptographic signature library (pure python)pypi.org
et-xmlfile==1.1.0exécutionAn implementation of lxml.xmlfile for the standard librarypypi.org
exceptiongroup==1.1.1exécutionBackport of PEP 654 (exception groups)pypi.org
fastapi-cache2==0.2.1exécution—pypi.org
fastapi-health==0.4.0exécution—pypi.org
filelock==3.12.2exécutionA platform independent file lock.pypi.org
fonttools==4.40.0exécutionTools to manipulate font filespypi.org
frozenlist==1.3.3exécutionA list-like structure which implements collections.abc.MutableSequencepypi.org
fsspec==2023.6.0exécutionFile-system specificationpypi.org
h11==0.14.0exécutionA pure-Python, bring-your-own-I/O implementation of HTTP/1.1pypi.org
huggingface-hub==0.15.1exécutionApprentissage automatique et IApypi.org
idna==3.4exécutionInternationalized Domain Names in Applications (IDNA)pypi.org
importlib-resources==5.12.0exécutionRead resources from Python packagespypi.org
jinja2==3.1.2exécutionGabaritspypi.org
kiwisolver==1.4.4exécutionA fast implementation of the Cassowary constraint solverpypi.org
langcodes==3.3.0exécutionTools for labeling human languages with IETF language tagspypi.org
limits==3.5.0exécutionRate limiting utilitiespypi.org
markdown-it-py==3.0.0exécutionPython port of markdown-it. Markdown parsing, done right!pypi.org
markupsafe==2.1.3exécutionSafely add untrusted strings to HTML/XML markup.pypi.org
mdurl==0.1.2exécutionMarkdown URL utilitiespypi.org
mpmath==1.3.0exécutionPython library for arbitrary-precision floating-point arithmeticpypi.org
multidict==6.0.4exécution—pypi.org
murmurhash==1.0.9exécutionCython bindings for MurmurHashpypi.org

47 autres paquets figurent dans les manifestes.

15. Glossaire

Dépôt

Les fichiers source, la configuration et l’historique versionné d’un projet.

README

Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.

Dépendance

Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.

API

Une interface par laquelle des composants logiciels échangent des requêtes et des résultats. Une API n’utilise pas nécessairement HTTP.

HTTP

Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.

Conteneur

Un environnement de processus isolé créé à partir d’une image. Les données persistantes nécessitent un stockage hors de son système de fichiers temporaire.

Docker Compose

Un format de configuration et un outil pour lancer des conteneurs, réseaux et volumes associés. L’ordre de démarrage ne garantit pas qu’un service est prêt.

Volume et montage de dossier

Un volume est un stockage géré par la plateforme de conteneurs ; un montage de dossier expose un chemin de l’hôte dans un conteneur.

Port publié

Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.

Interface en ligne de commande

Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.

Compilation

Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.

Mermaid

Un langage de diagrammes textuel. Les nœuds et liens décrivent un modèle ; le diagramme n’exécute pas le projet.

Backend

Une implémentation derrière une interface commune. Selon le contexte, il peut s’agir d’un service côté serveur ou d’une implémentation graphique, d’entrée ou de stockage.

Base de données

Un système de stockage et d’interrogation de données structurées. Son schéma, ses règles d’accès et sa persistance déterminent comment l’application utilise ces données.

16. Références

  1. AlgoETS. (2026, 5 novembre). AINewsTracker. [Software repository] github.com.
  2. Documentation publiée. (2026, 5 novembre). [Web page] algoets.github.io.
  3. GitDiagram interactif. (2026, 5 novembre). [Web page] gitdiagram.com.
  4. AlgoETS. (2026, 5 novembre). app/main.py. [Source file or documentation] github.com.
  5. AlgoETS. (2026, 5 novembre). app/routers/news.py. [Source file or documentation] github.com.
  6. AlgoETS. (2026, 5 novembre). app/core/services/news.py. [Source file or documentation] github.com.
  7. AlgoETS. (2026, 5 novembre). app/core/services/metrics.py. [Source file or documentation] github.com.

Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.