Files

10 KiB
Raw Permalink Blame History

kaubuntu.re - Hub Multimédia

Agrégateur des réseaux sociaux du mouvement panafricaniste et indépendantiste réunionnais Ka-Ubuntu.

Description

kaubuntu.re centralise en une seule page les contenus publiés par Ka-Ubuntu sur YouTube, Instagram, TikTok et le site WordPress kaubuntu.com. Développée en PHP vanilla, sans framework, la plateforme est conçue pour fonctionner sur un hébergement mutualisé standard (o2Switch) et saffiche correctement sur tous les appareils.

Fonctionnalités

  • Grille YouTube avec détection automatique des Shorts (3 Shorts portrait + 6 vidéos paysage)

  • Compteurs de followers/abonnés en temps réel (YouTube, Instagram, TikTok, articles WordPress), mis en cache 24h

  • Profil embed Instagram et TikTok (iframes officiels)

  • Grille darticles WordPress via REST API (kaubuntu.com)

  • Mode clair / sombre avec détection de la préférence système

  • Scroll animé vers les sections avec highlight darrivée

  • Bouton retour en haut de page

  • Progressive Web App (PWA) : installation native, mode hors ligne, cache Service Worker

  • Détection automatique de l’état de connexion

  • Annonce du prochain live configurable (multi-fuseaux horaires)

  • Système de dons PayPal Me

  • Page de compte à rebours / maintenance

  • Headers de sécurité (CSP, HSTS, X-Frame-Options…)

Technologies

  • PHP 8.0+ (backend, APIs, cache fichier)

  • HTML5 / CSS3 / JavaScript vanilla

  • YouTube Data API v3 (optionnel, avec fallback RSS public)

  • WordPress REST API

  • Font Awesome (icônes)

  • Service Worker (PWA)

Structure du projet

├── css/
│   ├── styles.css              # Styles globaux, thème, composants
│   └── social.css              # Styles spécifiques à l'agrégateur
├── includes/
│   ├── social/
│   │   ├── youtube.php         # YouTube Data API v3 + fallback RSS + détection Shorts
│   │   └── stats.php           # Compteurs followers (YouTube, Instagram, TikTok)
│   ├── wordpress.php           # Intégration WordPress REST API
│   ├── config.php              # Chargement config (default + local)
│   ├── config.default.php      # Valeurs par défaut
│   ├── config.local.php.sample # Modèle de configuration locale
│   ├── security.php            # Headers HTTP et CSP
│   ├── header.php
│   ├── footer.php
│   ├── sidebar.php
│   └── mobile-menu.php
├── js/
│   └── main.js                 # Thème, scroll animé, retour en haut, menu mobile
├── img/
├── conf/
│   ├── .htaccess.sample
│   └── nginx.conf.sample
├── index.php                   # Page principale
├── sw.js                       # Service Worker
├── site.webmanifest.sample
└── README.adoc

Prérequis

  • PHP 8.0+

  • Extensions PHP : curl, json, intl, mbstring, simplexml

  • Serveur web Apache ou Nginx

  • HTTPS (requis pour PWA)

# Ubuntu/Debian
sudo apt-get install php-curl php-intl php-mbstring php-xml

# Vérifier les extensions
php -m | grep -E 'curl|intl|mbstring|simplexml'

Installation

  1. Cloner le dépôt

  2. Copier le fichier de configuration :

    cp includes/config.local.php.sample includes/config.local.php
  3. Renseigner les variables dans includes/config.local.php (voir section Configuration)

  4. Copier la configuration serveur :

    cp conf/.htaccess.sample .htaccess
    # ou pour Nginx :
    sudo cp conf/nginx.conf.sample /etc/nginx/sites-available/kaubuntu.re
  5. Copier les fichiers domaine-spécifiques :

    cp sitemap.xml.sample sitemap.xml
    cp robots.txt.sample robots.txt
    cp site.webmanifest.sample site.webmanifest
    cp mentions-legales.php.sample mentions-legales.php

Configuration

Le système de configuration est en deux couches :

  • includes/config.default.php — valeurs par défaut (versionné)

  • includes/config.local.php — surcharges locales (non versionné, ignoré par Git)

Réseaux sociaux

define('YOUTUBE_URL',    'https://www.youtube.com/@votre-chaine');
define('YOUTUBE_HANDLE', 'votre-chaine');

define('INSTAGRAM_URL',    'https://www.instagram.com/votre-compte/');
define('INSTAGRAM_HANDLE', 'votre-compte');

define('TIKTOK_URL',    'https://www.tiktok.com/@votre-compte');
define('TIKTOK_HANDLE', 'votre-compte');

YouTube — Option A : clé API (recommandée)

Permet la détection des Shorts, les compteurs dabonnés et les meilleurs résultats de recherche.

  1. Créer un projet sur https://console.cloud.google.com

  2. Activer YouTube Data API v3

  3. Créer une clé API (APIs & Services > Credentials)

