mirror of
https://github.com/Inside4ndroid/TMDB-Embed-API.git
synced 2026-10-22 09:35:11 +00:00
Full overhaul of the repo please see changelog
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
const fetch = (...args) => import('node-fetch').then(m => m.default(...args));
|
||||
const { config } = require('./config');
|
||||
|
||||
const cache = {
|
||||
imdbByTmdb: new Map(),
|
||||
details: new Map(),
|
||||
};
|
||||
const TTL_MS = 6 * 60 * 60 * 1000;
|
||||
function isFresh(entry) { return entry && (Date.now() - entry.ts) < TTL_MS; }
|
||||
|
||||
async function tmdbFetchJson(url) {
|
||||
if (!config.tmdbApiKey) throw new Error('TMDB_API_KEY missing');
|
||||
const sep = url.includes('?') ? '&' : '?';
|
||||
const full = `${url}${sep}api_key=${config.tmdbApiKey}`;
|
||||
const res = await fetch(full, { timeout: 15000 });
|
||||
if (!res.ok) throw new Error(`TMDB request failed ${res.status}`);
|
||||
return res.json();
|
||||
}
|
||||
async function getExternalIds(type, tmdbId) {
|
||||
const key = `${type}:${tmdbId}`;
|
||||
const cached = cache.imdbByTmdb.get(key);
|
||||
if (isFresh(cached)) return cached.data;
|
||||
const json = await tmdbFetchJson(`https://api.themoviedb.org/3/${type}/${tmdbId}/external_ids`);
|
||||
cache.imdbByTmdb.set(key, { data: json, ts: Date.now() });
|
||||
return json;
|
||||
}
|
||||
async function getDetails(type, tmdbId) {
|
||||
const key = `${type}:${tmdbId}:details`;
|
||||
const cached = cache.details.get(key);
|
||||
if (isFresh(cached)) return cached.data;
|
||||
const json = await tmdbFetchJson(`https://api.themoviedb.org/3/${type}/${tmdbId}`);
|
||||
cache.details.set(key, { data: json, ts: Date.now() });
|
||||
return json;
|
||||
}
|
||||
async function resolveImdbId(type, tmdbId) {
|
||||
try { const ext = await getExternalIds(type, tmdbId); return ext.imdb_id || null; } catch { return null; }
|
||||
}
|
||||
module.exports = { getExternalIds, getDetails, resolveImdbId };
|
||||
Reference in New Issue
Block a user