Получение всех элементов приложения с помощью библиотеки python не работает

#python #podio

#python #podio

Вопрос:

 from pypodio2 import api

# Authenticate as App
podio_client = api.OAuthAppClient(
    client_id=PODIO_CLIENT_ID,
    client_secret=PODIO_CLIENT_SECRET,
    app_id=PODIO_APP_ID,
    app_token=PODIO_APP_TOKEN,    
)

# Set limit to 100
items = podio_client.Item.filter(app_id=PODIO_APP_ID, attributes={}, limit=100)
  

В моем приложении всего 251 элемент, и я ожидаю, что API вернет 100 элементов, но он возвращает только 20… Как это исправить?

печать (элементы [‘total’])

251

печать (элементы [‘filtered’])

251

print(len(items[‘items’])

20

Обновить

Я попробовал это с помощью библиотеки запросов, но все равно безуспешно…

 import requests
payload = {
  "filters":{},
  "limit": 30
}
resp = requests.post(url="https://api.podio.com/item/app/randomappid/filter/", 
                    headers={'authorization': 'OAuth2 randomn0mber'},
                    data=payload)
  

len(соответственно.json()[‘items’])

20

Документы по вызову API: https://developers.podio.com/doc/items/filter-items-4496747

Комментарии:

1. Можете ли вы опубликовать фрагмент вашего объекта items? на первый взгляд кажется, что ваш объект items имеет ключ «items», который содержит 20 элементов.

2. Объект items имеет три ключа: total, filtered и items. Total указывает, сколько элементов имеется в приложении, filtered указывает, сколько элементов осталось после применения фильтра, и items содержит все элементы. Я хочу получить 251 элемент, не применяя фильтра, я добавил ограничение в 100, чтобы показать, что оно нарушено, потому что я получаю только 20 элементов.

3. Разве элементы [‘filtered’] не должны также возвращать 100 элементов?

4. @nimish666 Он содержит только целое число.

Ответ №1:

limit необходимо передать через attributes параметр.

 # Set limit to 100
items = podio_client.Item.filter(app_id=PODIO_APP_ID, attributes={"limit": 100})
  

Ответ №2:

Не идеально, но с помощью устаревшего вызова API я получаю желаемые результаты… Все равно хотелось бы знать, как это сделать, используя вызов filter api.

 params = {"limit": 300}
resp = requests.get(url="https://api.podio.com/item/app/randomappid/", 
                    headers={'authorization': 'OAuth2 randomn0mber'},
                    params=params)
  

len(соответственно.json()[‘items’])

251