Как сделать прогноз погоды на сайте. Интеграция с GisMeteo API

В качестве источника используются данные Gismeteo.ru.

Документация по Gismeteo API - https://www.gismeteo.ru/api/

Как реализовать интеграцию с Gismeteo

SaveItem формы: 

CREATE PROCEDURE [dbo].[fm_watch_gismeteo_saveItem]
   @username nvarchar(256), 
   @itemID int, 
   @fieldcity nvarchar(256) = ''  
AS
BEGIN
	-- 1 SELECT (Result, Msg)
	select 1 Result, ' ' Msg
       
    select 'apirequest' type, 'gismeteo-cities' code, 'city' p1_name, @fieldcity p1_value
END

Код JS (вызов методов API платформы и обработка результата): 

<script>
$(function(){
  sendRequestForCity = function(cityID){
  	as.sys.request("weather", "forecast", {
            data: { cityID: cityID },
            onSuccess: function (data) {
              	var s = "";
                var ss = JSON.parse(data.additionalData)[0].items;
   	    		var resp = $.grep(ss, function(v) {
    				return v.key == "response" 
				});
      			console.log(resp)
      			if(resp.length>0 && resp[0].value2) {
        			var el = JSON.parse(resp[0].value2);
          			console.log("weatherAPIResult", el); 
                  	if(el && el.response){
                    	for(var i = 0; i < el.response.length; i++){
                        	var item = el.response[i];
                          	s+="<h4>Дата " + item.date.local + 
                              "<span class='font-weight-bold text-white ml-3'>"+(item.temperature.air.min.C) + ' - ' + (item.temperature.air.max.C) +"C</span>"+
                              "</h4>";
                          	s+="<p>"+item.description.full+"</p>";
                          	s+="<span class='badge badge-light mr-1'>Влажность "+item.humidity.percent.avg+"%</span>";
                          	s+="<span class='badge badge-light mr-1'>Атм. давление "+item.pressure.mm_hg_atm.max+"мм.рт.ст.</span>";
                          	s+="<span class='badge badge-light mr-1'>Макс. скор. ветра "+item.wind.speed.max.m_s+"м/c</span>";
                          
                          
                          	s+="<hr>";
                          
                        }
                    }
                }
              	if(s){
                	as.sys.bootstrapAlert(s, {type: "info", delay: 10000000, hidePrev: true, icon: " "});
                }else{
                	as.sys.bootstrapAlert("Что-то пошло не так при получении прогноза по данному городу", {type: "warning"});
                }
             }
	});
  }
  
  
	as.formcallbacks["watch_gismeteo_saveItem"] = function(data, params){
		console.log("xxx", data.additionalData);
      
      	var ss = JSON.parse(data.additionalData)[0].items;
   	    var resp = $.grep(ss, function(v) {
    		return v.key == "response" 
		});
      	console.log(resp)
      	if(resp.length>0 && resp[0].value2) {
        	var el = JSON.parse(resp[0].value2);
          	console.log("citiesAPIResult", el); 
          	if(el && el.response && el.response.items && el.response.items.length ){
            	var city = el.response.items[0];
               // as.sys.bootstrapAlert("Получаем прогноз для города "+ city.name + ' (ID = '+city.id+')...', { type: "info", delay: 10000})
              	sendRequestForCity(city.id);
              	return;
            }
        }  
        as.sys.bootstrapAlert("Что-то пошло не так", {type: "danger"});
           
      
	}
});
</script>

Метод API для получения городов: 

CREATE PROCEDURE [dbo].[api_gismeteo-cities_request]
	@parameters ExtendedDictionaryParameter READONLY,  -- входящие параметры для внутренней обработки (используйте Key, Value2)
	@username nvarchar(32)  -- текущий пользователь.
AS
BEGIN
	declare @city nvarchar(128) = ''
    select @city = isnull(Value2, Value) from @parameters where [key]='city'

	-- SELECT 1  Msg, Result, Url (адрес, куда будет идти запрос)
	select '' Msg, 1 Result, 'https://api.gismeteo.net/v2/search/cities/?query=' + @city Url 
	-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
	select 'X-Gismeteo-Token' name, '-------------YOUR KEY----------------' value, 'header' [type] -- form (в форме передается), header (в http headers), get запросы передавайте прямо в URL  
END

API метод для получения прогноза для города: 

CREATE PROCEDURE [dbo].[api_gismeteo_request]
	@parameters ExtendedDictionaryParameter READONLY,  -- входящие параметры для внутренней обработки (используйте Key, Value2)
	@username nvarchar(32)  -- текущий пользователь.
AS
BEGIN
	declare @cityID nvarchar(100)
    select @cityID  = value2 from @parameters where [key]= 'cityID'

	-- SELECT 1  Msg, Result, Url (адрес, куда будет идти запрос)
	select '' Msg, 1 Result, 'https://api.gismeteo.net/v2/weather/forecast/aggregate/'+@cityID+'/?lang=ru&days=3' Url 

	-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
	select 'X-Gismeteo-Token' name, '--------------- YOUR KEY --------------------' value, 'header' [type] -- form (в форме передается), header (в http headers), get запросы передавайте прямо в URL  
END

Request JS для вызова метода API получения прогноза: 

alter PROCEDURE [dbo].[request_weather_forecast]
	@parameters DictionaryParameter READONLY,  -- or ExtendedDictionaryParameter
	@username nvarchar(32)
AS
BEGIN
	declare @cityID int 
	select @cityID = try_cast(Value as int) from @parameters where [Key]='cityID'

    -- SELECT 1 Msg, Result
	select '' Msg, 1 Result

    -- SELECT 2 Основные данные в виде произвольной таблицы
    select 1

    -- SELECT 3 Внешние действия
	select 'apirequest' type, 'gismeteo' code, 'cityID' p1_name, cast(@cityID as nvarchar) p1_value
END
Насколько полезна эта возможность?

Другие модули

Получение данных юридического лица по БИК

Чистка данных в ФИО через dadata. Подключение к Dadata API. Коррекция ввода данных человека

Как упростить ввод адреса на сайте. Подсказки dadata по адресу

Проверка орфографии текста через API Яндекс Spell

Поиск компании через Dadata Подсказки. Получение информации о компании через API

Dadata. Вывод товаров и услуг (МКТУ)

Как отправить письмо с шаблоном HTML

Рерайт на сайте, подбор синонимов через API. Получение текста по API

Последние обновления

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Сайт использует Cookie. Правила конфиденциальности OK