Компонент GeoData предназначен для использования в Laravel 5.7 и выше, представляет из себя "фабрику" (обертку) для получения информации по IP адресу. В теущей версии в качестве основы используется определитель локаций SypexGeo с помощью открытого кода scriptixru (последний его релиз на данный момент датируется Apr 3, 2015 и применить его в качестве vendor не представляется возможным, поэтому его начинка была немного изменена).
Во-первых хотелось чуть разобраться в Laravel, во-вторых я не нашел достойного решения поставленной задачи и в-третьих, из-за того что база от Sypex довольно большая и ее использование в том виде, которое рекомендует разработчик это расточительство ресурсов, я решил написать универсальный механизм создающий основу для агрегатора данных геолокационных систем, который позволит, без больших затрат, подключать и использовать любой доступный механизм сбора данных по IP адресу. И в случае отказа от одного из них заменять его на другой без изменения всего остального кода.
Потребуются следующие библиотеки:
composer require spatie/temporary-directory
composer require guzzlehttp/guzzle:~6.0
composer require chumper/zipper
После вам нужно вручную разместить в своих файлах основываясь на примерах:
geoData/app/Http/Kernel.php
geoData/config/app.php
geoData/config/geodata.php
Остальные файлы, перенести через копирование.
Для проверки работы middleware можете использовать предложенный маршрут из routes/publicApi.php
После чего необходимо запустить скачивание БД php artisan geodata:download
. Этот же скрипт можно использовать для ее обновления.
Для того что бы добавить стороннюю библиотеку определения локации, например MaxMind geoIp необходимо:
- Создать свой сервис по примеру
app/Services/GeoData/SypexGeo.php
- разместить файлы в папке сервис провайдеров
app/Services/GeoData
. - внести изменения в helper
app/Helpers/GeoDataHelpers.php
- добавить свой файл конфигурации в
geoData/config/geodata.php
- кешировать результаты
- добавить загрузчик БД с проверкой данных
- добавить блокирование хранилища при обновлении
- добавить логер событий неудачного обновления с оповещением в mattermost
- переписать чтение БД sypex-a для экономии ресурсов
- использовать очередь сообщений
- создать получение комбинированных данных
- создать универсальный формат получения данных и его валидацию
- создать установщик
This project is licensed under the MIT License - see the LICENSE.md file for details.