diff --git a/includes/simple-cache.php b/includes/simple-cache.php index a3245f0..897adf2 100644 --- a/includes/simple-cache.php +++ b/includes/simple-cache.php @@ -100,11 +100,20 @@ function callPeerTubeApiCached($endpoint, $params = []) { // TTL selon le type de contenu $ttlMap = [ 'videos/categories' => 3600, // 1 heure - 'videos' => 300, // 5 minutes - 'search/videos' => 600 // 10 minutes + 'videos' => 600, // 10 minutes (augmenté) + 'search/videos' => 600, // 10 minutes + 'wp-posts' => 900, // 15 minutes pour WordPress + 'accounts' => 300 // 5 minutes pour live streams ]; - $ttl = $ttlMap[$endpoint] ?? 300; + // TTL dynamique selon l'endpoint + $ttl = 300; // Défaut 5 minutes + foreach ($ttlMap as $pattern => $time) { + if (strpos($endpoint, $pattern) !== false) { + $ttl = $time; + break; + } + } // Essayer le cache d'abord $cached = $cache->get($endpoint, $params); @@ -123,6 +132,34 @@ function callPeerTubeApiCached($endpoint, $params = []) { return $data; } +/** + * Cache générique pour tout type d'API + */ +function callApiCached($cacheKey, $callable, $ttl = 900) { + $cache = $GLOBALS['simple_api_cache']; + + // Essayer le cache d'abord + $cached = $cache->get($cacheKey, []); + if ($cached !== null) { + return $cached; + } + + // Appeler la fonction fournie + try { + $data = call_user_func($callable); + } catch (Exception $e) { + error_log('API call failed for ' . $cacheKey . ': ' . $e->getMessage()); + return []; + } + + // Mettre en cache si on a des données + if (!empty($data)) { + $cache->set($cacheKey, [], $data, $ttl); + } + + return $data; +} + // Nettoyage automatique occasionnel if (rand(1, 100) === 1) { $GLOBALS['simple_api_cache']->cleanup(); diff --git a/includes/wordpress.php b/includes/wordpress.php index aba2d06..e122dd9 100644 --- a/includes/wordpress.php +++ b/includes/wordpress.php @@ -122,13 +122,16 @@ function getWordPressPosts($count = null) { $count = defined('WORDPRESS_POSTS_COUNT') ? WORDPRESS_POSTS_COUNT : 6; } - // Récupérer les posts via l'API WordPress REST - $posts = callWordPressApi('posts', [ - 'per_page' => $count, - '_embed' => 'true' // Inclure les médias embarqués (featured image) - ]); + // Utiliser le cache pour les posts WordPress + return callApiCached('wp-posts-' . $count, function() use ($count) { + // Récupérer les posts via l'API WordPress REST + $posts = callWordPressApi('posts', [ + 'per_page' => $count, + '_embed' => 'true' // Inclure les médias embarqués (featured image) + ]); - return formatWordPressPosts($posts); + return formatWordPressPosts($posts); + }, 900); // 15 minutes de cache } /**