fix cache dir
This commit is contained in:
@ -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,
|
||||
|
Reference in New Issue
Block a user