<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Дмитрий</title><generator>teletype.in</generator><description><![CDATA[Дмитрий]]></description><image><url>https://img4.teletype.in/files/77/74/7774f686-be14-49ed-836d-2680b79b8446.png</url><title>Дмитрий</title><link>https://teletype.in/@catdem</link></image><link>https://teletype.in/@catdem?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/catdem?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/catdem?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 24 May 2026 20:44:18 GMT</pubDate><lastBuildDate>Sun, 24 May 2026 20:44:18 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@catdem/7LNeDtEOpQj</guid><link>https://teletype.in/@catdem/7LNeDtEOpQj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem</link><comments>https://teletype.in/@catdem/7LNeDtEOpQj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem#comments</comments><dc:creator>catdem</dc:creator><title>Как забирать данные из Google Sheets по API  через Python:</title><pubDate>Tue, 07 Oct 2025 21:48:17 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/9c/13/9c134305-5378-47fb-8bae-10118cb57d76.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/3a/e7/3ae73250-b2aa-4da0-a098-a603572561f8.png"></img>🔥 Google Sheets — это удобный инструмент для хранения и обмена данными, особенно когда нужно быстро поделиться таблицей с коллегами или клиентами. И может возникнуть потребность поработать с этими данными в Python или вовсе построить на них аналитику. Давайте представим, что мы хотим анализировать свои расходы, которые мы ведем в &quot;Гугл Табличках&quot;.

