×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: PHP
Posted by: Сергей Шевченко
Added: Apr 21, 2017 10:08 AM
Modified: May 23, 2017 3:59 PM
Views: 18
Tags: json api yandex
  1. private function makeYandexApiRequest($place)
  2.     {
  3.         $place['format'] = 'json';
  4.         $apiUrl = 'https://geocode-maps.yandex.ru/1.x/';
  5.         $apiUrl = $apiUrl . '?format=json&geocode=' . $place['address'];
  6.         //$context = stream_context_create(['http' => ['timeout' => 5]]);
  7.  
  8.         // Make request
  9.         for ($i = 1; $i <= 5; $i++) {
  10.             $response = json_decode(file_get_contents($apiUrl, false));
  11.  
  12.             if ($response) {
  13.                 break;
  14.             }
  15.  
  16.             if ($i === 5) {
  17.                 $date = new \DateTime();
  18.                 $error = sprintf(
  19.                     '%s Геокоординаты c Yandex не получены! Адресс: %s',
  20.                     $date->format('[Y-m-d H:i:s]'),
  21.                     $place['address']
  22.                 );
  23.                 file_put_contents('migrate_all.log', $error . "\n", FILE_APPEND);
  24.                 file_put_contents('migrate_errors.log', $error . "\n", FILE_APPEND);
  25.                 $this->stepErrorDot();
  26.                 $this->errorsList[] = $error;
  27.                 break;
  28.             }
  29.         }
  30.  
  31.         // Check response
  32.         if (isset($response->response->GeoObjectCollection->metaDataProperty->found) && 0 === $response->response->GeoObjectCollection->metaDataProperty->found) {
  33.             return null;
  34.         }
  35.  
  36.         if (!isset($response->response->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos)) {
  37.             return null;
  38.         }
  39.         $point = explode(' ', $response->response->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos);
  40.  
  41.         $geoInfo = [
  42.             'lat' => $point[0],
  43.             'lng' => $point[1],
  44.         ];
  45.  
  46.         return $geoInfo;
  47.     }