Интеграция с meteoblue.com

1k
Алексей,

Сервис предоставляет API по детальному прогнозу погоды с арготехнической информацией. В целом, их API хорошо документирован и нужно лишь потратить немного времени на то, чтобы понять как всё устроено.

Сервис предоставляет 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:

Пример meteoblue.com АПИ

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 22 марта 2022 | Обновлено 23 марта 2022
meteoblue, API, примеры кода
Поделиться
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Сервис предоставляет API по детальному прогнозу погоды с арготехнической информацией. В целом, их API хорошо документирован и нужно лишь потратить немного времени на то, чтобы понять как всё устроено.