1) Первым шагом нам нужно зарегистрировать аккаунт gmail, думаю, что с этим трудностей не возникнет.
2) Далее мы переходим по ссылке и создаем проект. Если ссылка на работает, то сервис называется https://console.cloud.google.com/]]></description><content:encoded><![CDATA[
  <p id="cTGK">🔥 Google Sheets — это удобный инструмент для хранения и обмена данными, особенно когда нужно быстро поделиться таблицей с коллегами или клиентами. И может возникнуть потребность поработать с этими данными в Python или вовсе построить на них аналитику. Давайте представим, что мы хотим анализировать свои расходы, которые мы ведем в &quot;Гугл Табличках&quot;.<br /><br />1) Первым шагом нам нужно зарегистрировать аккаунт gmail, думаю, что с этим трудностей не возникнет.<br />2) Далее мы переходим по <a href="http://console.cloud.google.com" target="_blank">ссылке</a> и создаем проект. Если ссылка на работает, то сервис называется https://console.cloud.google.com/</p>
  <figure id="fyqm" class="m_custom">
    <img src="https://img3.teletype.in/files/a4/9a/a49a920b-a652-4958-8bb8-3e08fda3a022.png" width="610" />
  </figure>
  <figure id="gM1v" class="m_retina">
    <img src="https://img1.teletype.in/files/4d/25/4d255367-c9da-42e2-84c5-5bcc1aa146a5.png" width="601" />
  </figure>
  <figure id="4TqD" class="m_custom">
    <img src="https://img1.teletype.in/files/06/58/0658db6a-5a26-4534-bfad-819c2cccb6d4.png" width="606" />
  </figure>
  <figure id="ckPG" class="m_custom">
    <img src="https://img3.teletype.in/files/a2/68/a268170b-c6a2-4911-ac08-e4a05f2d9b09.png" width="621" />
  </figure>
  <p id="sLVV">3) Теперь нам нужно включить API Google Sheets для нашего проекта - для этого делаем следующее:<br /><br /></p>
  <figure id="Wlfs" class="m_custom">
    <img src="https://img3.teletype.in/files/2c/06/2c0669ca-eb04-43fe-974f-47032ebe1062.png" width="645.0000000000001" />
  </figure>
  <figure id="pASq" class="m_custom">
    <img src="https://img4.teletype.in/files/70/c6/70c63786-266e-4f86-b13b-845067a8c303.png" width="572.7457627118645" />
  </figure>
  <figure id="UEgF" class="m_custom">
    <img src="https://img4.teletype.in/files/7e/5a/7e5ae5a5-3093-47b5-8ad8-f21bca8a921c.png" width="813" />
  </figure>
  <figure id="HDoK" class="m_custom">
    <img src="https://img4.teletype.in/files/3a/66/3a66d2f8-0d01-4edc-a668-07460bb953ff.png" width="806" />
  </figure>
  <figure id="mEc4" class="m_custom">
    <img src="https://img3.teletype.in/files/ab/80/ab80ba31-af48-4825-abdd-7f59618b945e.png" width="814" />
  </figure>
  <figure id="Y3UE" class="m_custom">
    <img src="https://img4.teletype.in/files/7a/19/7a192579-bd6f-4b10-b3b5-59e1e560e6bc.png" width="834" />
  </figure>
  <figure id="8MCB" class="m_custom">
    <img src="https://img3.teletype.in/files/ac/b9/acb9a418-ddbc-445b-ab9b-d8516ade56cc.png" width="506.5324858757062" />
  </figure>
  <figure id="VPLO" class="m_custom">
    <img src="https://img2.teletype.in/files/9d/11/9d111b03-048b-4f24-9f00-f62de6b29919.png" width="621.6865148861647" />
  </figure>
  <figure id="1FIb" class="m_custom">
    <img src="https://img3.teletype.in/files/a5/91/a59124a7-4d2e-47d9-9b3a-7d0d15a5ec6e.png" width="641" />
  </figure>
  <figure id="8Qdx" class="m_original">
    <img src="https://img3.teletype.in/files/68/25/68251819-e868-468d-97d2-36e1faa0d32b.png" width="643" />
  </figure>
  <p id="oSFf">4) Теперь после того, как мы настроили аккаунт и получили json ключ, нужно добавить этот аккаунт в качестве редактора в наш google sheet:<br /></p>
  <figure id="JtCm" class="m_custom">
    <img src="https://img4.teletype.in/files/7d/92/7d92deac-8235-4293-a91a-2c7e6e55bdfe.png" width="792" />
  </figure>
  <figure id="XuVC" class="m_custom">
    <img src="https://img2.teletype.in/files/9d/9b/9d9be44e-f651-4d15-9e53-1caa77fe20fa.png" width="362.7596899224807" />
  </figure>
  <p id="lDiG">5) Отлично, теперь можем забирать данные из google sheet в который мы добавили наш аккаунт, для этого используем библиотеки в python (Pandas и gspread):<br /><br />Ставим библиотеки через pip:<br /><code>pip install gspread pandas</code></p>
  <p id="gqUW">Ну и далее - мы забираем данные из google sheet<br /></p>
  <figure id="a7zA" class="m_custom">
    <img src="https://img3.teletype.in/files/e6/e2/e6e2a5de-9a63-4e48-b359-f3e4b1efcb58.png" width="851" />
  </figure>
  <p id="bPYV">Вод код, чтобы можно было скопировать:</p>
  <p id="Qzxb"><code>import gspread<br />import pandas as pd</code></p>
  <p id="oCH5"><code>#Загрузка через API google_sheet</code></p>
  <p id="Azr5"><code>gc = gspread.service_account(&quot;путь до json файла с кредами&quot;)<br />sh = gc.open_by_url(&quot;url&quot;)<br />worksheet_dash = sh.worksheet(&quot;название_листа&quot;)</code></p>
  <p id="Brad"><code>df = pd.DataFrame(worksheet_dash.get_all_values())</code></p>
  <p id="YHPR"><code><br />print(df)</code></p>
  <p id="sPSA"></p>
  <p id="ZcPQ">Итог:<br />😎 Теперь вы можете автоматизировать импорт из Sheets в любой пайплайн — от простого в Jupyter до сложных ETL. Это сэкономит часы на рутине!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@catdem/RR1vNh5gKRI</guid><link>https://teletype.in/@catdem/RR1vNh5gKRI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem</link><comments>https://teletype.in/@catdem/RR1vNh5gKRI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem#comments</comments><dc:creator>catdem</dc:creator><title>Machine Learning в Бизнесе - как просто сделать Прогноз Временных Рядов при помощи Prophet</title><pubDate>Sun, 17 Aug 2025 19:24:49 GMT</pubDate><description><![CDATA[Сначала разберём, что такое временной ряд — это важно для понимания. Временной ряд (time series) — это последовательность данных, которые собираются через равные интервалы времени. Например, ежедневные продажи в магазине, ежемесячный трафик на сайте или ежечасные метрики revenue. Такие данные имеют паттерны: тренд (общий рост или спад со временем), сезонность (повторяющиеся циклы, как пики продаж по выходным) и случайные шумы (непредсказуемые колебания).]]></description><content:encoded><![CDATA[
  <p id="0Bh7">Сначала разберём, что такое временной ряд — это важно для понимания. Временной ряд (time series) — это последовательность данных, которые собираются через равные интервалы времени. Например, ежедневные продажи в магазине, ежемесячный трафик на сайте или ежечасные метрики revenue. Такие данные имеют паттерны: тренд (общий рост или спад со временем), сезонность (повторяющиеся циклы, как пики продаж по выходным) и случайные шумы (непредсказуемые колебания). </p>
  <p id="Itw2">Давайте представим, что у вас есть задача спрогнозировать, сколько можно ожидать выручки (GMV) в следующем квартале — типичный запрос от бизнеса. С этим отлично справится инструмент Prophet. </p>
  <p id="A260">1️⃣ Устанавливаем нужные библиотеки:<br /><code>pip install pandas prophet holidays</code></p>
  <p id="LAfZ">2️⃣ Создаём и подготавливаем данные:<br /><code>import pandas as pd  # Импортируем pandas — это библиотека для работы с таблицами данных (DataFrames)<br />import holidays  # Импортируем holidays — библиотека для получения дат праздников в разных странах</code></p>
  <p id="WQuG"><code># Создаём простой DataFrame с вымышленными данными: даты и значения KPI (y)<br />data = {  # Это словарь — простой способ задать данные<br />    &#x27;ds&#x27;: [&#x27;2025-01-01&#x27;, &#x27;2025-01-02&#x27;, &#x27;2025-01-03&#x27;, &#x27;2025-01-04&#x27;, &#x27;2025-01-05&#x27;],  # Колонка ds: даты в формате строки (потом преобразуем в настоящие даты)<br />    &#x27;y&#x27;: [100, 120, 110, 130, 105]  # Колонка y: значения KPI, например, ежедневная сумма ставок<br />}<br />df_pred = pd.DataFrame(data)  # Создаём DataFrame из словаря — теперь df_pred это таблица с колонками ds и y</code></p>
  <p id="A13t"><code>df_pred[&#x27;ds&#x27;] = pd.to_datetime(df_pred[&#x27;ds&#x27;])  # Преобразуем колонку ds в настоящий тип даты (datetime), чтобы Prophet мог с ней работать</code></p>
  <p id="PONp">3️⃣ Добавляем праздники (для России):<br />Prophet может учитывать праздники, чтобы прогноз был точнее. Мы выгружаем их автоматически и создаём таблицу.<br /><br /><code># Определяем диапазон лет на основе наших данных (от минимального года до максимального +1)<br />years = range(df_pred[&#x27;ds&#x27;].min().year, df_pred[&#x27;ds&#x27;].max().year + 1)  # Здесь min() и max() находят самые раннюю и позднюю даты в ds</code></p>
  <p id="B5f2"><code>ru_holidays = holidays.RU(years=years)  # Получаем словарь праздниками за эти годы (например, 1 января — &#x27;New Year&#x27;s Day&#x27;)</code></p>
  <p id="K248"><code># Преобразуем словарь в DataFrame для Prophet: колонки ds (дата) и holiday (название праздника)<br />df_holidays = pd.DataFrame(list(ru_holidays.items()), columns=[&#x27;ds&#x27;, &#x27;holiday&#x27;])  # list(ru_holidays.items()) превращает словарь в список пар (дата, название)</code></p>
  <p id="xIzi"><code>df_holidays[&#x27;ds&#x27;] = pd.to_datetime(df_holidays[&#x27;ds&#x27;])  # Преобразуем ds в тип даты, как и в основных данных</code></p>
  <p id="Dk7t">4️⃣ Создаём и обучаем модель Prophet:<br />Важный момент: Prophet ожидает данные в конкретном формате — DataFrame обязательно должен иметь колонку &#x27;ds&#x27; (с датами в формате datetime) и колонку &#x27;y&#x27; (с числовыми значениями, которые вы прогнозируете). Если в ваших данных колонки названы иначе (например, &#x27;date&#x27; и &#x27;value&#x27;), переименуйте их перед обучением: df_pred = df_pred.rename(columns={&#x27;date&#x27;: &#x27;ds&#x27;, &#x27;value&#x27;: &#x27;y&#x27;}).</p>
  <p id="WQ42">Теперь главная часть — модель. Мы укажем сезонность (еженедельную и годовую) и передадим праздники. Если праздники не нужны, просто напишите Prophet(..., holidays=None) — модель заработает без них, но может быть менее точной для данных с праздничными спадами.</p>
  <p id="g3I1">5️⃣ Делаем прогноз на будущее:<br /><code>prediction_days = 200  # Задаём, сколько дней вперёд прогнозировать (здесь 200 — можно изменить)</code></p>
  <p id="Sy0h"><code>future = model.make_future_dataframe(periods=prediction_days)  # Создаём таблицу будущих дат: make_future_dataframe() берёт даты из df_pred и добавляет prediction_days новых</code></p>
  <p id="TW1J"><code>forecast = model.predict(future)  # Делаем прогноз: predict() применяет модель к future и возвращает таблицу с предсказаниями (yhat — основное значение, плюс интервалы и компоненты)</code></p>
  <p id="O8by">6️⃣ Анализируем результаты: Агрегация по кварталам и расчёт отклонения:<br />Чтобы бизнесу было удобно смотреть (они любят квартальные отчёты), суммируем данные по кварталам и считаем процент отклонения (warn) от истинного значения — полезно, чтобы увидеть, насколько прогноз верно предсказывает. По хорошему, нужно из базового DataFrame взять рандомно 70% выборки и на ней обучить модель, а на остальных 30% проверить прогнозную модель и посчитать метрики отклонения, но это уже тема отдельного поста, можете почитать про это самостоятельно, сейчас обойдемся без этого.</p>
  <p id="tGDj"><code># Добавляем колонку с кварталом (например, 2025Q1) для группировки<br />df_pred[&#x27;quarter&#x27;] = df_pred[&#x27;ds&#x27;].dt.to_period(&#x27;Q&#x27;)  # dt.to_period(&#x27;Q&#x27;) превращает дату в квартал (Q значит quarter)</code></p>
  <p id="sGe8"><code>forecast[&#x27;quarter&#x27;] = forecast[&#x27;ds&#x27;].dt.to_period(&#x27;Q&#x27;)  # То же самое для прогноза</code></p>
  <p id="44Fn"><code># Суммируем реальные данные по кварталам<br />real_quarters = df_pred.groupby(&#x27;quarter&#x27;)[&#x27;y&#x27;].sum().reset_index()  # groupby() группирует по quarter, sum() суммирует y, reset_index() делает из этого новую таблицу</code></p>
  <p id="iyZs"><code># Суммируем прогноз по кварталам<br />forecast_quarters = forecast.groupby(&#x27;quarter&#x27;)[&#x27;yhat&#x27;].sum().reset_index()  # Аналогично, но для yhat (предсказанное значение)</code></p>
  <p id="W3fx"><code># Объединяем таблицы по кварталам (outer — чтобы включить все, даже если в одной нет данных)<br />all_quarters = pd.merge(real_quarters, forecast_quarters, how=&#x27;outer&#x27;, on=&#x27;quarter&#x27;, suffixes=(&#x27;_actual&#x27;, &#x27;_forecast&#x27;))  # merge() соединяет, suffixes добавляют _actual и _forecast к колонкам</code></p>
  <p id="7hao"><code># Считаем отклонение в %: насколько прогноз (yhat) отличается от реала (y)<br />all_quarters[&#x27;warn&#x27;] = ((all_quarters[&#x27;yhat&#x27;] / all_quarters[&#x27;y&#x27;]) - 1) * 100  # Формула: (прогноз / реал - 1) * 100 = процент изменения</code><br /></p>
  <p id="1TUz">Это базовый пример — в реальности добавьте больше данных для точности. Тестируйте модель на исторических данных: разделите df_pred на &quot;обучение&quot; и &quot;тест&quot;, чтобы проверить, насколько прогноз совпадает с реальностью.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@catdem/3IZ3S4kDvOR</guid><link>https://teletype.in/@catdem/3IZ3S4kDvOR?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem</link><comments>https://teletype.in/@catdem/3IZ3S4kDvOR?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem#comments</comments><dc:creator>catdem</dc:creator><title>Как за 5 минут превратить CSV файл в полноценную базу данных через SQLite в DBeaver 🔥</title><pubDate>Mon, 11 Aug 2025 20:00:14 GMT</pubDate><description><![CDATA[<img src="https://img2.teletype.in/files/13/99/13997624-8f6e-42a7-9ca5-e09209eab072.png"></img>💎 Представьте: у вас куча CSV файлов с данными, и вы хотите быстро выполнить анализ - выполнить между ними JOIN'ы или провести агрегацию GROUP BY. Давайте превратим эти CSV файлы в полноценную базу!

1️⃣ Создаём подключение к SQLite]]></description><content:encoded><![CDATA[
  <p id="mNfZ">💎 Представьте: у вас куча CSV файлов с данными, и вы хотите быстро выполнить анализ - выполнить между ними JOIN&#x27;ы или провести агрегацию GROUP BY. Давайте превратим эти CSV файлы в полноценную базу!<br /><br />1️⃣ Создаём подключение к SQLite<br /></p>
  <figure id="EDex" class="m_retina">
    <img src="https://img2.teletype.in/files/92/f4/92f469f9-a84b-4f55-9f2f-a9581077ce57.png" width="801" />
  </figure>
  <p id="wqxj">2️⃣ Выбираем создать и указываем путь где будет храниться наша база данные и даем ей любое имя</p>
  <figure id="J6GS" class="m_custom">
    <img src="https://img4.teletype.in/files/75/57/7557f637-edae-459a-95bc-1752580ec9fb.png" width="828" />
  </figure>
  <p id="chsn">3️⃣ Импортируем CSV файлы<br />Нажмете по базе данных ПКМ (правой кнопкой мыши) и увидите импорт данных, далее там будет предложено выбрать csv файл и различные настройки. Советую самостоятельно по изучать этот функционал.</p>
  <figure id="Ed3F" class="m_custom">
    <img src="https://img2.teletype.in/files/11/98/1198fc40-5d1f-4af3-9d85-ac3237251ad4.png" width="431" />
  </figure>
  <p id="7csA"></p>
  <p id="Nz3D">4️⃣ Наслаждаемся полноценной поддержкой SQL для csv файлов:</p>
  <figure id="9Ccc" class="m_original">
    <img src="https://img4.teletype.in/files/75/4c/754c240c-067d-4d0b-a9b0-1f2e36f0b407.png" width="284" />
  </figure>
  <p id="45SJ">Итог:<br />😎 Если эта инструкция вам помогла, то кидайте 🔥 или ❤️!<br /><br />❓ А вы используете SQLite для аналитики? Пишите в комментариях, какие ещё способы работы с CSV хотели бы узнать!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@catdem/-GLmMSFi9C8</guid><link>https://teletype.in/@catdem/-GLmMSFi9C8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem</link><comments>https://teletype.in/@catdem/-GLmMSFi9C8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem#comments</comments><dc:creator>catdem</dc:creator><title>Эффективная база знаний для обучения и работы: мой опыт с Obsidian</title><pubDate>Sat, 05 Jul 2025 14:19:09 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/93/87/938775a3-56ac-4a39-9f49-694e8de064dc.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/92/0c/920c8dfe-6a7f-4a09-9888-88e7e4bf977d.png"></img>Ты нашёл классный материал, статью, видео или у тебя возникла идея — и ты говоришь себе: «Запомню», «Вернусь потом», «Потом запишу»... Но проходит время, и всё теряется. Где это было? В каком чате? В какой заметке телефона? Может, в Google Docs? Или в Telegram?]]></description><content:encoded><![CDATA[
  <h2 id="Ubcq"><strong>1) Думаю, у каждого была такая ситуация:</strong></h2>
  <p id="KNfk">Ты нашёл классный материал, статью, видео или у тебя возникла идея — и ты говоришь себе: <em>«Запомню»</em>, <em>«Вернусь потом»</em>, <em>«Потом запишу»</em>... Но проходит время, и всё теряется. Где это было? В каком чате? В какой заметке телефона? Может, в Google Docs? Или в Telegram?</p>
  <p id="sOfd">Вот именно для этого и нужна <strong>база знаний</strong> — <strong>единое место</strong>, где ты структурируешь, сохраняешь и возвращаешься к нужной информации. И я хочу рассказать, как именно я это делаю с помощью приложения <strong>Obsidian</strong>.</p>
  <p id="pVvB"></p>
  <h2 id="YPzf">2) Как я веду базу знаний:</h2>
  <p id="sPLb">У меня есть простая система. В течение дня, когда у меня возникает идея, мысль или просто задача «на подумать», я быстро кидаю её <strong>себе в личные сообщения</strong> в Telegram. Это удобно, потому что это всегда под рукой.</p>
  <p id="jz7H">А когда я сажусь за компьютер, я открываю <strong>Obsidian</strong> и разбираю эти сообщения. Записываю все в общий backlog (пример на фото):</p>
  <figure id="GHuf" class="m_retina">
    <img src="https://img3.teletype.in/files/e1/d7/e1d73366-57b1-4364-b201-f0f88bd13dd6.png" width="473" />
  </figure>
  <p id="hTHP">Таким образом, я не перегружаю голову. Всё, что меня заинтересовало, теперь записано и системно сохранено в одном месте.</p>
  <p id="0wlD"></p>
  <h2 id="ReYO">3) Применение Obsidian в обучении:</h2>
  <p id="OJtA">Отдельный мощный кейс — это <strong>изучение курсов, книг, лекций</strong>. В Obsidian можно использовать <strong>заголовки, ссылки, оглавление</strong>, разбивать одну тему на подтемы и легко между ними переключаться. Всё благодаря <strong>Markdown-разметке</strong>, которая делает структуру чистой и управляемой.</p>
  <p id="UYA0">Я, например, создаю отдельную заметку на каждый курс/тему/и т.п. и делаю подзаметки по каждому модулю.</p>
  <p id="NfFf">Например:<br /></p>
  <figure id="p0RD" class="m_retina">
    <img src="https://img1.teletype.in/files/0f/c6/0fc6e771-9185-4c87-be9a-b1d96ecb0238.png" width="709.5" />
  </figure>
  <h2 id="pHWN"></h2>
  <h2 id="avlJ">4) Продвинутый obsidian:</h2>
  <p id="53ND">Да, в Obsidian есть <strong>граф знаний</strong> — визуальная схема, где ты можешь увидеть, как все темы и заметки связаны между собой. Можно делать <strong>двусторонние ссылки</strong>, видеть, какие темы ты пересекаешь чаще всего, и даже строить на этом свои выводы. Это уже следующий уровень.</p>
  <p id="19ZK">Но честно? Для начала — <strong>этого всего не нужно</strong>. Нам нужно <strong>просто навести порядок в голове и информации</strong>. Начни с одной заметки. С одной идеи. С одной темы.</p>
  <p id="Ma6I">А если захочешь углубиться, для этого есть <strong>сотни гайд-видео</strong> на YouTube. Я рекомендую вот это видео (от Автора - &quot;Диджитализируй!&quot;), которое покрывает 90% базовых и нужных сценариев:</p>
  <figure id="lKCO" class="m_column">
    <iframe src="https://rutube.ru/play/embed/0e9e5f60f20f0b77cebe071dbde6e3de/"></iframe>
  </figure>
  <h2 id="tdjf">5) Заключение:</h2>
  <p id="51Cr">Если ты чувствуешь, что <strong>тонешь в потоке идей, ссылок, заметок и мыслей</strong>, и всё теряется — попробуй Obsidian. Это не просто редактор. Это привычка <strong>вести порядок в голове и вокруг себя</strong>.</p>
  <p id="YBgh">Начни с одного файла. А потом увидишь, как всё начнёт складываться.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@catdem/t5yN4wQJchU</guid><link>https://teletype.in/@catdem/t5yN4wQJchU?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem</link><comments>https://teletype.in/@catdem/t5yN4wQJchU?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=catdem#comments</comments><dc:creator>catdem</dc:creator><title>Telegram-бот, который работает, пока ты отдыхаешь</title><pubDate>Sat, 28 Jun 2025 20:51:51 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/69/1f/691f3b6d-b6f5-4765-b626-1f299e902539.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/a3/59/a359c17c-ad0c-492e-a06c-6808277d9ec9.png"></img>Как аналитик, я часто запускаю тяжёлые SQL-скрипты. Некоторые из них выполняются долго, могут упасть, а иногда — наоборот, неожиданно быстро отрабатывают. Раньше я просто сидел и смотрел в экран. Или забывал проверить вовремя, теряя время.]]></description><content:encoded><![CDATA[
  <p id="HJER">Как аналитик, я часто запускаю тяжёлые SQL-скрипты. Некоторые из них выполняются долго, могут упасть, а иногда — наоборот, неожиданно быстро отрабатывают. Раньше я просто сидел и смотрел в экран. Или забывал проверить вовремя, теряя время.</p>
  <p id="q6LQ">Теперь всё проще — я настроил Telegram-бота, который сам шлёт мне сообщение, когда скрипт завершился. Или если вдруг он упал. Даже если я в это время на встрече, завтракаю или не у компа — уведомление приходит прямо на часы, телефон, куда угодно.</p>
  <p id="i8aW">Это экономит кучу времени и реально повышает продуктивность: не нужно постоянно следить вручную, бот сам говорит, когда можно брать данные и работать дальше. А если что-то пошло не так — я узнаю об этом сразу.</p>
  <p id="x8by">И всё это делается за 5 минут на Python. Сейчас покажу, как.</p>
  <p id="Sfy3"></p>
  <h2 id="eGQX">Шаг №1: Создаём Telegram-бота:</h2>
  <p id="CiW3">1) Открываем Telegram и пишем в поиске <strong>@BotFather</strong> — это официальный бот для управления другими ботами.</p>
  <p id="Sfcx">2) Отправляем команду: /newbot</p>
  <p id="lbh3">3) Придумываем:</p>
  <ul id="7bLu">
    <li id="D8Yb">Имя для бота: Можно любое (это имя, которое будет отображаться в чатах)</li>
    <li id="b2Wg"> Username (обязательно должно заканчивается на <code>bot</code>, например: s<code>sos_alert_bot</code>)</li>
  </ul>
  <p id="GqaU">4) Получаем в ответ <strong>токен</strong> — это строка вида: &quot;9107281927:GvGWxBBiGTbPBvPubgWW-tBGTR-pWnuT-y1&quot; (копируем ее без кавычек)</p>
  <p id="yGtf"></p>
  <h2 id="eNI5">Шаг №2: Переходим в python:</h2>
  <p id="T9cn">Теперь нам нужно узнать свой chat_id, чтобы бот знал, куда писать</p>
  <p id="1oVd">1) Устанавливаем библиотеку requests, если не установлена - для этого выполняем следующий код:</p>
  <pre id="YsyM">pip install requests</pre>
  <p id="eayx">2) Пишем любое сообщение в чат боту (это нужно чтобы в следующем пункте мы нашли свое сообщение). </p>
  <p id="v60D">3) Пишем и выполняем следующий код:</p>
  <p id="S0cv">Заполняем переменные своими значениями и выполняем код</p>
  <pre id="bMk9">import requests

