Техническое задание: Скрипт для обогащения геоданными IP-адресов
Цель проекта
Разработать автоматизированное решение для получения и записи географической информации (страна, регион, город) для IP-адресов, хранящихся в базе данных. Скрипт должен работать в фоновом режиме (cron) и поддерживать два сценария использования: первоначальное заполнение и периодическое обновление.
Исходные данные и окружение
- Основное хранилище: База данных MySQL.
- Источник геоданных: Внешний API сервиса ipwhois.io.
- Язык разработки: На выбор исполнителя (PHP или Python).
- Среда выполнения: Планировщик задач cron.
Основные функции скрипта
1. Обработка данных из API
- Для каждого IP-адреса из основной таблицы выполнять запрос к API ipwhois.io.
- Из ответа API извлекать данные о стране, регионе и городе на русском языке.
- Записывать полученные данные на русском в соответствующие поля основной таблицы.
- Автоматически преобразовывать русские названия в транслит и сохранять их в отдельные, предназначенные для этого поля.
- Фиксировать время обработки записи в специальном поле.
2. Механизм отслеживания изменений
- В основную таблицу добавить служебное поле для хранения последнего обработанного IP-адреса.
- При каждом запуске скрипт должен сравнивать текущий IP в строке с сохраненным значением.
- Если IP-адрес не изменился с момента последней обработки - пропускать строку для оптимизации работы.
3. Два режима работы
- Режим первичного заполнения: Последовательная обработка всех записей в таблице для первоначального наполнения полей геоданными.
- Режим постоянного обновления: Обработка только тех записей, с момента последнего обновления которых прошло более 24 часов.
4. Ведение журнала (логирования)
- Создать отдельную таблицу в базе данных для детального журналирования.
- При обработке каждого IP-адреса записывать в журнальную таблицу:
- Сам IP-адрес.
- Все геоданные, полученные от API.
- Полный ответ от API ipwhois.io для возможной дальнейшей аналитики.
- Запись в журнал должна производиться только если данный IP-адрес отсутствует в журнальной таблице, чтобы избежать дублирования.
Требования к реализации
- Код должен быть хорошо структурирован, с комментариями.
- Обязательна обработка ошибок (проблемы с сетью, недоступность API, ошибки базы данных).
- Скрипт должен быть оптимизирован для работы с большими объемами данных.
- Необходимо предусмотреть возможность настройки интервала cron и параметров подключения к БД.
- Транслитерация должна быть реализована по четким и consistent правилам.
Результат работы
- Рабочий скрипт на выбранном языке программирования.
- SQL-скрипты для создания необходимых дополнительных полей в существующей таблице и для создания новой журнальной таблицы.
- Инструкция по настройке и запуску (включая настройку cron).