1

Тема: GraphQL pagination

Вирішую ребус із слабо документованою апішкою на базі GraphQL.

import requests

var_query = """ query { getRequest1(start_date: \"2021-01-01\", end_date: \"2021-01-31\") { leases { actual_move_in_date address_city address_state address_street address_unit address_zip created_at expected_move_in_date id lease_end_date lease_start_date monthly_rent organization_id property_id updated_at } error { error_id message type } pagination { has_next_page page page_size total_items_number } } } """

headers = {"Authorization": "Bearer token1"}
url = 'https://example.com/graphql'
r = requests.post(url, json={'query': var_query}, headers=headers, proxies=dict(http='socks5://127.0.0.1:9521',https='socks5://127.0.0.1:9521'))
print(r.status_code)
print(r.text)

Запит повертає дані, серед яких є також інформація про наявну наступну сторінку

"pagination":{"has_next_page":true,"page":1,"page_size":10,"total_items_number":858}

Тільки от поки що незрозуміло, як саме надіслати наступний запит щоб отримати сторінку 2 (і подальші)...

2

Re: GraphQL pagination

(цю проблему давно вирішено і я вже змінив проект, тож запитав у старшої версії ґпт лише з цікавості)

GPT-3.5 написав:

Цей код виконує запит до сервера GraphQL з використанням бібліотеки requests у Python. Він відправляє запит до url з заданим запитом var_query та авторизаційним заголовком Authorization, після чого виводить код стану відповіді та текст відповіді на екран.

У відповіді міститься інформація про наявність наступної сторінки, яка знаходиться у властивості pagination. Щоб отримати наступну сторінку, потрібно виконати новий запит, передавши значення властивості page у параметрі запиту. Наприклад, щоб отримати сторінку 2, можна змінити запит наступним чином:

var_query = """ query { getRequest1(start_date: \"2021-01-01\", end_date: \"2021-01-31\") { leases { actual_move_in_date address_city address_state address_street address_unit address_zip created_at expected_move_in_date id lease_end_date lease_start_date monthly_rent organization_id property_id updated_at } error { error_id message type } pagination(page: 2) { has_next_page page page_size total_items_number } } } """

У цьому запиті додано параметр pagination(page: 2), який вказує, що потрібно повернути другу сторінку результатів. Після цього потрібно виконати запит знову, як і раніше, та отримати відповідь.