UNPKG

tv-recommender-mcp-server

Version:

MCP server for TV show recommendations

113 lines (112 loc) 3.93 kB
"use strict"; /** * 类型映射工具 * 将用户输入的中英文类型名映射到TMDb的类型ID */ Object.defineProperty(exports, "__esModule", { value: true }); exports.genreList = void 0; exports.mapGenreToId = mapGenreToId; exports.getGenreNameById = getGenreNameById; // TMDb 支持的主要电视剧类型 // 完整列表参考: https://developers.themoviedb.org/3/genres/get-tv-list exports.genreList = [ { id: 10759, englishName: "Action & Adventure", chineseName: "动作冒险" }, { id: 16, englishName: "Animation", chineseName: "动画" }, { id: 35, englishName: "Comedy", chineseName: "喜剧" }, { id: 80, englishName: "Crime", chineseName: "犯罪" }, { id: 99, englishName: "Documentary", chineseName: "纪录" }, { id: 18, englishName: "Drama", chineseName: "剧情" }, { id: 10751, englishName: "Family", chineseName: "家庭" }, { id: 10762, englishName: "Kids", chineseName: "儿童" }, { id: 9648, englishName: "Mystery", chineseName: "悬疑" }, { id: 10763, englishName: "News", chineseName: "新闻" }, { id: 10764, englishName: "Reality", chineseName: "真人秀" }, { id: 10765, englishName: "Sci-Fi & Fantasy", chineseName: "科幻奇幻" }, { id: 10766, englishName: "Soap", chineseName: "肥皂剧" }, { id: 10767, englishName: "Talk", chineseName: "脱口秀" }, { id: 10768, englishName: "War & Politics", chineseName: "战争政治" }, { id: 37, englishName: "Western", chineseName: "西部" } ]; // 常见的别名和更多中文表达方式 const genreAliases = { // 英文别名 "action": 10759, "adventure": 10759, "cartoon": 16, "funny": 35, "detective story": 80, "crime story": 80, "docs": 99, "doc": 99, "family show": 10751, "children": 10762, "mystery": 9648, "detective": 9648, "news show": 10763, "science fiction": 10765, "fantasy": 10765, "scifi": 10765, "sci-fi": 10765, "talk show": 10767, "politics": 10768, "war": 10768, // 中文别名 "动作": 10759, "冒险": 10759, "卡通": 16, "搞笑": 35, "幽默": 35, "侦探": 80, "罪案": 80, "纪实": 99, "纪录片": 99, "温情": 18, "家庭剧": 10751, "少儿": 10762, "推理": 9648, "新闻节目": 10763, "综艺": 10764, "科幻": 10765, "奇幻": 10765, "魔幻": 10765, "脱口秀节目": 10767, "访谈": 10767, "战争": 10768, "政治": 10768 }; /** * 将用户输入的类型名(中文或英文)映射到TMDb类型ID * @param genreName 用户输入的类型名 * @returns TMDb类型ID,如果找不到映射则返回undefined */ function mapGenreToId(genreName) { if (!genreName) return undefined; // 统一处理:转小写并去除首尾空格 const normalizedName = genreName.toLowerCase().trim(); // 1. 先检查别名映射 if (normalizedName in genreAliases) { return genreAliases[normalizedName]; } // 2. 再检查主要类型列表 // 先精确匹配 const exactMatch = exports.genreList.find(genre => genre.englishName.toLowerCase() === normalizedName || genre.chineseName === normalizedName); if (exactMatch) return exactMatch.id; // 3. 最后进行模糊匹配(包含关系) const fuzzyMatch = exports.genreList.find(genre => genre.englishName.toLowerCase().includes(normalizedName) || normalizedName.includes(genre.englishName.toLowerCase()) || genre.chineseName.includes(normalizedName) || normalizedName.includes(genre.chineseName)); return fuzzyMatch?.id; } /** * 获取类型ID对应的类型名(优先返回中文名) * @param genreId TMDb类型ID * @returns 类型名(中文) */ function getGenreNameById(genreId) { const genre = exports.genreList.find(g => g.id === genreId); return genre?.chineseName; }