<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Александр Макеев</title><author><name>Александр Макеев</name></author><id>https://teletype.in/atom/ramathethird</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/ramathethird?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@ramathethird?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ramathethird"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/ramathethird?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-26T11:56:39.939Z</updated><entry><id>ramathethird:m6-wg-bkwdJs</id><link rel="alternate" type="text/html" href="https://teletype.in/@ramathethird/m6-wg-bkwdJs?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ramathethird"></link><title>🌦️ Погода с эмодзи и переводом на русском для Telegram-бота на Google Apps Script</title><published>2025-07-08T08:57:09.383Z</published><updated>2025-09-11T08:02:50.038Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/52/b0/52b0ce5c-4b59-4210-9cd4-289ebd873117.png&quot;&gt;В современном мире, где информация должна быть не только точной, но и визуально привлекательной, создание удобного и красивого прогноза погоды становится важной задачей. В этой статье мы рассмотрим, как создать Telegram-бота, который будет отправлять прогноз погоды с эмодзи и переводом на русский язык, используя Google Apps Script и WeatherAPI.</summary><content type="html">
  &lt;section&gt;
    &lt;p id=&quot;jb2W&quot;&gt;В современном мире, где информация должна быть не только точной, но и визуально привлекательной, создание удобного и красивого прогноза погоды становится важной задачей. В этой статье мы рассмотрим, как создать Telegram-бота, который будет отправлять прогноз погоды с эмодзи и переводом на русский язык, используя Google Apps Script и WeatherAPI.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;CHbv&quot;&gt;🌍 Как это работает&lt;/h2&gt;
  &lt;h3 id=&quot;Rys4&quot;&gt;📡 Получение данных о погоде&lt;/h3&gt;
  &lt;p id=&quot;zNNj&quot;&gt;Система получает актуальный прогноз погоды через &lt;strong&gt;WeatherAPI&lt;/strong&gt; — один из самых популярных сервисов для работы с метеорологическими данными. Преимущество этого API в том, что он поддерживает русский язык, что делает его идеальным выбором для русскоязычных пользователей.&lt;/p&gt;
  &lt;h3 id=&quot;ZPn2&quot;&gt;✨ Форматирование результата&lt;/h3&gt;
  &lt;p id=&quot;Rdde&quot;&gt;После получения данных скрипт обрабатывает их и формирует красивое сообщение, дополненное эмодзи для лучшей визуализации. Например:&lt;/p&gt;
  &lt;ul id=&quot;MoVI&quot;&gt;
    &lt;li id=&quot;141W&quot;&gt;☀️ — ясная погода&lt;/li&gt;
    &lt;li id=&quot;9aTf&quot;&gt;🌧️ — дождь&lt;/li&gt;
    &lt;li id=&quot;466C&quot;&gt;❄️ — снег&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;bLQh&quot;&gt;Также автоматически добавляется перевод описания погоды на русский язык, что делает информацию максимально понятной.&lt;/p&gt;
  &lt;h3 id=&quot;XLu2&quot;&gt;📩 Отправка в Telegram&lt;/h3&gt;
  &lt;p id=&quot;dxYq&quot;&gt;Готовое сообщение можно сразу отправить в &lt;strong&gt;Telegram-бота&lt;/strong&gt; или канал, чтобы пользователи получали актуальную погоду в удобном формате.&lt;/p&gt;
  &lt;p id=&quot;1Yi4&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;0gbz&quot;&gt;🔑 Начало работы&lt;/h2&gt;
  &lt;h3 id=&quot;P0hA&quot;&gt;1️⃣ Регистрация на WeatherAPI&lt;/h3&gt;
  &lt;p id=&quot;ws56&quot;&gt;Для использования API необходимо:&lt;/p&gt;
  &lt;ol id=&quot;xyXf&quot;&gt;
    &lt;li id=&quot;OeaU&quot;&gt;Зарегистрироваться на сайте &lt;a href=&quot;https://www.weatherapi.com/&quot; target=&quot;_blank&quot;&gt;www.weatherapi.com&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;DU1i&quot;&gt;Получить &lt;strong&gt;API-ключ&lt;/strong&gt;, который потребуется для запросов.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;XZpu&quot;&gt;⚠️ &lt;strong&gt;Важно!&lt;/strong&gt; Бесплатный тариф имеет ограничения:&lt;/p&gt;
  &lt;h3 id=&quot;6D69&quot;&gt;2️⃣ Настройка Google Apps Script&lt;/h3&gt;
  &lt;p id=&quot;PNno&quot;&gt;Скрипт написан на &lt;strong&gt;JavaScript&lt;/strong&gt; и работает в среде &lt;strong&gt;Google Apps Script&lt;/strong&gt;, что позволяет легко интегрировать его с Telegram через вебхуки.&lt;/p&gt;
  &lt;p id=&quot;hwvz&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;ZGwv&quot;&gt;📜 Разбор кода&lt;/h2&gt;
  &lt;h3 id=&quot;pwXn&quot;&gt;🌤️ Получение погоды с WeatherAPI&lt;/h3&gt;
  &lt;pre id=&quot;IDn6&quot; data-lang=&quot;javascript&quot;&gt;function getWeather(city) {
  const API_KEY = &amp;#x60;ВАШ_API_КЛЮЧ&amp;#x60;;
  const url = &amp;#x60;http://api.weatherapi.com/v1/forecast.json?key=${API_KEY}&amp;amp;q=${city}&amp;amp;days=3&amp;amp;aqi=no&amp;amp;alerts=no&amp;amp;lang=ru&amp;#x60;;
  const response = UrlFetchApp.fetch(url);
  const data = JSON.parse(response.getContentText());
  return data;
}&lt;/pre&gt;
  &lt;p id=&quot;Aqaf&quot;&gt;Здесь мы отправляем запрос к API, передавая:&lt;/p&gt;
  &lt;ul id=&quot;hPNu&quot;&gt;
    &lt;li id=&quot;nph6&quot;&gt;&lt;strong&gt;Город&lt;/strong&gt; (можно указывать название или координаты).&lt;/li&gt;
    &lt;li id=&quot;L72g&quot;&gt;&lt;strong&gt;Количество дней&lt;/strong&gt; (максимум 3 для бесплатного тарифа).&lt;/li&gt;
    &lt;li id=&quot;lWeR&quot;&gt;&lt;strong&gt;Язык ответа&lt;/strong&gt; (&lt;code&gt;lang=ru&lt;/code&gt; для русского).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;rXSo&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;kOvp&quot;&gt;🎨 Преобразование кода погоды в эмодзи и текст&lt;/h3&gt;
  &lt;pre id=&quot;0Dxr&quot; data-lang=&quot;javascript&quot;&gt;/**
 * Возвращает эмодзи и перевод описания погоды по коду и времени суток
 * @param {number} code - weatherapi code
 * @param {boolean} isDay - true если день, false если ночь
 * @returns {{emoji: string, text: string}}
 */