TOKEN = &#x27;ВАШ_ТОКЕН_БОТА&#x27; # здесь ваш token от бота из пункта 1.4
url = f&#x27;https://api.telegram.org/bot{TOKEN}/getUpdates&#x27;

response = requests.get(url).json()
print(response)</pre>
  <p id="EWpz">4) В ответе ищем кусок вида:</p>
  <pre id="WdAK">&#x27;chat&#x27;: {&#x27;id&#x27;: 4815162342, ...}</pre>
  <p id="kmna">копируем этот id</p>
  <p id="V3xM"></p>
  <h2 id="pSjZ">Шаг №3: Отправляем себе любое сообщение:</h2>
  <p id="Zd8u">Заполняем переменные своими значениями и выполняем код</p>
  <pre id="pUHw">bot_token = &#x27;ВАШ_ТОКЕН_БОТА&#x27; # здесь ваш token от бота из пункта 1.4
chat_id = &#x27;ВАШ_CHAT_ID&#x27; # здесь ваш chat_id из пункта 2.4
message = &#x27;✅ Скрипт завершён, можно работать!&#x27;

url = f&#x27;https://api.telegram.org/bot{bot_token}/sendMessage&#x27;

payload = {
    &#x27;chat_id&#x27;: chat_id, 
    &#x27;text&#x27;: message
}

requests.post(url, data=payload)</pre>
  <p id="VpbD">Поздравляю, если вы все сделали правильно, на этом моменте вы должны были получить свое первое сообщение от бота.</p>

]]></content:encoded></item></channel></rss>