查找与搜索方法
学习并练习TMDB API中的查找和搜索方法。
我们将在这节课中讨论两种在 TMDB 上搜索电影、电视剧和人物的方法。
find 接口
我们可以使用 TMDB 的 find 接口,通过一个整数类型的路径参数 external_id,仅凭外部 ID 来搜索数据库中的对象。该方法会同时搜索所有类型的对象(电影、电视剧和人物),并将结果以单一 JSON 响应返回。
注意: find 接口使用外部 ID 作为路径参数。有关外部 ID 的详细信息以及如何获取它们,请参阅本课程相关内容。
基础 URL 如下:
1https://api.themoviedb.org/3/find/{external_id}?api_key={ourTMDBapikey}&external_source=ExternalSource
TMDB 支持的每种对象的外部数据源如下:
| 名称 | 类型 | 电影 | 电视剧 | 电视剧季 | 电视剧集 | 人物 |
|---|---|---|---|---|---|---|
| IMDb ID | 媒体数据库 | ✓ | ✓ | ✗ | ✓ | ✓ |
| TVDB ID | 媒体数据库 | ✗ | ✓ | ✓ | ✓ | ✗ |
| 社交 ID | ✓ | ✓ | ✗ | ✗ | ✓ | |
| 社交 ID | ✓ | ✓ | ✗ | ✗ | ✓ | |
| 社交 ID | ✓ | ✓ | ✗ | ✗ | ✓ |
请求参数
此接口的输入查询参数如下:
| 名称 | 类型 | 类别 | 描述 |
|---|---|---|---|
| language | 字符串 | 可选 | 使用 ISO_3166_1 代码获取指定语言的翻译数据。仅适用于支持该功能的字段。默认值为 en-US。 |
| external_source | 字符串 | 必需 | 用于指定与所用外部 ID 对应的外部数据源。 |
让我们通过下方代码工具运行一个 find 方法的示例。在运行程序前,请确保已正确填写 API_KEY、对象的 EXTERNAL_ID 和 EXTERNAL_SOURCE。目前我们可以使用以下外部 ID 及其来源名称来查找《蜘蛛侠:无路可逃》。
| 外部数据源 | 外部 ID |
|---|---|
| facebook_id | SpiderManMovie |
| imdb_id | tt10872600 |
| instagram_id | spidermanmovie |
| twitter_id | spidermanmovie |
点击“运行”按钮,根据外部 ID 查找该电影。
1import fetch from "node-fetch"; 2 3const API_KEY = '{{API_KEY}}'; 4const external_source = '{{EXTERNAL_SOURCE}}'; 5 6const endpointUrl = new URL('https://api.themoviedb.org/3/find/{{EXTERNAL_ID}}'); 7 8const queryParameters = new URLSearchParams({ 9 api_key : API_KEY, 10 language : 'en-US', 11 external_source : external_source 12}); 13 14async function fetchData() { 15 try { 16 endpointUrl.search = queryParameters; 17 const response = await fetch(endpointUrl); 18 19 // 调用打印响应的函数 20 printResponse(response); 21 } catch (error) { 22 23 // 调用打印错误信息的函数(如有) 24 printError(error); 25 } 26} 27 28// 调用执行 API 请求的函数 29fetchData();
响应字段
返回的 JSON 响应中包含的对象如下:
| 对象 | 类型 | 描述 |
|---|---|---|
| movie_results | 数组[对象] | 如果传入的是电影的外部 ID,则返回请求的电影详情。 |
| person_results | 数组[对象] | 如果传入的是人物的外部 ID,则返回请求人物的相关信息。 |
| tv_results | 数组[对象] | 如果传入的是电视剧的外部 ID,则返回请求电视剧的详情。 |
| tv_episode_results | 数组[对象] | 如果传入的是电视剧某一集的外部 ID,则返回该集的详情。 |
| tv_season_results | 数组[对象] | 如果传入的是电视剧某一季的外部 ID,则返回该季的详情。 |
find 方法在开发者已有工具并希望集成此服务时非常有用。
search 接口
基于文本的搜索是互联网上最常用的搜索方式之一。我们提供一个查询字符串,系统将返回可能的匹配项。
对于 TMDB 的文本搜索,我们使用 search 接口。可以通过传递一个类型为字符串的查询参数 query,来搜索数据库中的任何对象。基于文本的搜索会考虑所有对象的原始名称、翻译名称、替代名称和标题。
基础 URL 如下:
1https://api.themoviedb.org/3/search?api_key={ourTMDBapikey}&query=ourQUERYstring
请求参数
此接口的输入查询参数如下:
| 名称 | 类型 | 类别 | 描述 |
|---|---|---|---|
| query | 字符串 | 必需 | 用于搜索的文本查询内容。其值必须进行 URI 编码。 |
| page | 整数 | 可选 | 用于指定查询的页码。取值范围为 1–1000(含)。默认值为 1。 |
现在,我们可以使用下方代码工具尝试运行一个基于文本的搜索示例。在运行程序前,请确保已填写正确的 API_KEY。点击“运行”按钮,获取查询字符串的所有搜索结果。
1import fetch from "node-fetch"; 2 3const API_KEY = '{{API_KEY}}'; 4 5const endpointUrl = new URL('https://api.themoviedb.org/3/search/tv'); 6 7const queryParameters = new URLSearchParams({ 8 api_key : API_KEY, 9 query : 'the+office', 10 page : 1 11}); 12 13async function fetchData() { 14 try { 15 endpointUrl.search = queryParameters; 16 const response = await fetch(endpointUrl); 17 18 // 调用打印响应的函数 19 printResponse(response); 20 } catch (error) { 21 22 // 调用打印错误信息的函数(如有) 23 printError(error); 24 } 25} 26 27// 调用执行 API 请求的函数 28fetchData();
我们已经获取了与电视剧《办公室》最接近的所有匹配结果。我们可以修改第 5 行的基 URL 来搜索 TMDB 中的不同对象。例如,若要搜索电影,可使用以下 URL:
1https://api.themoviedb.org/3/search/movie
同样,若要搜索人物,可以使用以下 URL:
1https://api.themoviedb.org/3/search/person
响应字段
输出的 JSON 响应中包含的对象如下:
| 对象 | 类型 | 描述 |
|---|---|---|
| page | 整数 | 当前查询的页码。 |
| results | 数组[对象] | 返回指定页面上的所有最接近的匹配项(及其详细信息),例如第一页有 21 个匹配项,第二页有 20 个,依此类推。 |
| total_pages | 整数 | TMDB 中包含匹配结果的总页数。 |
| total_results | 整数 | TMDB 中所有最接近匹配项的总数。 |