oselya / ip-geolocation-bundle
Symfony IP geolocation bundle
Installs: 2 021
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=8.3
- geoip2/geoip2: ^3.0
- guzzlehttp/guzzle: ^7.4
- symfony/cache: ^7.1
- symfony/config: ^7.1
- symfony/console: ^7.1
- symfony/dependency-injection: ^7.1
- symfony/deprecation-contracts: ^3.5
- symfony/http-kernel: ^7.1
- symfony/intl: ^7.1
- symfony/yaml: ^7.1
Requires (Dev)
- phpunit/phpunit: ^9.6
- symfony/phpunit-bridge: ^7.1
README
Install
composer req oselya/ip-geolocation-bundle
Before we get started, there is a small amount of configuration needed
# app/config/ip_geolocation.yaml ip_geolocation: cache_ttl: -1 maxmind: city_path: 'GeoLite2-City.mmdb' ip_api_com: access_key: 'qwerty'
Cli command
$ bin/console app:ip:location 92.253.204.162 +----------------+-----------+---------+-----------------+-----------------+ | IP | Continent | Country | Latitude | Longitude | +----------------+-----------+---------+-----------------+-----------------+ | 92.253.204.162 | EU | UA | 48.342449188232 | 24.575370788574 | +----------------+-----------+---------+-----------------+-----------------+
Service
<?php declare(strict_types=1); namespace Oselya\IpGeolocationBundle\Command; use Oselya\IpGeolocationBundle\GeoIpProvider\GeoIpProviderInterface; use Oselya\IpGeolocationBundle\ValueObject\Ip; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class IpGeolocationCommand extends Command { public function __construct(private readonly GeoIpProviderInterface $provider) { parent::__construct(); } protected function configure(): void { $this ->setName('app:ip:location') ->addArgument('ip', InputArgument::REQUIRED, 'The IP address.') ->setDescription('This command allows you to lookup location of IP addresses.'); } protected function execute(InputInterface $input, OutputInterface $output): int { $location = $this->provider->ipLookup(new Ip($input->getArgument('ip'))); $table = new Table($output); $table ->setHeaders(['IP', 'Continent', 'Country', 'Latitude', 'Longitude']) ->setRows([ [ $input->getArgument('ip'), $location->getContinent(), $location->getCountry(), $location->getLatitude(), $location->getLongitude(), ], ]); $table->render(); return Command::SUCCESS; } }