define('YOUTUBE_API_KEY',        'AIzaSy...');
define('YOUTUBE_CHANNEL_HANDLE', 'votre-chaine');
define('YOUTUBE_CHANNEL_ID',     'UC...');  // optionnel si handle défini
define('YOUTUBE_VIDEOS_COUNT',   9);        // 3 Shorts + 6 vidéos normales
Note
Le quota gratuit est de 10 000 unités/jour. Chaque chargement non mis en cache coûte ~101 unités (100 pour search.list + 1 pour videos.list). Avec un cache de 15 minutes, la consommation réelle est très faible.

YouTube — Option B : flux RSS public (sans clé API)

Aucune détection des Shorts, ordre chronologique uniquement.

define('YOUTUBE_CHANNEL_ID',   'UC...');
define('YOUTUBE_VIDEOS_COUNT', 9);

WordPress

define('WORDPRESS_ENABLED',     true);
define('WORDPRESS_URL',         'https://votre-site.com');
define('WORDPRESS_POSTS_COUNT', 6);

Contenu embarqué optionnel

Des posts Instagram ou vidéos TikTok spécifiques peuvent remplacer les iframes de profil :

define('INSTAGRAM_POST_URLS', [
    'https://www.instagram.com/p/XXX/',
]);

define('TIKTOK_VIDEO_URLS', [
    'https://www.tiktok.com/@compte/video/XXXXX',
]);

Fuseau horaire

define('DEFAULT_TIMEZONE', 'Indian/Reunion');

Annonce du prochain live

Système dannonce configurable avec calcul automatique multi-fuseaux (Maohi Nui, Martinique/Guadeloupe, Guyane, France, Kanaky).

define('NEXT_LIVE_ENABLED',     true);
define('NEXT_LIVE_TITLE',       'Prochain live');
define('NEXT_LIVE_DESCRIPTION', 'Description de l\'événement.');
define('NEXT_LIVE_DATE',        '2025-10-11 10:00:00');
define('NEXT_LIVE_IMAGE',       'uploads/next-live.jpg');

Images supportées : portrait 4:5 (1080×1350px), carré 1:1, paysage 16:9.

Système de dons

define('DONATIONS_ENABLED', true);
define('PAYPAL_ME_URL',     'https://www.paypal.com/paypalme/votre-compte');
define('DONATION_AMOUNTS',  [5, 10, 20, 50, 100]);
define('DONATION_CURRENCY', 'EUR');
cp dons.sample.php dons.php

Système de compte à rebours

Page de maintenance ou de lancement avec compte à rebours multi-fuseaux.

define('COUNTDOWN_ENABLED',     true);
define('COUNTDOWN_TARGET_DATE', '2025-10-11 00:00:00');

Sécurité

Apache

cp conf/.htaccess.sample .htaccess

Le fichier protège les répertoires sensibles (/includes/, /cache/), bloque laccès aux .sample, .bak, .log, désactive lexploration des répertoires.

Warning
Ne pas déployer sans ce fichier — les fichiers de configuration seraient accessibles publiquement.

Nginx

sudo cp conf/nginx.conf.sample /etc/nginx/sites-available/votre-site
sudo ln -s /etc/nginx/sites-available/votre-site /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Progressive Web App (PWA)

  • Installation native (bouton automatique dans le header)

  • Mode hors ligne via Service Worker

  • Indicateur visuel de perte de connexion

Compatibilité : Chrome/Edge (Android/Desktop), Safari (iOS 11.3+), Firefox Android, Samsung Internet.

cp site.webmanifest.sample site.webmanifest

Déploiement (hébergement mutualisé)

  1. Vérifier que PHP 8.0+ avec les extensions requises est disponible

  2. Transférer les fichiers via FTP/SFTP

  3. Créer includes/config.local.php sur le serveur

  4. Vérifier que le dossier cache/ est accessible en écriture : chmod 755 cache/

  5. Configurer HTTPS

Développement

git checkout -b ma-fonctionnalite
# ... modifications ...
git commit -m "feat: description courte"
git push origin ma-fonctionnalite

Licence

Copyright © 2025 ORGANISATION KA INTERNATIONALE (OKI) & Ka-Ubuntu

Note
Ka-Ubuntu est un parti politique panafricaniste et indépendantiste réunionnais, œuvrant pour la souveraineté numérique et technologique de La Réunion dans une perspective panafricaniste.

FR

Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU Affero publiée par la Free Software Foundation, soit la version 3 de la licence, soit (à votre choix) toute version ultérieure.

Ce programme est distribué dans lespoir quil sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou dADAPTATION À UN USAGE PARTICULIER. Voir la licence publique générale GNU Affero pour plus de détails.

Vous devriez avoir reçu une copie de la licence publique générale GNU Affero avec ce programme. Si ce nest pas le cas, consultez https://www.gnu.org/licenses/.

EN

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Contact


Ka-Ubuntu - Pour une Réunion libre et souveraine dans lunité panafricaniste