Это очень похоже на запрос, который я обычно делаю в Python для получения данных о билетах Zendesk.
Сначала давайте импортируем зависимости:
import requests
from urllib.parse import urlencode
Теперь давайте создадим строку запроса и добавим ее в словарь, содержащий все параметры вашего запроса:
queryString = "updated>24hours type:ticket"
params = {
'query': queryString,
'sort_by': 'updated_at',
'sort_order': 'desc'
}
Последнее, что нам нужно сделать, это указать url
, user
и pwd
, которые вам нужны:
url = 'https://clubready.zendesk.com/api/v2/search.json?' + urlencode(params)
user = YOUR_EMAIL + '/token'
pwd = YOUR_TOKEN
Теперь мы готовы сделать запрос. Для этого установите while
цикл, который будет читать ответ .json
и добавить его к resultsList
.
#use a counter to print the current page number
counter = 0
while url:
response = requests.get(url, auth=(user, pwd))
if response.status_code == 429:
#handle rate limiting with Zendesk's recommended timeout value
print('Rate limited! Please wait.')
time.sleep(int(response.headers['retry-after']))
continue
if response.status_code != 200:
#for any other code, exist the request
print('Status:', response.status_code, 'Problem with the request. Exiting.')
exit()
#if the request went through, read through the json and add each ticket to resultsList
data = response.json()
for result in data['results']:
resultsList.append(result)
#print the current page number. This is not necessary, but nice
counter += 1
print(str(counter) + ", ", end='')
#get the url of the next page that is given inside the results json
url = data['next_page']
#timeout for 1 second to avoid accidental rate limiting
time.sleep(1)
Использование таймаута после прочтения каждой страницы помогло мне избежать нечетного ограничения скорости.
resultsList
будет список, каждый элемент представляет один билет. Таким образом, длина списка равна количеству билетов, найденных по вашему запросу. Этот список может быть использован для создания Pandas DataFrame, где вы можете дополнительно проанализировать данные вашего билета.