<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Notion API on kenji.blog</title><link>http://kenji.blog/ru/tags/notion-api/</link><description>Recent content in Notion API on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/notion-api/index.xml" rel="self" type="application/rss+xml"/><item><title>Управление задачами в Notion для индивидуальной разработки и ведения блога</title><link>http://kenji.blog/ru/p/notion-task-management-blog-dev/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/notion-task-management-blog-dev/</guid><description>&lt;img src="http://kenji.blog/p/notion-task-management-blog-dev/img/eyecatch.jpg" alt="Featured image of post Управление задачами в Notion для индивидуальной разработки и ведения блога" />&lt;h1 id="управление-задачами-в-notion-для-индивидуальной-разработки-и-ведения-блога">Управление задачами в Notion для индивидуальной разработки и ведения блога
&lt;/h1>&lt;p>Для продолжения индивидуальной разработки и ведения блога управление задачами, поддержание мотивации и способы накопления и использования повседневных идей являются очень важными темами. Чем крупнее становится проект, тем больше задач нужно выполнить, и часто бывает трудно решить, с чего начать. Кроме того, возникает проблема, где и как сохранять повседневно возникающую информацию, такую как идеи для блога и технические заметки.&lt;/p>
&lt;p>В настоящее время &lt;strong>Notion&lt;/strong> является самым мощным инструментом, способным удовлетворить такие разнообразные потребности на одной платформе. В этой статье мы не будем рассматривать Notion просто как блокнот или инструмент для управления задачами. Мы рассмотрим «идеальный метод управления задачами», который бесшовно интегрирует индивидуальную разработку и ведение блога, а также включает в себя автоматизацию и продвинутое управление прогрессом, с очень подробной и технической точки зрения.&lt;/p>
&lt;hr>
&lt;h2 id="1-совместимость-метода-para-и-notion">1. Совместимость метода PARA и Notion
&lt;/h2>&lt;p>Сначала поговорим об основах — как организовать информацию. В инструментах с высокой степенью свободы, таких как Notion, страницы и базы данных часто разрастаются беспорядочно, что приводит к состоянию «непонятно, где что находится». Чтобы предотвратить это, мы внедрим &lt;strong>метод PARA&lt;/strong>, предложенный Тьяго Форте.&lt;/p>
&lt;p>Метод PARA — это подход, при котором информация классифицируется на следующие 4 категории:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Projects (Проекты)&lt;/strong>: Набор задач с четкой целью и сроком (например: «релиз нового веб-приложения», «обновление дизайна блога»).&lt;/li>
&lt;li>&lt;strong>Areas (Области)&lt;/strong>: Сферы ответственности, которые необходимо поддерживать и управлять ими в долгосрочной перспективе (например: «здоровье», «ведение блога (постоянное)», «финансы»).&lt;/li>
&lt;li>&lt;strong>Resources (Ресурсы)&lt;/strong>: Интересующие темы и информация, которая может быть полезна в будущем (например: «сниппеты кода Python», «справочные материалы по UI дизайну»).&lt;/li>
&lt;li>&lt;strong>Archives (Архивы)&lt;/strong>: Завершенные проекты и информация, которая в данный момент неактивна, но которую вы хотите сохранить.&lt;/li>
&lt;/ol>
&lt;p>Чтобы реализовать это в Notion, мы начнем со строгого разделения иерархии левой боковой панели на эти 4 раздела. В частности, отделение &amp;ldquo;Projects&amp;rdquo; от &amp;ldquo;Areas/Resources&amp;rdquo; позволяет не смешивать задачи, на которых нужно сосредоточиться сейчас (Projects), и входящую информацию для них (Resources), что помогает сохранить ясность мышления.&lt;/p>
&lt;hr>
&lt;h2 id="2-проектирование-баз-данных-реляционная-структура-projects-и-tasks">2. Проектирование баз данных: реляционная структура Projects и Tasks
&lt;/h2>&lt;p>Истинная сила Notion кроется в реляционных базах данных. То, чего следует больше всего избегать при управлении задачами — это управление всеми задачами в одном плоском списке. Разделяя задачи по проектам и связывая их, вы сможете одновременно видеть общую картину и детали.&lt;/p>
&lt;p>Здесь мы создадим базу данных «Projects (Проекты)» и базу данных «Tasks (Задачи)» и свяжем их с помощью свойства Relation (связь).&lt;/p>
&lt;h3 id="схема-связей-баз-данных">Схема связей баз данных
&lt;/h3>&lt;p>Следующая диаграмма Mermaid показывает связи между базами данных Projects, Tasks и Notes (Zettelkasten), о которой будет рассказано позже.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
P[&amp;#34;Projects (БД Проектов)&amp;#34;]
T[&amp;#34;Tasks (БД Задач)&amp;#34;]
N[&amp;#34;Notes (БД Zettelkasten)&amp;#34;]
P --&amp;gt;| Связь 1:N | T
T --&amp;gt;| Связь N:N | N
P --&amp;gt;| Связь 1:N | N
&lt;/pre>
&lt;h3 id="свойства-базы-данных-projects">Свойства базы данных Projects
&lt;/h3>&lt;ul>
&lt;li>&lt;code>Project Name&lt;/code> (Title)&lt;/li>
&lt;li>&lt;code>Status&lt;/code> (Select: &amp;ldquo;Not Started&amp;rdquo;, &amp;ldquo;In Progress&amp;rdquo;, &amp;ldquo;Completed&amp;rdquo;)&lt;/li>
&lt;li>&lt;code>Deadline&lt;/code> (Date)&lt;/li>
&lt;li>&lt;code>Tasks&lt;/code> (Relation: Связь с базой данных Tasks)&lt;/li>
&lt;li>&lt;code>Progress&lt;/code> (Rollup &amp;amp; Formula: описано ниже)&lt;/li>
&lt;/ul>
&lt;h3 id="свойства-базы-данных-tasks">Свойства базы данных Tasks
&lt;/h3>&lt;ul>
&lt;li>&lt;code>Task Name&lt;/code> (Title)&lt;/li>
&lt;li>&lt;code>Status&lt;/code> (Status: &amp;ldquo;To Do&amp;rdquo;, &amp;ldquo;In Progress&amp;rdquo;, &amp;ldquo;Done&amp;rdquo;)&lt;/li>
&lt;li>&lt;code>Priority&lt;/code> (Select: &amp;ldquo;High&amp;rdquo;, &amp;ldquo;Medium&amp;rdquo;, &amp;ldquo;Low&amp;rdquo;)&lt;/li>
&lt;li>&lt;code>Project&lt;/code> (Relation: Связь с базой данных Projects)&lt;/li>
&lt;li>&lt;code>Due Date&lt;/code> (Date)&lt;/li>
&lt;li>&lt;code>Story Points&lt;/code> (Number: Оценка масштаба задачи)&lt;/li>
&lt;/ul>
&lt;p>Разделив базы данных таким образом, можно создавать продвинутые представления, такие как фильтрация и отображение только тех задач, которые относятся к проекту, при открытии страницы проекта (использование связанных баз данных).&lt;/p>
&lt;hr>
&lt;h2 id="3-визуализация-прогресса-с-помощью-rollup-и-formula">3. Визуализация прогресса с помощью Rollup и Formula
&lt;/h2>&lt;p>Чтобы интуитивно понимать прогресс проекта, мы создадим индикатор выполнения (progress bar) с помощью функции Formula в Notion. Это позволит с первого взгляда понять: «Насколько продвинулся этот проект сейчас?».&lt;/p>
&lt;h3 id="агрегация-данных-с-помощью-rollup">Агрегация данных с помощью Rollup
&lt;/h3>&lt;p>Во-первых, в базе данных Projects создайте следующие 2 свойства Rollup из базы данных Tasks:&lt;/p>
&lt;ol>
&lt;li>&lt;code>Total Tasks&lt;/code> (Rollup): Получение «Количества (Count all)» задач из связи Tasks.&lt;/li>
&lt;li>&lt;code>Completed Tasks&lt;/code> (Rollup): Получение количества задач со статусом &amp;ldquo;Done&amp;rdquo; из связи Tasks (или подсчет завершенных задач с помощью функции).&lt;/li>
&lt;/ol>
&lt;h3 id="расчет-индикатора-выполнения-с-помощью-formula">Расчет индикатора выполнения с помощью Formula
&lt;/h3>&lt;p>Затем создайте свойство Formula и введите следующую формулу:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Формула для индикатора выполнения
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">prop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Completed Tasks&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="nx">prop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Total Tasks&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>В новейшей версии Formula 2.0 в Notion появилась возможность настраивать визуальный индикатор выполнения (в виде кольца или полосы) непосредственно в пользовательском интерфейсе на основе этого значения. Если вы предпочитаете старый метод записи или отображение индикатора выполнения в виде текста, также можно использовать условные ветвления, подобные следующему:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Текстовый индикатор выполнения (пример)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">percent&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">prop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Completed Tasks&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="nx">prop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Total Tasks&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">style&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">percent&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;% &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;b&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">slice&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;▓▓▓▓▓▓▓▓▓▓&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">floor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">percent&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="o">+&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">slice&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;░░░░░░░░░░&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nx">floor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">percent&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="математический-подход-к-скорости-разработки-velocity-и-прогнозированию-завершения">Математический подход к скорости разработки (Velocity) и прогнозированию завершения
&lt;/h3>&lt;p>В индивидуальной разработке знание того, в каком темпе вы можете выполнять задачи (скорость, или velocity), напрямую связано с высокоточным управлением расписанием.
Если предположить, что общая сумма Story Points, которую вы можете выполнить за одну неделю, является вашей скоростью $V$, это выражается следующей формулой:&lt;/p>
$$ V = \frac{\sum_{i=1}^{n} SP_i}{T} $$&lt;p>Где $SP_i$ — это Story Points завершенной задачи $i$, а $T$ — период измерения (например, количество недель в спринте).&lt;/p>
&lt;p>Если общая сумма оставшихся Story Points текущего проекта равна $W$, то прогнозируемое время $E$ до завершения проекта можно рассчитать следующим образом:&lt;/p>
$$ E = \frac{W}{V} $$&lt;p>Полностью выполнить этот расчет внутри Notion немного сложно, но очень эффективно разместить блок для вычислений (Math block) в задаче еженедельного обзора (Weekly Review) и фиксировать это как показатель для самооценки.&lt;/p>
&lt;hr>
&lt;h2 id="4-практика-применения-канбан-доски-и-представления-timeline">4. Практика применения Канбан-доски и представления Timeline
&lt;/h2>&lt;p>«Представления (Views)» для управления задачами также важны. В Notion вы можете отображать одну и ту же базу данных в разных форматах.&lt;/p>
&lt;h3 id="канбан-доска-board-view">Канбан-доска (Board View)
&lt;/h3>&lt;p>В качестве представления по умолчанию для базы данных &amp;ldquo;Tasks&amp;rdquo; установите Канбан-доску, сгруппированную по статусам (To Do / In Progress / Done). Это позволяет интуитивно перемещать задачи с помощью перетаскивания (drag-and-drop) и визуально проверять, не скопились ли текущие узкие места в столбце «В процессе (In Progress)».&lt;/p>
&lt;h3 id="таймлайн-timeline-view">Таймлайн (Timeline View)
&lt;/h3>&lt;p>Для «Projects» или крупномасштабных «Tasks» эффективно представление Timeline. Оно визуализирует, какая работа и в какие сроки будет выполняться, подобно диаграмме Ганта, что облегчает понимание того, не перегружены ли вы параллельными задачами, и отслеживание зависимостей (когда следующую задачу нельзя начать, пока не будет завершена предыдущая).&lt;/p>
&lt;hr>
&lt;h2 id="5-zettelkasten-и-сетевая-организация-знаний-с-помощью-базы-данных-notes">5. Zettelkasten и сетевая организация знаний с помощью базы данных Notes
&lt;/h2>&lt;p>При написании блога «начинать писать статью с чистого листа» — это самое мучительное занятие и причина творческого ступора. Поэтому мы внедрим в Notion концепцию &lt;strong>Zettelkasten&lt;/strong> (метод ящика с карточками), разработанную немецким социологом Никласом Луманом.&lt;/p>
&lt;p>Основные правила Zettelkasten: «В одной заметке записывается только одна идея (атомарное свойство)» и «Создание сети путем связывания заметок между собой».&lt;/p>
&lt;h3 id="проектирование-базы-данных-notes">Проектирование базы данных Notes
&lt;/h3>&lt;ul>
&lt;li>&lt;code>Note Title&lt;/code> (Title)&lt;/li>
&lt;li>&lt;code>Tags&lt;/code> (Multi-select)&lt;/li>
&lt;li>&lt;code>Related Notes&lt;/code> (Relation: Связь с самой базой данных Notes)&lt;/li>
&lt;li>&lt;code>Tasks&lt;/code> (Relation: Связь с задачей написания блога)&lt;/li>
&lt;/ul>
&lt;h3 id="рабочий-процесс-написания-блога">Рабочий процесс написания блога
&lt;/h3>&lt;ol>
&lt;li>Постоянно накапливайте знания, полученные в ходе ежедневной разработки, и приходящие в голову идеи в виде фрагментарных «Notes».&lt;/li>
&lt;li>Если между этими заметками есть общая тема, свяжите их (двунаправленная связь) с помощью свойства &lt;code>Related Notes&lt;/code>.&lt;/li>
&lt;li>Приступая к задаче (Tasks) по написанию блога, вызовите связанную базу данных на странице этой задачи и расположите в ней связанные Notes (заметки).&lt;/li>
&lt;li>Просто соединив фрагменты заметок, вы получите готовый каркас (структуру) блога.&lt;/li>
&lt;/ol>
&lt;p>В результате написание блога превращается из «созидания с нуля» в «редактирование накопленных знаний», что кардинально повышает скорость письма.&lt;/p>
&lt;hr>
&lt;h2 id="6-идеальная-автоматизация-с-использованием-notion-api-и-python">6. Идеальная автоматизация с использованием Notion API и Python
&lt;/h2>&lt;p>Начинается самый главный момент этой статьи — раздел технической автоматизации. Ручной ввод задач и изменение статуса в индивидуальной разработке — пустая трата времени. Используя Notion API, мы создадим систему, которая синхронизирует Issues на GitHub с задачами в Notion и отражает статус деплоя блога в Notion.&lt;/p>
&lt;h3 id="обзор-архитектуры">Обзор архитектуры
&lt;/h3>&lt;pre class="mermaid">
flowchart TD
GH[&amp;#34;GitHub (Issue / PR)&amp;#34;]
GHA[&amp;#34;GitHub Actions&amp;#34;]
WEB[&amp;#34;Web-сервер / Lambda&amp;#34;]
NOTION[&amp;#34;Notion API&amp;#34;]
DB[&amp;#34;БД Задач Notion&amp;#34;]
GH --&amp;gt;| Отправка Webhook | GHA
GHA --&amp;gt;| Выполнение Python-скрипта | NOTION
NOTION --&amp;gt;| Обновление БД / Добавление задачи | DB
&lt;/pre>
&lt;h3 id="автоматическое-создание-задач-в-notion-из-github-issues">Автоматическое создание задач в Notion из GitHub Issues
&lt;/h3>&lt;p>Вот пример реализации Python-скрипта, который автоматически добавляет элемент в базу данных Tasks в Notion при создании Issue на GitHub.&lt;/p>
&lt;p>Предварительно необходимо создать интеграцию в Notion и получить &lt;code>NOTION_API_KEY&lt;/code> и &lt;code>DATABASE_ID&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Получение токена и ID базы данных из переменных окружения&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">NOTION_API_KEY&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;NOTION_API_KEY&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DATABASE_ID&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;DATABASE_ID&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">create_notion_task&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">issue_title&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">issue_url&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;https://api.notion.com/v1/pages&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Authorization&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Bearer &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">NOTION_API_KEY&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Content-Type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;application/json&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Notion-Version&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;2022-06-28&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;parent&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="s2">&amp;#34;database_id&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">DATABASE_ID&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;properties&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Task Name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">issue_title&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Status&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;status&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;To Do&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;URL&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;url&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">issue_url&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Task created successfully in Notion!&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Failed to create task: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Предполагается получение в качестве аргументов из GitHub Actions и т.д.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Пример: python sync.py &amp;#34;Исправление ошибки: неверное отображение экрана входа&amp;#34; &amp;#34;https://github.com/user/repo/issues/1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">create_notion_task&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Встроив этот скрипт в рабочий процесс (workflow) GitHub Actions (&lt;code>.github/workflows/issue_to_notion.yml&lt;/code>), каждый раз, когда в репозитории создается Issue, задача будет автоматически генерироваться в Notion. Разработчик освобождается от необходимости переключаться между GitHub и Notion.&lt;/p>
&lt;h3 id="автоматическое-обновление-статуса-публикации-блога-с-помощью-curl">Автоматическое обновление статуса публикации блога с помощью cURL
&lt;/h3>&lt;p>Если вы деплоите свой блог на хостинговом сервисе, таком как Vercel или Netlify, можно получать Webhook о завершении деплоя и автоматически менять статус задачи в Notion (например: «Написание и публикация статьи А») на &amp;ldquo;Done&amp;rdquo;.&lt;/p>
&lt;p>Ниже приведен пример команды cURL для обновления свойств конкретной страницы (задачи).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X PATCH &lt;span class="s1">&amp;#39;https://api.notion.com/v1/pages/PAGE_ID&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -H &lt;span class="s1">&amp;#39;Authorization: Bearer &amp;#39;&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$NOTION_API_KEY&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -H &lt;span class="s2">&amp;#34;Content-Type: application/json&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -H &lt;span class="s2">&amp;#34;Notion-Version: 2022-06-28&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --data &lt;span class="s1">&amp;#39;{
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;properties&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;Status&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;status&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;name&amp;#34;: &amp;#34;Done&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> }&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Встроив этот вызов API в качестве последнего шага конвейера CI/CD, вы завершаете полную автоматизацию: «пуш кода → автоматический деплой → автоматическое завершение задачи в Notion».&lt;/p>
&lt;hr>
&lt;h2 id="7-лучшие-практики-эксплуатации-и-советы-по-поддержанию-процесса">7. Лучшие практики эксплуатации и советы по поддержанию процесса
&lt;/h2>&lt;p>Независимо от того, насколько сложной вы делаете систему или инструмент, если человек, управляющий ими, выгорает — все это теряет смысл. Наконец, мы представим несколько советов, как поддерживать эту систему Notion и не дать ей разрушиться.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Сохраняйте простоту&lt;/strong>: Не создавайте с самого начала идеальные свойства и слишком сложные связи. Старайтесь использовать подход «гибкой (agile) настройки Notion», добавляя свойства по мере их необходимости.&lt;/li>
&lt;li>&lt;strong>Тщательное проведение еженедельных обзоров (Weekly Review)&lt;/strong>: Выделите время, например, вечер каждого воскресенья, для пересмотра всего Notion. Организуйте завершенные задачи, перепланируйте просроченные задачи, добавьте теги к неклассифицированным Notes и т.д., чтобы поддерживать систему в чистоте.&lt;/li>
&lt;li>&lt;strong>Использование Inbox (Входящие)&lt;/strong>: Раскладывать каждую пришедшую в голову идею или задачу по соответствующим базам данных утомительно. Сначала создайте базу данных «Inbox», куда будете сбрасывать всё подряд, а позже (во время еженедельного обзора) распределяйте их по Projects или Notes — такой подход не вызывает стресса.&lt;/li>
&lt;/ol>
&lt;h2 id="8-заключение">8. Заключение
&lt;/h2>&lt;p>Управление задачами с помощью Notion выходит далеко за рамки простых списков To-Do. Комбинируя организацию информации с помощью метода PARA, сетевую организацию знаний с помощью Zettelkasten и инженерию с использованием Notion API, вы можете создать «Второй мозг (Second Brain)», который мощно ускорит вашу индивидуальную разработку и написание блога.&lt;/p>
&lt;p>Первоначальная настройка занимает некоторое время, но как только система заработает, когнитивная нагрузка на управление задачами резко снизится, и вы сможете полностью сосредоточиться на действительно важных вещах: «написании кода» и «написании текстов». Обязательно используйте эту статью в качестве справочника и попробуйте создать свое собственное, самое мощное рабочее пространство в Notion.&lt;/p></description></item></channel></rss>