tv-recommender-mcp-server
Version:
MCP server for TV show recommendations
63 lines (62 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getActorDetailsAndCredits = getActorDetailsAndCredits;
const tmdbClient_1 = require("../services/tmdbClient");
const errorHandler_1 = require("../utils/errorHandler");
/**
* 获取演员信息与参演作品
* @param params 包含演员姓名的参数对象
* @returns 演员信息与参演作品列表
*/
async function getActorDetailsAndCredits(params) {
const { actor_name } = params;
try {
// 通过演员姓名查找演员ID
const searchResults = await tmdbClient_1.tmdbClient.searchPerson(actor_name);
// 如果没有找到任何结果,抛出错误
if (!searchResults.results || searchResults.results.length === 0) {
throw new errorHandler_1.ApiError(`未找到名为"${actor_name}"的演员`, 404);
}
// 使用第一个搜索结果
const personId = searchResults.results[0].id;
// 并行获取演员详情和参演作品列表
const [personDetails, personCredits] = await Promise.all([
tmdbClient_1.tmdbClient.getPersonDetails(personId),
tmdbClient_1.tmdbClient.getPersonTvCredits(personId)
]);
// 格式化演员信息
const actorInfo = {
id: personDetails.id,
name: personDetails.name,
biography: personDetails.biography || '暂无简介',
profile_path: personDetails.profile_path,
popularity: personDetails.popularity || 0,
birthday: personDetails.birthday,
place_of_birth: personDetails.place_of_birth,
homepage: personDetails.homepage,
also_known_as: personDetails.also_known_as
};
// 格式化参演作品列表
// 优先展示主演角色(cast)而非幕后角色(crew)
const credits = (personCredits.cast || []).map((credit) => ({
show_id: credit.id,
show_title: credit.name || credit.original_name,
character: credit.character || '未知角色',
poster_path: credit.poster_path,
vote_average: credit.vote_average || 0,
first_air_date: credit.first_air_date
}));
// 按评分降序排序
credits.sort((a, b) => b.vote_average - a.vote_average);
return {
actor: actorInfo,
credits
};
}
catch (error) {
if (error instanceof errorHandler_1.ApiError) {
throw error;
}
throw new Error(`获取演员"${actor_name}"的信息失败: ${error instanceof Error ? error.message : String(error)}`);
}
}