/** * Composant APIDocumentation pour AfriDataHub * Created by BlackBenAI Team - AfriDataHub Platform */ import { useState, useEffect } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { Button } from '@/components/ui/button' import { Code, Copy, RefreshCw, Terminal, Globe, Lock, Check, ExternalLink, BookOpen, Cpu, Database } from 'lucide-react' import { API_URL } from '../config' const APIDocumentation = () => { const [token, setToken] = useState('') const [loading, setLoading] = useState(false) const [copied, setCopied] = useState(false) const [activeTab, setActiveTab] = useState('python') useEffect(() => { fetchToken() }, []) const fetchToken = async () => { try { const storedToken = localStorage.getItem('token') const response = await fetch(`${API_URL}auth/token/`, { headers: { 'Authorization': `Token ${storedToken}` } }) const data = await response.json() if (response.ok) { setToken(data.token) } } catch (error) { console.error('Erreur lors de la récupération du token:', error) } } const regenerateToken = async () => { if (!confirm('Êtes-vous sûr de vouloir régénérer votre token ? L\'ancien token ne fonctionnera plus.')) return try { setLoading(true) const storedToken = localStorage.getItem('token') const response = await fetch(`${API_URL}auth/token/`, { method: 'POST', headers: { 'Authorization': `Token ${storedToken}` } }) const data = await response.json() if (response.ok) { setToken(data.token) } } catch (error) { console.error('Erreur lors de la régénération du token:', error) } finally { setLoading(false) } } const copyToClipboard = (text) => { navigator.clipboard.writeText(text) setCopied(true) setTimeout(() => setCopied(false), 2000) } const endpoints = [ { method: 'GET', path: '/api/datasets/', description: 'Liste tous les datasets publics disponibles.', params: [ { name: 'domain', type: 'string', desc: 'Filtrer par domaine (agriculture, health, etc.)' }, { name: 'search', type: 'string', desc: 'Recherche textuelle dans le titre ou la description' } ] }, { method: 'GET', path: '/api/datasets/{slug}/data/', description: 'Récupère les points de données pour un dataset spécifique.', params: [ { name: 'country', type: 'string', desc: 'Code pays ISO (ex: BJ, NG)' }, { name: 'limit', type: 'number', desc: 'Nombre maximum de résultats (défaut: 100)' } ] }, { method: 'GET', path: '/api/analytics/comprehensive/', description: 'Récupère des analyses consolidées et des statistiques.', params: [ { name: 'dataset_id', type: 'string', desc: 'ID ou Slug du dataset pour filtrer l\'analyse' } ] } ] const codeExamples = { python: `import requests url = "${API_URL}datasets/" headers = { "Authorization": "Token ${token || 'VOTRE_TOKEN_ICI'}" } response = requests.get(url, headers=headers) data = response.json() print(f"Nombre de datasets: {len(data['results'])}")`, javascript: `const fetchDatasets = async () => { const response = await fetch('${API_URL}datasets/', { headers: { 'Authorization': 'Token ${token || 'VOTRE_TOKEN_ICI'}' } }); const data = await response.json(); console.log(data); };`, curl: `curl -X GET ${API_URL}datasets/ \\ -H "Authorization: Token ${token || 'VOTRE_TOKEN_ICI'}"` } return (
{/* En-tête */}

API Developer Hub

Intégrez les données d'AfriDataHub directement dans vos applications et flux de travail.

{/* Section Token */}

Votre Clé API

Utilisez ce token pour authentifier vos requêtes.

Gardez votre token secret. Ne le partagez jamais dans des environnements publics ou côté client (frontend).

{/* Documentation des Endpoints */}

Endpoints Publics

{endpoints.map((ep, i) => (
{ep.method} {ep.path}

{ep.description}

Paramètres

{ep.params.map((param, pi) => (
{param.name} ({param.type}) {param.desc}
))}
))}
{/* Exemples de Code */}

Exemples d'Intégration

{['python', 'javascript', 'curl'].map((tab) => ( ))}
                                {codeExamples[activeTab]}
                            

SDK AfriDataHub

Bientôt disponible sur PyPI et NPM.

) } export default APIDocumentation