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.
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.
- 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
- Copier .env.example en .env, renseigner FMP_API_KEY, puis lancer docker-compose up --build pour démarrer l'API avec MongoDB et Redis.
- Ouvrir http://localhost:8000/api/v1/docs et appeler POST /seed/seed_companies.
- 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.
- Lire les articles avec GET /articles/ et vérifier l'un d'eux avec GET /articles/{article_id}/score.
- 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.pycré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.pytraite 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ère | Responsabilité | Preuve |
|---|---|---|
| Application | Cycle FastAPI, enregistrement des routes et cache | app/main.py |
| Interface HTTP | Routes des actualités, articles, entreprises, utilisateurs, données initiales et stratégies | app/routers/ |
| Analyse | Traitement des flux et mesures de texte | app/core/services/news.py, app/core/services/metrics.py |
| Données | Modèles Article, Company, News et User | app/models/ |
| Persistance | Opérations MongoDB regroupées par domaine | app/core/repo/ |
| Opérations | Amorçage des données et exécution de stratégies | app/seed/, app/core/trading/strategy.py |
7. Contrat API
| Domaine | Opérations documentées |
|---|---|
| Actualités | Créer et lire; récupérer RSS, GNews et les entrées d’un flux |
| Articles | Créer, lister, lire et supprimer; consulter le score d’un article |
| Entreprises | Créer, lister et rechercher par ticker |
| Stratégies | Exé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
- Dépôt GitHub
- Documentation du projet
- Architecture GitDiagram
app/main.pyapp/routers/news.pyapp/core/services/news.pyapp/core/services/metrics.py
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
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
Python application CD.github/workflows/cd.yml | publication |
| Registre de conteneurs |
Python application CI.github/workflows/ci.yml | demande de fusion, push |
| — |
CodeQL.github/workflows/codeql.yml | push, demande de fusion, planification |
| — |
Docker CI.github/workflows/docker.yml | push |
| Registre de conteneurs |
AINewsTracker Docs.github/workflows/docs.yml | push, demande de fusion, lancement manuel |
| 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
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
fastapi | ^0.81.0 | exécution | Cadriciel web | pypi.org |
pydantic | ^1.10.8 | exécution | Validation des données | pypi.org |
python-multipart | ^0.0.6 | exécution | A streaming multipart parser for Python | pypi.org |
pymongo | ^4.3.3 | exécution | Accès aux données | pypi.org |
python-dotenv | ^0.19.2 | exécution | Configuration | pypi.org |
uvicorn | — | exécution | Serveur d’application | pypi.org |
anyio | ^3.7.0 | exécution | High-level concurrency and networking framework on top of asyncio or Trio | pypi.org |
aioredis | ^2.0.0 | exécution | Accès aux données | pypi.org |
configparser | ^5.3.0 | exécution | Configuration | pypi.org |
contractions | ^0.1.73 | exécution | Fixes contractions such as you're to you are | pypi.org |
fastapi_cache2 | ^0.2.1 | exécution | Cache for FastAPI | pypi.org |
fastapi_health | ^0.4.0 | exécution | Heath check on FastAPI applications. | pypi.org |
matplotlib | ^3.5.1 | exécution | Graphiques | pypi.org |
openpyxl | ^3.1.1 | exécution | Analyse de données | pypi.org |
pandas | ^1.5.3 | exécution | Analyse de données | pypi.org |
pandas-ta | ^0.3.14b | exécution | Analyse de données | pypi.org |
prometheus-fastapi-instrumentator | ^5.9.1 | exécution | Journalisation et observabilité | pypi.org |
redis | ^4.5.1 | exécution | Accès aux données | pypi.org |
rich | * | exécution | Ligne de commande | pypi.org |
structlog | ^23.1.0 | exécution | Journalisation et observabilité | pypi.org |
prometheus-client | ^0.17.0 | exécution | Journalisation et observabilité | pypi.org |
aiofiles | ^23.1.0 | exécution | File support for asyncio. | pypi.org |
types-aiofiles | ^23.1.0.4 | exécution | Typage | pypi.org |
slowapi | ^0.1.8 | exécution | A rate limiting extension for Starlette and Fastapi | pypi.org |
asyncio | ^3.4.3 | exécution | Deprecated backport of asyncio; use the stdlib package instead | pypi.org |
jose | ^1.0.0 | exécution | Authentification et sécurité | pypi.org |
pyjwt | ^2.7.0 | exécution | Authentification et sécurité | pypi.org |
python-jose | ^3.3.0 | exécution | JOSE implementation in Python | pypi.org |
passlib | ^1.7.4 | exécution | comprehensive password hashing framework supporting over 30 schemes | pypi.org |
transformers | ^4.30.1 | exécution | Apprentissage automatique et IA | pypi.org |
torch | ^2.0.1 | exécution | Apprentissage automatique et IA | pypi.org |
motor | ^3.1.2 | exécution | Accès aux données | pypi.org |
requests | ^2.31.0 | exécution | Client HTTP | pypi.org |
beautifulsoup4 | ^4.12.2 | exécution | Extraction web et analyse | pypi.org |
feedparser | ^6.0.10 | exécution | Extraction web et analyse | pypi.org |
types-redis | ^4.5.5.2 | exécution | Typage | pypi.org |
spacy | ^3.5.3 | exécution | Apprentissage automatique et IA | pypi.org |
finnhub-python | ^2.4.18 | exécution | Finnhub API | pypi.org |
aiohttp | ==3.8.4 | exécution | Client HTTP | pypi.org |
aiosignal | ==1.3.1 | exécution | aiosignal: a list of registered asynchronous callbacks | pypi.org |
anyascii | ==0.3.2 | exécution | Unicode to ASCII transliteration | pypi.org |
async-timeout | ==4.0.2 | exécution | Timeout context manager for asyncio programs | pypi.org |
attrs | ==23.1.0 | exécution | Validation des données | pypi.org |
blis | ==0.7.9 | exécution | The Blis BLAS-like linear algebra library, as a self-contained C-extension. | pypi.org |
catalogue | ==2.0.8 | exécution | Super lightweight function registries for your library | pypi.org |
certifi | ==2023.5.7 | exécution | Python package for providing Mozilla's CA Bundle. | pypi.org |
cffi | ==1.15.1 | exécution | Foreign Function Interface for Python calling C code. | pypi.org |
charset-normalizer | ==3.1.0 | exécution | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. | pypi.org |
click | ==8.1.3 | exécution | Ligne de commande | pypi.org |
colorama | ==0.4.6 | exécution | Ligne de commande | pypi.org |
confection | ==0.0.4 | exécution | The sweetest config system for Python | pypi.org |
contourpy | ==1.1.0 | exécution | Python library for calculating contours of 2D quadrilateral grids | pypi.org |
cryptography | ==41.0.1 | exécution | Authentification et sécurité | pypi.org |
cycler | ==0.11.0 | exécution | Composable style cycles | pypi.org |
cymem | ==2.0.7 | exécution | Manage calls to calloc/free through Cython | pypi.org |
deprecated | ==1.2.14 | exécution | Python @deprecated decorator to deprecate old python classes, functions or methods. | pypi.org |
dnspython | ==2.3.0 | exécution | DNS toolkit | pypi.org |
ecdsa | ==0.18.0 | exécution | ECDSA cryptographic signature library (pure python) | pypi.org |
et-xmlfile | ==1.1.0 | exécution | An implementation of lxml.xmlfile for the standard library | pypi.org |
exceptiongroup | ==1.1.1 | exécution | Backport of PEP 654 (exception groups) | pypi.org |
fastapi-cache2 | ==0.2.1 | exécution | — | pypi.org |
fastapi-health | ==0.4.0 | exécution | — | pypi.org |
filelock | ==3.12.2 | exécution | A platform independent file lock. | pypi.org |
fonttools | ==4.40.0 | exécution | Tools to manipulate font files | pypi.org |
frozenlist | ==1.3.3 | exécution | A list-like structure which implements collections.abc.MutableSequence | pypi.org |
fsspec | ==2023.6.0 | exécution | File-system specification | pypi.org |
h11 | ==0.14.0 | exécution | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1 | pypi.org |
huggingface-hub | ==0.15.1 | exécution | Apprentissage automatique et IA | pypi.org |
idna | ==3.4 | exécution | Internationalized Domain Names in Applications (IDNA) | pypi.org |
importlib-resources | ==5.12.0 | exécution | Read resources from Python packages | pypi.org |
jinja2 | ==3.1.2 | exécution | Gabarits | pypi.org |
kiwisolver | ==1.4.4 | exécution | A fast implementation of the Cassowary constraint solver | pypi.org |
langcodes | ==3.3.0 | exécution | Tools for labeling human languages with IETF language tags | pypi.org |
limits | ==3.5.0 | exécution | Rate limiting utilities | pypi.org |
markdown-it-py | ==3.0.0 | exécution | Python port of markdown-it. Markdown parsing, done right! | pypi.org |
markupsafe | ==2.1.3 | exécution | Safely add untrusted strings to HTML/XML markup. | pypi.org |
mdurl | ==0.1.2 | exécution | Markdown URL utilities | pypi.org |
mpmath | ==1.3.0 | exécution | Python library for arbitrary-precision floating-point arithmetic | pypi.org |
multidict | ==6.0.4 | exécution | — | pypi.org |
murmurhash | ==1.0.9 | exécution | Cython bindings for MurmurHash | pypi.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
- AlgoETS. (2026, 5 novembre). AINewsTracker. [Software repository] github.com.
- Documentation publiée. (2026, 5 novembre). [Web page] algoets.github.io.
- GitDiagram interactif. (2026, 5 novembre). [Web page] gitdiagram.com.
- AlgoETS. (2026, 5 novembre). app/main.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). app/routers/news.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). app/core/services/news.py. [Source file or documentation] github.com.
- 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.