UNPKG

tv-recommender-mcp-server

Version:

MCP server for TV show recommendations

63 lines (62 loc) 2.67 kB
"use strict"; 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)}`); } }