diff --git a/includes/categories.php b/includes/categories.php index cd9e426..d16adde 100644 --- a/includes/categories.php +++ b/includes/categories.php @@ -1,54 +1,16 @@ 1, - 'name' => 'Technologie', - 'image' => 'img/categories/tech.jpg' - ], - [ - 'id' => 2, - 'name' => 'Culture', - 'image' => 'img/categories/culture.jpg' - ], - [ - 'id' => 3, - 'name' => 'Éducation', - 'image' => 'img/categories/education.jpg' - ], - [ - 'id' => 4, - 'name' => 'Divertissement', - 'image' => 'img/categories/entertainment.jpg' - ], - [ - 'id' => 5, - 'name' => 'Cuisine', - 'image' => 'img/categories/cuisine.jpg' - ], - [ - 'id' => 6, - 'name' => 'Voyage', - 'image' => 'img/categories/travel.jpg' - ], - [ - 'id' => 7, - 'name' => 'Sport', - 'image' => 'img/categories/sport.jpg' - ], - [ - 'id' => 8, - 'name' => 'Musique', - 'image' => 'img/categories/music.jpg' - ] -]; +// Inclure la configuration si ce n'est pas déjà fait +if (!function_exists('getCategories')) { + require_once __DIR__ . '/config.php'; +} + +// Récupérer les catégories depuis l'API PeerTube +$categories = getCategories(); // Affichage des catégories foreach ($categories as $category) : ?> - <?php echo $category['name']; ?>
diff --git a/includes/config.php b/includes/config.php index ebca63e..ddf7415 100644 --- a/includes/config.php +++ b/includes/config.php @@ -7,15 +7,18 @@ */ // URL de base de votre instance PeerTube -define('PEERTUBE_URL', 'https://gade.o-k-i.net'); +define('PEERTUBE_URL', 'https://video.lemediatv.fr'); // Paramètres d'API (si nécessaire) define('API_KEY', ''); // Laissez vide si pas nécessaire // Pagination et affichage define('VIDEOS_PER_PAGE', 12); -define('FEATURED_VIDEOS_COUNT', 3); -define('RECENT_VIDEOS_COUNT', 6); +define('FEATURED_VIDEOS_COUNT', 4); +define('RECENT_VIDEOS_COUNT', 4); +define('SHORTS_COUNT', 4); +define('TRENDING_VIDEOS_COUNT', 4); +define('INDEPENDENCE_VIDEOS_COUNT', 4); // Informations du site define('SITE_NAME', 'Kaubuntu.re'); @@ -41,6 +44,10 @@ define('ENABLE_USER_ACCOUNTS', false); // À implémenter dans une future versio define('CACHE_ENABLED', false); define('CACHE_DURATION', 3600); // En secondes (1 heure) +// Tags pour filtrer les vidéos selon les catégories +define('TAG_INDEPENDENCE', 'independence'); +define('TAG_SHORT', 'short'); + // Locale et fuseau horaire setlocale(LC_TIME, 'fr_FR.UTF-8'); date_default_timezone_set('Indian/Reunion'); @@ -88,5 +95,191 @@ function callPeerTubeApi($endpoint, $params = []) { return $data ?: []; } -// Pour une version future: implémenter un système de mise en cache des requêtes API +/** + * Récupère les catégories depuis l'API PeerTube + * + * @return array Liste des catégories + */ +function getCategories() { + // Récupérer la liste des catégories depuis l'API + $categories = callPeerTubeApi('video-categories'); + + $result = []; + foreach ($categories as $key => $name) { + $result[] = [ + 'id' => $key, + 'name' => $name + ]; + } + + return $result; +} + +/** + * Récupère les vidéos récentes depuis l'API PeerTube + * + * @param int $count Nombre de vidéos à récupérer + * @return array Liste des vidéos récentes + */ +function getRecentVideos($count = RECENT_VIDEOS_COUNT) { + // Récupérer les vidéos récentes + $data = callPeerTubeApi('videos', [ + 'sort' => '-publishedAt', + 'count' => $count, + 'isLocal' => true + ]); + + return formatVideosData($data['data'] ?? []); +} + +/** + * Récupère les vidéos tendances depuis l'API PeerTube + * + * @param int $count Nombre de vidéos à récupérer + * @return array Liste des vidéos tendances + */ +function getTrendingVideos($count = TRENDING_VIDEOS_COUNT) { + // Récupérer les vidéos tendances + $data = callPeerTubeApi('videos', [ + 'sort' => '-trending', + 'count' => $count, + 'isLocal' => true + ]); + + return formatVideosData($data['data'] ?? []); +} + +/** + * Récupère les vidéos avec un tag spécifique depuis l'API PeerTube + * + * @param string $tag Tag à filtrer + * @param int $count Nombre de vidéos à récupérer + * @return array Liste des vidéos + */ +function getVideosByTag($tag, $count) { + // Récupérer les vidéos par tag + $data = callPeerTubeApi('videos', [ + 'tagsOneOf' => $tag, + 'count' => $count, + 'isLocal' => true + ]); + + return formatVideosData($data['data'] ?? []); +} + +/** + * Récupère les shorts (vidéos courtes) depuis l'API PeerTube + * Les shorts sont des vidéos locales de moins de 2 minutes + * + * @param int $count Nombre de shorts à récupérer + * @return array Liste des shorts + */ +function getShorts($count = SHORTS_COUNT) { + // Récupérer plus de vidéos que nécessaire pour pouvoir filtrer + $data = callPeerTubeApi('videos', [ + 'sort' => '-publishedAt', // Les plus récentes d'abord + 'count' => $count * 3, // Récupérer plus de vidéos pour pouvoir filtrer + 'isLocal' => true + ]); + + // Formater les données + $allVideos = formatVideosData($data['data'] ?? []); + + // Filtrer pour ne garder que les vidéos de moins de 2 minutes (120 secondes) + $shortVideos = array_filter($allVideos, function($video) { + return $video['duration'] < 120; // Moins de 2 minutes + }); + + // Limiter au nombre demandé + return array_slice($shortVideos, 0, $count); +} + +/** + * Récupère les vidéos sur l'indépendance depuis l'API PeerTube + * + * @param int $count Nombre de vidéos à récupérer + * @return array Liste des vidéos sur l'indépendance + */ +function getIndependenceVideos($count = INDEPENDENCE_VIDEOS_COUNT) { + // Récupérer les vidéos sur l'indépendance + return getVideosByTag(TAG_INDEPENDENCE, $count); +} + +/** + * Formate les données brutes des vidéos venant de l'API + * + * @param array $videosData Données brutes des vidéos + * @return array Données formatées + */ +function formatVideosData($videosData) { + $videos = []; + + foreach ($videosData as $video) { + // Récupérer la vignette (thumbnail) + $thumbnail = isset($video['thumbnailPath']) + ? PEERTUBE_URL . $video['thumbnailPath'] + : 'img/default-thumbnail.jpg'; + + // Formater les données + $videos[] = [ + 'id' => $video['uuid'], + 'title' => $video['name'], + 'thumbnail' => $thumbnail, + 'duration' => $video['duration'], + 'channel' => $video['channel']['displayName'], + 'views' => $video['views'], + 'date' => $video['publishedAt'], + 'description' => $video['description'] ?? '', + 'tags' => $video['tags'] ?? [] + ]; + } + + return $videos; +} + +// Fonctions utilitaires pour formater les données d'affichage +function formatDuration($seconds) { + $hours = floor($seconds / 3600); + $minutes = floor(($seconds % 3600) / 60); + $remainingSeconds = $seconds % 60; + + if ($hours > 0) { + return sprintf('%d:%02d:%02d', $hours, $minutes, $remainingSeconds); + } else { + return sprintf('%d:%02d', $minutes, $remainingSeconds); + } +} + +function formatViewCount($views) { + if ($views >= 1000000) { + return round($views / 1000000, 1) . 'M'; + } elseif ($views >= 1000) { + return round($views / 1000, 1) . 'K'; + } else { + return $views; + } +} + +function formatDate($dateString) { + $date = new DateTime($dateString); + $now = new DateTime(); + $interval = $now->diff($date); + + if ($interval->days == 0) { + return 'Aujourd\'hui'; + } elseif ($interval->days == 1) { + return 'Hier'; + } elseif ($interval->days < 7) { + return 'Il y a ' . $interval->days . ' jours'; + } elseif ($interval->days < 30) { + $weeks = floor($interval->days / 7); + return 'Il y a ' . $weeks . ' semaine' . ($weeks > 1 ? 's' : ''); + } elseif ($interval->days < 365) { + $months = floor($interval->days / 30); + return 'Il y a ' . $months . ' mois'; + } else { + $years = floor($interval->days / 365); + return 'Il y a ' . $years . ' an' . ($years > 1 ? 's' : ''); + } +} ?> \ No newline at end of file diff --git a/includes/featured-videos.php b/includes/featured-videos.php index b564b5b..3192d5f 100644 --- a/includes/featured-videos.php +++ b/includes/featured-videos.php @@ -1,38 +1,14 @@ 1, - 'title' => 'Introduction à la culture libre et aux logiciels open source', - 'thumbnail' => 'img/video-thumbnails/featured-1.jpg', - 'duration' => 1245, // en secondes - 'channel' => 'Tech Libre', - 'views' => 15420, - 'date' => '2023-11-15' - ], - [ - 'id' => 2, - 'title' => 'La Réunion: Découverte des sentiers cachés', - 'thumbnail' => 'img/video-thumbnails/featured-2.jpg', - 'duration' => 843, - 'channel' => 'Île Aventure', - 'views' => 8745, - 'date' => '2023-12-02' - ], - [ - 'id' => 3, - 'title' => 'Comment installer Linux sur un ancien ordinateur', - 'thumbnail' => 'img/video-thumbnails/featured-3.jpg', - 'duration' => 723, - 'channel' => 'Tech Libre', - 'views' => 24680, - 'date' => '2023-10-25' - ] -]; +// Inclure la configuration si ce n'est pas déjà fait +if (!function_exists('getTrendingVideos')) { + require_once __DIR__ . '/config.php'; +} + +// Récupérer les vidéos tendances depuis l'API PeerTube +$featuredVideos = getTrendingVideos(FEATURED_VIDEOS_COUNT); // Affichage des vidéos -foreach ($featuredVideos as $video) : +foreach ($featuredVideos as $video): ?>
diff --git a/includes/recent-videos.php b/includes/recent-videos.php index 17457a6..2f7b699 100644 --- a/includes/recent-videos.php +++ b/includes/recent-videos.php @@ -1,65 +1,14 @@ 4, - 'title' => 'Festival Sakifo 2023 - Les meilleurs moments', - 'thumbnail' => 'img/video-thumbnails/recent-1.jpg', - 'duration' => 1832, // en secondes - 'channel' => 'Culture 974', - 'views' => 3420, - 'date' => '2023-12-15' - ], - [ - 'id' => 5, - 'title' => 'Cuisine créole: Recette du rougail saucisse traditionnel', - 'thumbnail' => 'img/video-thumbnails/recent-2.jpg', - 'duration' => 685, - 'channel' => 'Saveurs des Îles', - 'views' => 7245, - 'date' => '2023-12-10' - ], - [ - 'id' => 6, - 'title' => 'Tutoriel: Créer votre première application web avec PHP', - 'thumbnail' => 'img/video-thumbnails/recent-3.jpg', - 'duration' => 1540, - 'channel' => 'CodeMastery', - 'views' => 2180, - 'date' => '2023-12-08' - ], - [ - 'id' => 7, - 'title' => 'Les plus belles plages de La Réunion en 2023', - 'thumbnail' => 'img/video-thumbnails/recent-4.jpg', - 'duration' => 925, - 'channel' => 'Île Aventure', - 'views' => 5690, - 'date' => '2023-12-05' - ], - [ - 'id' => 8, - 'title' => 'Débat: L\'avenir du numérique à La Réunion', - 'thumbnail' => 'img/video-thumbnails/recent-5.jpg', - 'duration' => 3245, - 'channel' => 'Tech Libre', - 'views' => 1250, - 'date' => '2023-12-01' - ], - [ - 'id' => 9, - 'title' => 'Concert live: Groupe Sakili au Téat Plein Air', - 'thumbnail' => 'img/video-thumbnails/recent-6.jpg', - 'duration' => 4512, - 'channel' => 'Culture 974', - 'views' => 4325, - 'date' => '2023-11-28' - ] -]; +// Inclure la configuration si ce n'est pas déjà fait +if (!function_exists('getRecentVideos')) { + require_once __DIR__ . '/config.php'; +} + +// Récupérer les vidéos récentes depuis l'API PeerTube +$recentVideos = getRecentVideos(); // Affichage des vidéos -foreach ($recentVideos as $video) : +foreach ($recentVideos as $video): ?>