| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- const express = require('express');
- const { authMiddleware } = require('../auth');
- const router = express.Router();
- // IRL France entière — série INSEE 001515333
- const IRL_SERIES = '001515333';
- async function fetchIrlFromInsee(year, quarter) {
- const period = `${year}-Q${quarter}`;
- const url = `https://api.insee.fr/series/BDM/V1/data/SERIES_BDM/${IRL_SERIES}?startPeriod=${period}&endPeriod=${period}`;
- const resp = await fetch(url, {
- headers: { 'Accept': 'application/xml' },
- });
- if (!resp.ok) throw new Error(`INSEE API HTTP ${resp.status}`);
- const xml = await resp.text();
- // SDMX-XML : extraire <generic:ObsValue value="142.06"/>
- const match = xml.match(/ObsValue[^/]*value="([\d.]+)"/);
- if (!match) throw new Error('Valeur IRL introuvable dans la réponse XML');
- return parseFloat(match[1]);
- }
- // GET /api/irl?year=2024&quarter=2
- router.get('/', authMiddleware, async (req, res) => {
- const { year, quarter } = req.query;
- if (!year || !quarter) return res.status(400).json({ error: 'year et quarter requis' });
- try {
- const value = await fetchIrlFromInsee(parseInt(year), parseInt(quarter));
- res.json({ value, year: parseInt(year), quarter: parseInt(quarter) });
- } catch (e) {
- console.error('IRL fetch error:', e.message);
- res.status(502).json({ value: null, error: e.message });
- }
- });
- module.exports = router;
|