Получение более 100 контактов с помощью Qualtrics API с использованием URL-адреса nextPage

#python #api #survey #qualtrics #alteryx

#python #API #опрос #qualtrics #alteryx

Вопрос:

Я успешно настроил API Qualtrics для экспорта контактов из работы с примером скрипта с их веб-сайта. Моя проблема в том, что API экспортирует только 100 контактов одновременно. Кажется, если я использую URL-адрес из поля nextPage в моем первоначальном экспорте json для выполнения другого вызова API, я могу получить еще 100, но это не идеально. Иногда у меня есть списки с более чем 10 000 человек, и я не могу работать с этим вручную.

Я новичок в Python и хотел бы знать, как можно использовать функцию URL-адреса nextPage для получения более 100 ответов одновременно.

Вызов API выглядит следующим образом

 # List Contacts in Mailing List

import requests

# Setting user Parameters

apiToken = "YOUR API TOKEN"
dataCenter = "YOUR DATACENTER"

directoryId = "POOL_123456"
mailingListId = "CG_123456"

baseUrl = "https://{0}.qualtrics.com/API/v3/directories/{1}/mailinglists/{2}/contacts".format(dataCenter, directoryId, mailingListId)
headers = {
    "x-api-token": apiToken,
    }

response = requests.get(baseUrl, headers=headers)
print(response.text)
 

И я получаю аналогичные результаты только со 100 ответами:

 {
    "meta": {
        "httpStatus": "200 - OK",
        "requestId": "7de14d38-f5ed-49d0-9ff0-773e12b896b8"
    },
    "result": {
        "elements": [
            {
                "contactId": "CID_123456",
                "email": "js@example.com",
                "extRef": "1234567",
                "firstName": "James",
                "language": "en",
                "lastName": "Smith",
                "phone": "8005552000",
                "unsubscribed": false
            },
            {
                "contactId": "CID_3456789",
                "email": "person@example.com",
                "extRef": "12345678",
                "firstName": "John",
                "language": "en",
                "lastName": "Smith",
                "phone": "8005551212",
                "unsubscribed": true
            }
        ],
        "nextPage": null
    }
}
 

У кого-нибудь есть идея, как я могу зациклить информацию о следующей странице, чтобы получить весь список контактов, независимо от того, сколько наборов из 100 содержится? У меня есть несколько списков, в которых есть десятки, сотни и тысячи контактов, и я хотел бы, чтобы это работало для всех.

Ценю любой вклад! Спасибо!

Ответ №1:

Используйте цикл while и переименуйте baseUrl в nextPage:

 nextPage = "https://{0}.qualtrics.com/API/v3/directories/{1}/mailinglists/{2}/contacts".format(dataCenter, directoryId, mailingListId)
 
while nextPage is not None:
      response = requests.get(nextPage, headers=headers)
      json_data = json.loads(response.text)
      #process json_data  
      nextPage = json_data['result']['nextPage'] 
 

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

1. Как раз то, что я ищу! Кажется, что это сработает, но когда я заменяю baseUrl на nextPage вместе со сценарием цикла, кажется, что вообще ничего не происходит. Я не получаю никаких результатов в ответ. Не уверен, что там не так.