Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Выгрузка клиентов со столбцом почтовых индексов, но без координат является обычной отправной точкой для всего, что связано с зонами доставки, региональной отчётностью или привязкой к магазинам. Определить весь столбец за один раз быстрее, чем писать цикл.
Отправьте POST-запросом массив объектов с кодом и страной в /v1/postcode. Каждый элемент обрабатывается независимо и возвращается в том же порядке.
POST /v1/postcode
Content-Type: application/json
[{"code": "10115", "country": "DE"}, {"code": "75001", "country": "FR"}]{
"status": "ok",
"results": [
{"postcode": "10115", "country_code": "DE", "results": [{"lat": 52.5300, "lon": 13.3800, "components": {"city": "Berlin", "region": "Berlin"}}]},
{"postcode": "75001", "country_code": "FR", "results": [{"lat": 48.8630, "lon": 2.3360, "components": {"city": "Paris", "region": "Ile-de-France"}}]}
]
}Перед отправкой запроса сохраните исходный индекс строки или ID клиента рядом с каждой парой кода и страны и сопоставляйте результаты с записями клиентов по той же позиции. Этот же подход работает для пакетного прямого или обратного геокодирования.
В любом списке клиентов реального размера различных почтовых индексов обычно гораздо меньше, чем строк, поскольку многие клиенты в одном городе или районе имеют один и тот же индекс. Сначала составьте список уникальных пар кода и страны, определите этот меньший список одним пакетом, а затем сопоставьте результаты со всеми строками клиентов с каждым индексом, а не отправляйте по одному элементу массива на клиента, раз за разом платя за одну и ту же пару кода и страны.
Пустой массив results для конкретного элемента обычно означает, что такой пары кода и страны не существует, что часто встречается в старой выгрузке с опечатками или устаревшими почтовыми индексами. Помечайте такие строки для ручной проверки, а не удаляйте их молча из отчёта.
Индекс, сохранённый как «SW1A1AA» без пробела, и индекс, сохранённый как «SW1A 1AA» с пробелом, могут распознаваться одинаково или по-разному в зависимости от того, насколько единообразно ваша выгрузка форматирует индексы. Поэтому нормализация пробелов и регистра в выгрузке перед формированием массива пакета уменьшает количество строк, которые не распознаются исключительно из-за форматирования, а не потому, что индекс действительно неверен.
Пакет тарифицируется по одному запросу на элемент, поэтому список клиентов из 2 000 строк стоит 2 000 запросов, отправляете ли вы его одним пакетным вызовом или 2 000 отдельными. Отправлять одним вызовом всё равно стоит из-за меньших накладных расходов и одного набора заголовков квоты для проверки, хотя количество запросов в рамках вашего лимита одинаково в обоих случаях. Реально сокращает количество запросов предварительное удаление дубликатов, как описано выше, а не выбор между пакетными и отдельными вызовами.
Если список настолько большой, что может превысить 2 500 бесплатных запросов в день, проверьте X-Quota-Free-Remaining, прежде чем запускать всю обработку за один раз, или разделите её на пару дней, если не планируете переходить на предоплаченный баланс ради разовой задачи.
Определение почтовых индексов всего списка клиентов одним вызовом превращает то, что раньше было медленной фоновой задачей, в один простой запрос. Полный список полей приведён в документации по поиску почтовых индексов.