Извлечение больших разбитых на страницы данных из REST API с помощью Python - PullRequest
1 голос
/ 30 мая 2019

Я извлекаю данные из API остальных.Проблема в том, что размер данных огромен, поэтому ответ разбит на страницы.Я справился с этим, сначала прочитав, сколько страниц данных, а затем повторив запрос для каждой страницы.Единственная проблема здесь заключается в том, что общее количество страниц составляет около 1,5 КБ, что требует огромного количества времени для фактической загрузки и добавления в CSV.Есть ли более быстрое решение для этого?

Это конечная точка, на которую я нацеливаюсь: https://developer.keeptruckin.com/reference#get-logs

import requests
import json
import csv
url='https://api.keeptruckin.com/v1/logs?start_date=2019-03-09'
header={'x-api-key':'API KEY HERE'}
r=requests.get(url,headers=header)
result=r.json()
result = json.loads(r.text)
num_pages=result['pagination']['total']
print(num_pages)
for page in range (2,num_pages+1):
    r=requests.get(url,headers=header, params={'page_no': page})
    result=r.json()
    result = json.loads(r.text)
    csvheader=['First Name','Last Name','Date','Time','Type','Location']
    with open('myfile.csv', 'a+', newline='') as csvfile:
        writer = csv.writer(csvfile, csv.QUOTE_ALL)
        ##writer.writerow(csvheader)
        for log in result['logs']:
            username = log['log']['driver']['username']
            first_name=log['log']['driver']['first_name']
            last_name=log['log']['driver']['last_name']
            for event in log['log']['events']:
                start_time = event['event']['start_time']
                date, time = start_time.split('T')
                event_type = event['event']['type']
                location = event['event']['location']
                if not location:
                    location = "N/A"
                if (username=="barmx1045"  or username=="aposx001" or username=="mcqkl002" or username=="coudx014" or username=="ruscx013" or username=="loumx001" or username=="robkr002" or username=="masgx009"or username=="coxed001" or username=="mcamx009" or username=="linmx024" or username=="woldj002" or username=="fosbl004"):
                    writer.writerow((first_name, last_name,date, time, event_type, location))

1 Ответ

2 голосов
/ 30 мая 2019

Первый вариант : большинство постраничных ответов имеют размер страницы, который вы можете редактировать.https://developer.keeptruckin.com/reference#pagination Попробуйте обновить поле per_page до 100, в отличие от значения по умолчанию для 25 нажатий.

Второй вариант : потенциально вы можете извлекать более одной страницы за разиспользование нескольких потоков / процессов и разделение того, за какую часть страниц отвечает каждая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...