Example #1
0
 /**
  * @param string $url
  * @param array $queries
  *
  * @throws InvalidRequest
  * @throws OverQueryLimit
  * @throws RequestDenied
  * @throws Unknown
  *
  * @return array
  */
 protected static function query(string $url, array $queries = []) : array
 {
     if (!self::$client) {
         self::$client = new HttpClient();
         $base = new Uri('https://maps.googleapis.com/maps/api');
         self::$client->setBaseUri($base);
     }
     if (!isset($queries['key'])) {
         $queries['key'] = DI::config()->get('googleMaps/apikey');
     }
     $uri = new Uri($url);
     $uri->addQueries($queries);
     $response = self::$client->get($uri->get());
     $data = json_decode($response->getBody(), true);
     if (!($data['status'] == 'OK' || $data['status'] == 'ZERO_RESULTS')) {
         switch ($data['status']) {
             case 'OVER_QUERY_LIMIT':
                 throw new OverQueryLimit($data['error_message'] ?? $data['status']);
             case 'REQUEST_DENIED':
                 throw new RequestDenied($data['error_message'] ?? $data['status']);
             case 'INVALID_REQUEST':
                 throw new InvalidRequest($data['error_message'] ?? $data['status']);
             default:
                 throw new Unknown($data['error_message'] ?? $data['status']);
         }
     }
     return $data;
 }
Example #2
0
 /**
  * @return string
  */
 private function download()
 {
     $client = new HttpClient();
     // file download
     $this->output->writeln('Downloading database');
     $progress = new ProgressBar($this->output, 100);
     $progress->setMessage(0, 'currentsize');
     $progress->setMessage('???', 'totalsize');
     $progress->setFormat('<comment>[%bar%]</comment> %currentsize:6s% mo/%totalsize:6s% mo ' . '<info>%percent:3s%%</info> %elapsed:6s%/%estimated:-6s%');
     $progress->start();
     $client->getClient()->setOption(AbstractClient::OPTIONS_TIMEOUT, false)->setOption(AbstractClient::OPTIONS_ACCEPT_ENCODING, false)->setProgress(function ($resource, $download_size, $downloaded, $upload_size, $uploaded) use($progress) {
         if ($download_size > 0) {
             $progress->setMessage(round($downloaded / 1024 / 1024, 3), 'currentsize');
             $progress->setMessage(round($download_size / 1024 / 1024, 3), 'totalsize');
             $progress->setProgress(floor($downloaded * 100 / $download_size));
         }
     });
     $zipFile = $client->get('http://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip');
     $progress->finish();
     $this->output->write("\n");
     if (strpos($zipFile->getBody(), "\n") === false) {
         $this->output->writeln(sprintf("<error>Invalid zip with content '%s'</error>", $zipFile->getBody()));
         return false;
     }
     $tmp = tempnam(sys_get_temp_dir(), 'maxmind');
     file_put_contents($tmp, $zipFile->getBody());
     $this->output->writeln(sprintf("Created tmp file with csv at '%s'", $tmp), OutputInterface::VERBOSITY_VERBOSE);
     return $tmp;
 }