Функция поиска TMDB API дает только одну страницу данных
Привет
Я использую TMDB Api, и я получил ошибку в своем коде, говорящую, что у меня есть только 20 результатов из 29. Причина в том, что функция поиска в TMDB не возвращала вторую страницу данных. Вот поисковая фраза API (без моего личного ключа):
https://api.themoviedb.org/3/search/movie?query=Avengers&api_key=API_KEY
А вот и полученные данные: http://pastebin.com/MdpFz2Nx
Как видите, есть только страница 1, а в нижней части кода написано, что всего 2 страницы.
Есть ли какой-то другой способ получить оставшиеся данные или это ошибка, допущенная API?
4 ответа
Вы ищете page
параметр.
https://api.themoviedb.org/3/search/movie?query=Avengers&api_key=API_KEY&page=2
Приветствия.
Читайте в форуме TMDB по этой ссылке:
https://www.themoviedb.org/talk/5892db39c3a3686d10001a4d?language=en
Вам нужно сделать еще один запрос, чтобы получить следующие 20 результатов на следующей странице
TMDB не предоставляет полный результат поиска без разбивки на страницы в одном запросе API ( https://www.themoviedb.org/talk/55aa2a76c3a3682d63002fb1?language=en)
Это вы можете попробовать, это работает для меня в Angular
сервис.тс
searchbytextAndpageindex(data: any,pageNumber:number)
{
return this.http.get(`https://api.themoviedb.org/3/search/movie?api_key=<<key>>&language=en-US&query=${data}&page=${pageNumber}`,
{ params: { action: 'query', format: 'json', list: 'search', srsearch: data, origin: '*' }
})
компонент.ts
async AllSearchdataFun(searchText: any, pageno: any)
{
this.loadings = true
this.service.searchbytextAndpageindex(this.searchText,this.pageno).subscribe(async (searchdata: any) =>
{
await this.searchupcommingdta.push( ...searchdata.results);
this.loadings = false
})
}
компонент.ts
async onClickSearch()
{
this.isshowSearhdata = true;
this.isPagination = false;
this.service.searchAndShowAllData(this.searchText).subscribe(async (res: any) =>
{
if (res.total_pages > 1)
{
this.totalsearchpageIndex = res.total_pages;
for (let i = 0; i <= this.totalsearchpageIndex; i++)
{
this.AllSearchdataFun(this.searchText, i);
}
}
})
}
Вот как я запрашиваю 40 фильмов, которые я использую Axios, кстати ... вы можете сделать это по-своему
async fetchPopularMovies(req, res) {
let results = [];
await axios
.get(dBaseUrl + apiKey + "sort_by=popularity.desc&page=1")
.then((value) => results.push(...value.data.results))
.catch((err) => console.log(err));
await axios
.get(dBaseUrl + apiKey + "sort_by=popularity.desc&page=2")
.then((value) => results.push(...value.data.results))
.catch((err) => console.log(err));
res.status(200).json(results);
},