Функция поиска 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);
  },
Другие вопросы по тегам