feat: add last podcast from castopod

This commit is contained in:
2025-10-17 17:38:16 +04:00
parent b35dbde8c9
commit 0319fa20c3
9 changed files with 692 additions and 87 deletions
+100
View File
@@ -24,6 +24,7 @@
- 📡 Détection automatique d'état de connexion
- 📊 Analytics intégré avec Plausible (respectueux de la vie privée)
- 📰 *Intégration WordPress* : Affichage des articles depuis un site WordPress via REST API
- 🎙️ *Intégration Castopod* : Affichage des derniers épisodes de podcast via flux RSS
- 💝 *Système de dons* : Support multi-plateformes (LiberaPay, Ko-fi, Stripe) avec dons ponctuels et récurrents
- ⏰ *Système de countdown* : Page de lancement configurable avec compte à rebours multi-fuseaux
- 📺 *Annonce du prochain live* : Affichage dynamique avec multi-fuseaux horaires et image personnalisable
@@ -88,6 +89,7 @@
* `json` - Pour le traitement des données JSON
* `intl` - Pour la gestion des dates internationales et traductions
* `mbstring` - Pour la manipulation des chaînes multi-octets
* `xml` (SimpleXML) - Recommandée pour Castopod (fallback regex disponible)
- 🌐 *Serveur web* : Apache ou Nginx
- 🔒 *HTTPS* : Requis pour les fonctionnalités PWA
@@ -480,6 +482,104 @@ Le système intègre plusieurs protections :
- ✅ *Ouverture sécurisée* : Liens avec `noopener noreferrer`
- ✅ *Tokens CSRF* : Protection contre les attaques CSRF
== 🎙️ Intégration Castopod (Podcasts)
FEDIVERSE OKI peut afficher les derniers épisodes d'un podcast Castopod directement sur la page d'accueil, à côté de la timeline Mastodon et des articles WordPress.
=== ✨ Fonctionnalités
- 🎧 *Affichage des derniers épisodes* : Liste configurable des épisodes récents
- 🖼️ *Miniatures des épisodes* : Affichage des images de couverture
- ⏱️ *Durée et date* : Informations complètes sur chaque épisode
- 🎨 *Design cohérent* : Interface harmonisée avec le reste du site
- 📱 *Responsive* : Affichage adapté mobile et desktop
- 🌙 *Mode sombre* : Support complet du thème sombre
- 🔄 *Fallback intelligent* : Fonctionne avec ou sans l'extension PHP SimpleXML
=== ⚙️ Configuration
Pour activer l'intégration Castopod, ajoutez dans votre `config.local.php` :
[source,php]
----
// Activer l'affichage des podcasts Castopod
define('CASTOPOD_ENABLED', true);
// URL de l'instance Castopod
define('CASTOPOD_URL', 'https://kute.o-k-i.net');
// Liste des slugs de podcasts à afficher
// Les épisodes de tous les podcasts seront mélangés et triés par date
define('CASTOPOD_PODCAST_SLUGS', [
'joukawouve',
'cspcc',
'radyobokaz'
]);
// Nombre d'épisodes à afficher (total, tous podcasts confondus)
define('CASTOPOD_EPISODES_COUNT', 5);
// IMPORTANT : Activer le cache pour éviter le rate limiting
define('CACHE_ENABLED', true);
define('CACHE_DURATION', 3600); // 1 heure recommandé
----
WARNING: *Rate Limiting* : Castopod applique un rate limit strict sur les requêtes RSS. Pour afficher plusieurs podcasts, le système ajoute un délai de 5 secondes entre chaque requête. *Le cache est fortement recommandé* pour éviter ces délais à chaque chargement de page.
TIP: Pour un seul podcast, vous pouvez utiliser une chaîne : `define('CASTOPOD_PODCAST_SLUGS', ['joukawouve']);`
=== 📋 Prérequis
- *Extension PHP XML* (recommandée mais optionnelle) :
+
[source,bash]
----
# Sur Ubuntu/Debian
sudo apt install php8.3-xml
# Sur CentOS/RHEL
sudo yum install php-xml
----
+
NOTE: Si l'extension n'est pas installée, un fallback avec parsing regex sera utilisé automatiquement (moins performant mais fonctionnel).
=== 🎯 Affichage
La section Castopod s'affiche automatiquement sur la page d'accueil selon la configuration :
*Ordre d'affichage* :
1. Vidéo hero (si configurée)
2. Podcasts Castopod
3. Timeline Mastodon
4. Articles WordPress (si activé)
*Desktop* :
- Castopod + Mastodon : Layout 1fr 2fr (podcasts étroit, timeline large)
- Castopod + Mastodon + WordPress : Layout 1fr 2fr 1fr (trois colonnes)
- Mastodon + WordPress (sans Castopod) : Layout 2fr 1fr (timeline large, articles étroits)
*Mobile/Tablette* :
- Layout vertical avec toutes les sections empilées dans l'ordre ci-dessus
=== 🔧 Fonctionnement technique
Le système récupère les épisodes via le flux RSS Castopod :
- *URL du feed* : `CASTOPOD_URL/@PODCAST_SLUG/feed`
- *Format* : RSS 2.0 avec namespace iTunes
- *Données extraites* : Titre, lien, date, durée, image, description
- *Cache* : Support du système de cache si activé
- *Timeout* : 10 secondes pour éviter les blocages
=== 🎨 Personnalisation CSS
Les styles sont définis dans `css/castopod-podcasts.css` :
- `.castopod-container` : Conteneur principal
- `.castopod-episode-item` : Élément d'épisode
- `.castopod-episode-thumb` : Miniature avec effet hover
- `.castopod-play-icon` : Icône de lecture au survol
== 🛡️ Configuration de sécurité Apache
Le fichier `conf/.htaccess.sample` fourni inclut des règles de sécurité importantes pour protéger votre installation :