mikmc/Internet_Archive
1
1const Catalog = (dependencies) => {2 const { httpClient, queryBuilder, env } = dependencies;3 4 const searchCatalog = async (request) => {5 const { search, genre, skip } = request;6 7 try {8 // Build the query using the queryBuilder9 const query = queryBuilder({10 collection: 'feature_films',11 mediatype: 'movies',12 search: search ? `${search}*` : null,13 subject: genre,14 });15 16 // Make the API request to Archive.org using the built query17 const response = await httpClient.get(env.url.search, {18 params: {19 rows: (+skip || 0) + 50, // Adjusted to fetch 50 results per page (can increase this as needed)20 sort: 'num_reviews desc, avg_rating desc', // Sort by number of reviews and rating21 fields: 'avg_rating,description,genre,identifier,title,subject', // Fetch relevant fields22 q: query,23 output: 'json',24 },25 });26 27 // Check if response data is valid and return catalog items28 if (response.data && response.data.response && response.data.response.docs) {29 const catalogItems = response.data.response.docs.map((doc) => ({30 id: `archorg.addon:${doc.identifier}`,31 name: doc.title || "Untitled",32 description: doc.description || "No description available",33 poster: `https://archive.org/services/img/${doc.identifier}`,34 background: `https://archive.org/services/img/${doc.identifier}`,35 type: 'movie',36 genre: genre || "Unknown", // Default to "Unknown" if no genre is provided37 }));38 39 return { metas: catalogItems };40 } else {41 // Return an empty catalog if response is not as expected42 return { metas: [] };43 }44 } catch (error) {45 // Return empty catalog in case of an error and log the error for debugging46 console.error('Error fetching catalog:', error.message || error);47 return { metas: [] };48 }49 };50 51 return {52 searchCatalog,53 };54};55 56module.exports = Catalog;57 