Интеграция с meteoblue.com
Сервис предоставляет API по детальному прогнозу погоды с арготехнической информацией. В целом, их API хорошо документирован и нужно лишь потратить немного времени на то, чтобы понять как всё устроено.
Документация на англ. языке тут: https://docs.meteoblue.com/en/weather-apis/introduction/overview
Логика там такая, данные разбиты на группы (пакеты), basic, agro, почасовые и дневные. В каждом пакете свой набор данных. Т.е. при оформлении заказа нужно определиться с тем, что необходимо именно вам.
Далее всё просто, получаем ключ (сначала тестовый), формируем запрос и делаем запрос к API, пример:
$apiKey = 'ваш ключ к апи'; $ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp(); // получаем geo данные посетителя if ($geoIpData = \Bitrix\Main\Service\GeoIp\Manager::getDataResult($ip, LANGUAGE_ID)) { $latitude = $geoIpData->getGeoData()->latitude; $longitude = $geoIpData->getGeoData()->longitude; $timezone = $geoIpData->getGeoData()->timezone; // следующие данные помогут определить высоту над уровнем моря $countryName = $geoIpData->getGeoData()->countryName; $regionName = $geoIpData->getGeoData()->regionName; $cityName = $geoIpData->getGeoData()->cityName; // тут нужно будет сделать запрос в справочник $heightAsl = "200"; // 200 для теста $arRequest = [ // Параметры запроса в АПИ погоды 'name' => 'Basel', 'apikey' => $apiKey, 'lat' => $latitude, // Координаты WGS84 для определения местоположения 'lon' => $longitude, 'asl' => $heightAsl, // Высота в метрах над уровнем моря, я брал из справочника 'tz' => $timezone, // Часовой пояс 'format' => 'json', // JSON или CSV 'temperature' => 'C', // Фаренгейта или Цельсия. 'windspeed' => 'ms-1', // Различные единицы скорости ветра 'winddirection' => '2char', 'precipitationamount' => 'mm', // Различные единицы осадков 'timeformat' => 'Y-M-D', // Формат времени 'forecast_days' => '7', // количество дней прогноза 'history_days' => '1', // количество предыдущих дней прогноза ]; $obHttp = new \Bitrix\Main\Web\HttpClient(); $res = $obHttp->get('https://my.meteoblue.com/packages/basic-1h_basic-day?' . http_build_query($arRequest)); if ($arResponse = json_decode($res, true)) { var_dump($arResponse); } }
С ответом API лучше работать как с объектом, т.к. данных там очень много. Но наглядно посмотреть можно и в виде массива.
Справочник высот heightAsl.csv. Других способов получения данных нет. Даже местоположение устройства по gps (когда идет запрос в браузер) не всегда возвращает высоту.
Вот такую красоту мы делали с помощью этого API:
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.