function getWeatherIconAndTextRu(code, isDay) {
  const map = {
    1000: { day: [&amp;#x27;☀️&amp;#x27;, &amp;#x27;ясно&amp;#x27;], night: [&amp;#x27;🌙&amp;#x27;, &amp;#x27;ясно&amp;#x27;] },
    1003: { day: [&amp;#x27;🌤&amp;#x27;, &amp;#x27;малооблачно&amp;#x27;], night: [&amp;#x27;🌤&amp;#x27;, &amp;#x27;малооблачно&amp;#x27;] },
    1006: { day: [&amp;#x27;☁️&amp;#x27;, &amp;#x27;облачно&amp;#x27;], night: [&amp;#x27;☁️&amp;#x27;, &amp;#x27;облачно&amp;#x27;] },
    1009: { day: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;пасмурно&amp;#x27;], night: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;пасмурно&amp;#x27;] },
    1030: { day: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;туман&amp;#x27;], night: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;туман&amp;#x27;] },
    1063: { day: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;возможен дождь&amp;#x27;], night: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;возможен дождь&amp;#x27;] },
    1066: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;возможен снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;возможен снег&amp;#x27;] },
    1069: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;возможен мокрый снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;возможен мокрый снег&amp;#x27;] },
    1072: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;возможен ледяной дождь&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;возможен ледяной дождь&amp;#x27;] },
    1087: { day: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;возможна гроза&amp;#x27;], night: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;возможна гроза&amp;#x27;] },
    1114: { day: [&amp;#x27;🌬&amp;#x27;, &amp;#x27;метель&amp;#x27;], night: [&amp;#x27;🌬&amp;#x27;, &amp;#x27;метель&amp;#x27;] },
    1117: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильная метель&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильная метель&amp;#x27;] },
    1135: { day: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;туман&amp;#x27;], night: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;туман&amp;#x27;] },
    1147: { day: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;изморозь&amp;#x27;], night: [&amp;#x27;🌫&amp;#x27;, &amp;#x27;изморозь&amp;#x27;] },
    1150: { day: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;небольшая морось&amp;#x27;], night: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;небольшая морось&amp;#x27;] },
    1153: { day: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;морось&amp;#x27;], night: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;морось&amp;#x27;] },
    1168: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;ледяная морось&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;ледяная морось&amp;#x27;] },
    1171: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильная ледяная морось&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильная ледяная морось&amp;#x27;] },
    1180: { day: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;небольшой дождь&amp;#x27;], night: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;небольшой дождь&amp;#x27;] },
    1183: { day: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;дождь&amp;#x27;], night: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;дождь&amp;#x27;] },
    1186: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;умеренный дождь&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;умеренный дождь&amp;#x27;] },
    1189: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;умеренный дождь&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;умеренный дождь&amp;#x27;] },
    1192: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильный дождь&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильный дождь&amp;#x27;] },
    1195: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;ливень&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;ливень&amp;#x27;] },
    1198: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;ледяной дождь&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;ледяной дождь&amp;#x27;] },
    1201: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильный ледяной дождь&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильный ледяной дождь&amp;#x27;] },
    1204: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;мокрый снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;мокрый снег&amp;#x27;] },
    1207: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный мокрый снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный мокрый снег&amp;#x27;] },
    1210: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;небольшой снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;небольшой снег&amp;#x27;] },
    1213: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;снег&amp;#x27;] },
    1216: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;умеренный снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;умеренный снег&amp;#x27;] },
    1219: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;умеренный снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;умеренный снег&amp;#x27;] },
    1222: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный снег&amp;#x27;] },
    1225: { day: [&amp;#x27;❄️&amp;#x27;, &amp;#x27;очень сильный снег&amp;#x27;], night: [&amp;#x27;❄️&amp;#x27;, &amp;#x27;очень сильный снег&amp;#x27;] },
    1237: { day: [&amp;#x27;🧊&amp;#x27;, &amp;#x27;ледяная крупа&amp;#x27;], night: [&amp;#x27;🧊&amp;#x27;, &amp;#x27;ледяная крупа&amp;#x27;] },
    1240: { day: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;кратковременный дождь&amp;#x27;], night: [&amp;#x27;🌦&amp;#x27;, &amp;#x27;кратковременный дождь&amp;#x27;] },
    1243: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильный ливень&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;сильный ливень&amp;#x27;] },
    1246: { day: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;очень сильный ливень&amp;#x27;], night: [&amp;#x27;🌧&amp;#x27;, &amp;#x27;очень сильный ливень&amp;#x27;] },
    1249: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;кратковременный мокрый снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;кратковременный мокрый снег&amp;#x27;] },
    1252: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный кратковременный мокрый снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный кратковременный мокрый снег&amp;#x27;] },
    1255: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;кратковременный снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;кратковременный снег&amp;#x27;] },
    1258: { day: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный кратковременный снег&amp;#x27;], night: [&amp;#x27;🌨&amp;#x27;, &amp;#x27;сильный кратковременный снег&amp;#x27;] },
    1261: { day: [&amp;#x27;🧊&amp;#x27;, &amp;#x27;кратковременная ледяная крупа&amp;#x27;], night: [&amp;#x27;🧊&amp;#x27;, &amp;#x27;кратковременная ледяная крупа&amp;#x27;] },
    1264: { day: [&amp;#x27;🧊&amp;#x27;, &amp;#x27;сильная ледяная крупа&amp;#x27;], night: [&amp;#x27;🧊&amp;#x27;, &amp;#x27;сильная ледяная крупа&amp;#x27;] },
    1273: { day: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;дождь с грозой&amp;#x27;], night: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;дождь с грозой&amp;#x27;] },
    1276: { day: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;сильный дождь с грозой&amp;#x27;], night: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;сильный дождь с грозой&amp;#x27;] },
    1279: { day: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;снег с грозой&amp;#x27;], night: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;снег с грозой&amp;#x27;] },
    1282: { day: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;сильный снег с грозой&amp;#x27;], night: [&amp;#x27;⛈&amp;#x27;, &amp;#x27;сильный снег с грозой&amp;#x27;] },
  };
  const entry = map[code] || { day: [&amp;#x27;❔&amp;#x27;, &amp;#x27;неизвестно&amp;#x27;], night: [&amp;#x27;❔&amp;#x27;, &amp;#x27;неизвестно&amp;#x27;] };
  return isDay ? { emoji: entry.day[0], text: entry.day[1] } : { emoji: entry.night[0], text: entry.night[1] };
}&lt;/pre&gt;
  &lt;p id=&quot;Zbom&quot;&gt;Этот код сопоставляет &lt;strong&gt;код погоды&lt;/strong&gt; с соответствующим эмодзи и текстовым описанием, учитывая, день сейчас или ночь.&lt;/p&gt;
  &lt;p id=&quot;65Ze&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;zWBJ&quot;&gt;📝 Форматирование сообщения для Telegram&lt;/h3&gt;
  &lt;pre id=&quot;k3EL&quot; data-lang=&quot;javascript&quot;&gt;/**
 * Преобразует объект погоды из getWeather в красивое текстовое сообщение для Telegram
 * @param {Object} weatherData - результат функции getWeather
 * @returns {string} - текстовое сообщение
 */
function formatWeatherMessage(weatherData) {
  // Получаем основные данные
  const city = weatherData.location.name;
  const current = weatherData.current;
  const forecast = weatherData.forecast.forecastday;

  // Текущая погода
  const temp = Math.round(current.temp_c);
  const feels = Math.round(current.feelslike_c);
  const condObj = getWeatherIconAndTextRu(current.condition.code, !!current.is_day);
  const wind = (current.wind_kph / 3.6).toFixed(2); // м/с
  const humidity = current.humidity;

  // Заголовок и сейчас
  let msg = &amp;#x60;${condObj.emoji} Погода ${city}\n\n&amp;#x60;;
  msg += &amp;#x60;${condObj.emoji} Сейчас: +${temp}° | ${condObj.text}\n&amp;#x60;;
  msg += &amp;#x60;🧖‍♂️ Ощущается как: +${feels}°\n&amp;#x60;;
  msg += &amp;#x60;↖️ Ветер: ${wind} м/с\n&amp;#x60;;
  msg += &amp;#x60;💦 Влажность: ${humidity}%\n\n&amp;#x60;;

  // Сегодня (вечер)
  const today = forecast[0];
  const todayEvening = today.hour.find(h =&amp;gt; h.time.split(&amp;#x27; &amp;#x27;)[1] === &amp;#x27;18:00&amp;#x27;) || today.hour[18];
  if (todayEvening) {
    const cond = getWeatherIconAndTextRu(todayEvening.condition.code, !!todayEvening.is_day);
    msg += &amp;#x60;Сегодня\n${cond.emoji} Вечером: +${Math.round(todayEvening.temp_c)}° | ${cond.text}\n\n&amp;#x60;;
  }

  // Завтра (ночь, утро, день, вечер)
  if (forecast.length &amp;gt; 1) {
    const tomorrow = forecast[1];
    const night = tomorrow.hour[0];
    const morning = tomorrow.hour[6];
    const day = tomorrow.hour[12];
    const evening = tomorrow.hour[18];
    msg += &amp;#x60;Завтра\n&amp;#x60;;
    if (night) {
      const cond = getWeatherIconAndTextRu(night.condition.code, !!night.is_day);
      msg += &amp;#x60;${cond.emoji} Ночью: +${Math.round(night.temp_c)}° | ${cond.text}\n&amp;#x60;;
    }
    if (morning) {
      const cond = getWeatherIconAndTextRu(morning.condition.code, !!morning.is_day);
      msg += &amp;#x60;${cond.emoji} Утром: +${Math.round(morning.temp_c)}° | ${cond.text}\n&amp;#x60;;
    }
    if (day) {
      const cond = getWeatherIconAndTextRu(day.condition.code, !!day.is_day);
      msg += &amp;#x60;${cond.emoji} Днём: +${Math.round(day.temp_c)}° | ${cond.text}\n&amp;#x60;;
    }
    if (evening) {
      const cond = getWeatherIconAndTextRu(evening.condition.code, !!evening.is_day);
      msg += &amp;#x60;${cond.emoji} Вечером: +${Math.round(evening.temp_c)}° | ${cond.text}\n\n&amp;#x60;;
    }
  }

  // Краткий прогноз на следующие дни
  for (let i = 2; i &amp;lt; forecast.length; i++) {
    const day = forecast[i];
    const date = new Date(day.date);
    const dayNum = date.getDate().toString().padStart(2, &amp;#x27;0&amp;#x27;);
    const monthNum = (date.getMonth() + 1).toString().padStart(2, &amp;#x27;0&amp;#x27;);
    const min = Math.round(day.day.mintemp_c);
    const max = Math.round(day.day.maxtemp_c);
    const cond = getWeatherIconAndTextRu(day.day.condition.code, true);
    msg += &amp;#x60;${cond.emoji} ${dayNum} ${getMonthName(monthNum)} +${min}..+${max}° | ${cond.text}\n&amp;#x60;;
  }

  return msg.trim();
}&lt;/pre&gt;
  &lt;p id=&quot;sDbC&quot;&gt;Этот код формирует &lt;strong&gt;читаемое сообщение&lt;/strong&gt;, включающее:&lt;/p&gt;
  &lt;ul id=&quot;JeBh&quot;&gt;
    &lt;li id=&quot;moH0&quot;&gt;&lt;strong&gt;Текущую погоду&lt;/strong&gt; (температура, ощущения, ветер, влажность).&lt;/li&gt;
    &lt;li id=&quot;K7W7&quot;&gt;&lt;strong&gt;Прогноз на сегодня&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;Qd4m&quot;&gt;&lt;strong&gt;Подробный прогноз на завтра&lt;/strong&gt; (ночь, утро, день, вечер).&lt;/li&gt;
    &lt;li id=&quot;LzeG&quot;&gt;&lt;strong&gt;Краткий прогноз на следующие дни&lt;/strong&gt; (если доступно).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8XjQ&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;kkbg&quot;&gt;📅 Вспомогательная функция для названия месяца&lt;/h3&gt;
  &lt;pre id=&quot;VlOj&quot; data-lang=&quot;javascript&quot;&gt;function getMonthName(monthNum) {
  const months = {
    &amp;#x27;01&amp;#x27;: &amp;#x27;янв&amp;#x27;, &amp;#x27;02&amp;#x27;: &amp;#x27;фев&amp;#x27;, &amp;#x27;03&amp;#x27;: &amp;#x27;мар&amp;#x27;, &amp;#x27;04&amp;#x27;: &amp;#x27;апр&amp;#x27;, &amp;#x27;05&amp;#x27;: &amp;#x27;май&amp;#x27;, &amp;#x27;06&amp;#x27;: &amp;#x27;июн&amp;#x27;,
    &amp;#x27;07&amp;#x27;: &amp;#x27;июл&amp;#x27;, &amp;#x27;08&amp;#x27;: &amp;#x27;авг&amp;#x27;, &amp;#x27;09&amp;#x27;: &amp;#x27;сен&amp;#x27;, &amp;#x27;10&amp;#x27;: &amp;#x27;окт&amp;#x27;, &amp;#x27;11&amp;#x27;: &amp;#x27;ноя&amp;#x27;, &amp;#x27;12&amp;#x27;: &amp;#x27;дек&amp;#x27;
  };
  return months[monthNum] || &amp;#x27;&amp;#x27;;
}&lt;/pre&gt;
  &lt;p id=&quot;Ou35&quot;&gt;Она преобразует числовой месяц в сокращенное название на русском.&lt;/p&gt;
  &lt;p id=&quot;jfId&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;P4KU&quot;&gt;🚀 Как использовать&lt;/h2&gt;
  &lt;ol id=&quot;lw24&quot;&gt;
    &lt;li id=&quot;9ek1&quot;&gt;&lt;strong&gt;Скопируйте код&lt;/strong&gt; в свой проект Google Apps Script.&lt;/li&gt;
    &lt;li id=&quot;2cnu&quot;&gt;&lt;strong&gt;Вызовите функцию&lt;/strong&gt; &lt;code&gt;formatWeatherMessage(getWeather(&amp;#x27;ВашГород&amp;#x27;))&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;3McU&quot;&gt;&lt;strong&gt;Отправьте результат&lt;/strong&gt; в Telegram через бота или используйте его в других целях.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;7S2g&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;yEjx&quot;&gt;🔍 Пример вывода&lt;/h3&gt;
  &lt;pre id=&quot;3xI4&quot;&gt;☀️ Погода Москва  

☀️ Сейчас: +23° | ясно  
🧖‍♂️ Ощущается как: +25°  
↖️ Ветер: 2.5 м/с  
💦 Влажность: 60%  

Сегодня  
🌤️ Вечером: +20° | малооблачно  

Завтра  
🌙 Ночью: +16°  
🌤️ Утром: +18°  
☀️ Днём: +24°  
🌤️ Вечером: +21°  

🌤️ 15 июн +17..+25° | малооблачно  
🌧️ 16 июн +15..+20° | дождь  &lt;/pre&gt;
  &lt;figure id=&quot;tkQT&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/52/b0/52b0ce5c-4b59-4210-9cd4-289ebd873117.png&quot; width=&quot;330&quot; /&gt;
    &lt;figcaption&gt;пример вывода в чате&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;QgHd&quot;&gt;📌 Заключение&lt;/h3&gt;
  &lt;p id=&quot;HOWn&quot;&gt;Этот скрипт позволяет легко получать &lt;strong&gt;красивый прогноз погоды&lt;/strong&gt; с эмодзи и отправлять его в Telegram. Вы можете доработать его, добавив:&lt;/p&gt;
  &lt;ul id=&quot;QnJf&quot;&gt;
    &lt;li id=&quot;wDWT&quot;&gt;Уведомления при изменении погоды.&lt;/li&gt;
    &lt;li id=&quot;jVON&quot;&gt;Поддержку большего количества дней (на платном тарифе WeatherAPI).&lt;/li&gt;
    &lt;li id=&quot;yDVF&quot;&gt;Интеграцию с Google Таблицами для хранения истории погоды.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;pi7O&quot;&gt;Попробуйте и сделайте свой бот еще удобнее! 🌈&lt;/p&gt;

</content></entry></feed>