fix cache dir

This commit is contained in:
2025-05-24 23:50:44 +02:00
parent be66cf7e53
commit ea0c5c7765
2 changed files with 68 additions and 68 deletions

View File

@ -6,7 +6,7 @@ const path = require('path');
const BASE_URL = 'https://www.filmspourenfants.net';
// Setup disk cache
const CACHE_DIR = path.join(__dirname, '../cache');
const CACHE_DIR = process.env.CACHE_DIR || '/app/data/cache';
if (!fs.existsSync(CACHE_DIR)) fs.mkdirSync(CACHE_DIR, { recursive: true });
// Cache operations
@ -38,7 +38,7 @@ function saveCache(type, key, data) {
// Extract age from string like "À partir de 8 ans" or "Déconseillé aux moins de: 8 ans"
function extractAgeFromText(text) {
if (!text) return null;
const match = text.match(/(\d+)\s*ans/i);
if (match && match[1]) {
return parseInt(match[1]);
@ -50,24 +50,24 @@ async function searchMovies(query) {
// Check cache first
const cached = loadCache('search', query);
if (cached) return cached;
const searchUrl = `${BASE_URL}/films-resultats/?_s=${encodeURIComponent(query)}`;
console.log('Searching FilmsPourEnfants:', searchUrl);
try {
const response = await axios.get(searchUrl, {
headers: { 'User-Agent': 'Mozilla/5.0' }
const response = await axios.get(searchUrl, {
headers: { 'User-Agent': 'Mozilla/5.0' }
});
const $ = cheerio.load(response.data);
const results = [];
$('section.gp-post-item').each((_, el) => {
const title = $(el).find('h2.gp-loop-title a').text().trim();
const link = $(el).find('h2.gp-loop-title a').attr('href');
const img = $(el).find('.gp-post-thumbnail img').attr('src');
const ageText = $(el).find('.gp-loop-cats a').text().trim();
const age = extractAgeFromText(ageText);
if (title && link) {
results.push({
title,
@ -78,7 +78,7 @@ async function searchMovies(query) {
});
}
});
console.log(`FilmsPourEnfants found ${results.length} results`);
saveCache('search', query, results);
return results;
@ -90,27 +90,27 @@ async function searchMovies(query) {
async function getMovieDetails(movieUrl) {
if (!movieUrl) return {};
// Check cache first
const cached = loadCache('detail', movieUrl);
if (cached) return cached;
console.log('Fetching details for:', movieUrl);
try {
const response = await axios.get(movieUrl, {
headers: { 'User-Agent': 'Mozilla/5.0' }
const response = await axios.get(movieUrl, {
headers: { 'User-Agent': 'Mozilla/5.0' }
});
const $ = cheerio.load(response.data);
const details = {};
// Title
details.title = $('h1.gp-entry-title').text().trim();
// Get metadata
$('.gp-entry-meta .gp-post-meta').each((_, el) => {
const text = $(el).text().trim();
if (text.includes('Année:')) {
details.year = $(el).find('a').text().trim();
} else if (text.includes('Déconseillé aux moins de:')) {
@ -125,11 +125,11 @@ async function getMovieDetails(movieUrl) {
});
}
});
// More detailed metadata
$('#gp-hub-details span').each((_, el) => {
const label = $(el).find('strong').text().trim();
if (label === 'Déconseillé aux moins de:') {
details.ageText = $(el).find('a').text().trim();
details.age = extractAgeFromText(details.ageText);
@ -153,13 +153,13 @@ async function getMovieDetails(movieUrl) {
});
}
});
// Get summary - first paragraph in the entry-text
details.summary = $('.gp-entry-text h4').first().text().trim();
// Get main image
details.img = $('.gp-post-thumbnail img').attr('src') || $('.gp-hub-header-thumbnail img').attr('src');
// Get messages section
let messages = '';
$('.gp-entry-text h3').each((_, el) => {
@ -170,7 +170,7 @@ async function getMovieDetails(movieUrl) {
}
});
details.messages = messages.trim();
// Get difficult scenes section
const difficultScenesHeading = $('.gp-entry-text h2:contains("SCÈNES DIFFICILES")');
let difficultScenes = '';
@ -184,7 +184,7 @@ async function getMovieDetails(movieUrl) {
}
}
details.difficultScenes = difficultScenes.trim();
console.log(`Fetched details for: ${details.title}, Age: ${details.age}`);
saveCache('detail', movieUrl, details);
return details;
@ -199,7 +199,7 @@ async function searchAndEnrich(query) {
const results = await searchMovies(query);
return await Promise.all(results.map(async movie => {
const details = await getMovieDetails(movie.link);
return {
title: movie.title,
year: details.year || null,