Restful paginate с питоном - PullRequest
       8

Restful paginate с питоном

0 голосов
/ 24 ноября 2018

Я получаю данные, используя Python, через API-интерфейс rest следующим образом ...

result = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc"))

В API встроено не более 100 результатов, поэтому я должен разбить на страницы в python.

После первого вызова result.nextPage возвращает код, который я затем должен передать следующему вызову API, например ...

result2 = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc&nextPage=someCode"))

И так до тех пор, пока я не 'м через все страницы.

Есть ли в Python какой-либо встроенный механизм для обработки нумерации страниц, как этот?

Я мог бы написать неуклюжий цикл самостоятельно, но не уверен насчет

  1. Как обрабатывать ожидание каждой страницы, чтобы я знал, что могу перейти к следующему вызову
  2. Как обработать событие «больше страниц» без ошибок
  3. Как объединить результаты всех вызововв 1 переменную после выполнения всех вызовов

Оцените любые мысли по поводу самого элегантного способа сделать это.

1 Ответ

0 голосов
/ 24 ноября 2018

Есть ли в Python какой-либо встроенный механизм для обработки нумерации страниц, как этот?

Нет.

Напишите цикл while True: с оператором break, еслибольше нет загружаемых страниц.

Как обрабатывать ожидание каждой страницы, поэтому я знаю, что могу продолжить следующий вызов

urllib2.urlopen не асинхронный.Ваш код будет блокировать (т. Е. Ждать), пока запрос не будет выполнен.

Как обрабатывать событие «больше страниц» без ошибок

Это зависит от API, который вы используетеИспользуем.Я ожидаю, что result.nextPage пусто / не установлено на последней странице.

Как объединить результаты всех вызовов в 1 переменную после выполнения всех вызовов

Добавляйте их в список по мере продвижения.Псевдокод:

url = "initial URL"
results = []

while True:
    current_page = request(url)
    results.append(current_page)
    if (another page available):
        url = "new url with next page code"
    else:
        break

Я искренне рекомендую вам использовать requests модуль вместо самых простых urllib2.urlopen.

...