$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['previewPath']) ? PEERTUBE_URL . $video['previewPath'] : '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' : ''); } } ?>