Как сделать прогноз погоды на сайте. Интеграция с 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
Другие демостенды
— Любой вид формы на сайте - гибкая разметка формы— Определение местоположения на сайте по Google Maps API
— Как определить город по IP на сайте (dadata API)
— Определение страны по IP (через сервис ipapi.co)
Что есть в базе знаний по этой теме
— Геолокация, определение местоположения пользователя на карте— Как использовать комментарии в таблицах
— Как определить координаты lat lng пользователя в текущий момент
— Как внедрить на сайте автоопределение города с возможностью выбора
— Определение местоположения пользователя по IP через API (as-ip)
Последние обновления
Интеграции 24.11.2025
Разное 24.11.2025
Форма 15.11.2025
Визуализация 02.11.2025
Таблица 08.10.2025
Форма 26.09.2025
Таблица 23.09.2025
Разное 23.08.2025
Таблица 21.08.2025
Форма 20.08.2025
Таблица 18.08.2025
Таблица 21.06.2025
Форма 07.06.2025
Форма 29.03.2025
Форма 17.02.2025
Файлы и документы 10.01.2025
Форма 01.11.2024
Форма 23.10.2024
SQL-инструмент для создания личных кабинетов на сайте
Платформа Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки
Это быстрое внесение изменений
по ходу эксплуатации программы
Это современный интерфейс
полная адаптация под мобильные устройства