winblows / src /api /rpdb.js
no1b4me's picture
Upload 20 files
07436b8 verified
const axios = require('axios');
const log = require('../helpers/logger');
const { setCachedPoster, getCachedPoster } = require('../helpers/cache');
const getRpdbPoster = (type, id, language, rpdbkey) => {
const tier = rpdbkey.split("-")[0];
const lang = language.split("-")[0];
const baseUrl = `https://api.ratingposterdb.com/${rpdbkey}/tmdb/poster-default/${type}-${id}.jpg`;
return (tier === "t0" || tier === "t1")
? baseUrl
: `${baseUrl}&lang=${lang}`;
};
const posterCacheQueue = new Set();
const cachedPosters = new Set();
const getPosterUrl = async (content, rpdbApiKey) => {
const posterId = `poster:${content.id}`;
if (rpdbApiKey) {
const cachedPoster = await getCachedPoster(posterId);
if (cachedPoster) {
log.debug(`Using cached poster URL for id ${posterId}`);
return cachedPoster.poster_url;
}
}
let posterUrl;
if (rpdbApiKey) {
const rpdbImage = getRpdbPoster('movie', content.id, 'fr', rpdbApiKey);
log.debug(`Fetching RPDB poster from URL: ${rpdbImage}`);
try {
const response = await axios.head(rpdbImage);
if (response.status === 200) {
log.debug(`RPDB poster found for id ${posterId}`);
posterUrl = rpdbImage;
if (!cachedPosters.has(posterId)) {
posterCacheQueue.add({ id: posterId, url: posterUrl });
cachedPosters.add(posterId);
}
} else {
throw new Error('Not found');
}
} catch (error) {
log.warn(`Error fetching RPDB poster: ${error.message}. Falling back to TMDB poster.`);
posterUrl = `https://image.tmdb.org/t/p/w500${content.poster_path}`;
}
} else {
posterUrl = `https://image.tmdb.org/t/p/w500${content.poster_path}`;
}
return posterUrl;
};
const cachePosters = async () => {
for (const { id, url } of posterCacheQueue) {
try {
await setCachedPoster(id, url);
} catch (error) {
log.error(`Failed to cache poster id ${id}: ${error.message}`);
}
}
posterCacheQueue.clear();
cachedPosters.clear();
};
module.exports = {
getRpdbPoster,
getPosterUrl,
cachePosters
};