Сообщество - Программирование на python

Программирование на python

1 027 постов 11 967 подписчиков

Популярные теги в сообществе:

7

Ответ trapwalker в «Конец реверс-инжинирингу: релиз Markov Shield AI — софт, который "намертво" привязывает код к железу»3

Воспоминание разблокировано. Или как НЕ ТРАДИЦИОННО использовать ПО.


В районе нулевых была написана софтина по управлению компьютерным клубом в котором мне посчастливилось админом штаны просиживать. Естественно из-за лени, что бы в тетрадку не писать - какой комп и на сколько времени брали и сколько бабла отдали. И написана она была на VB5. И в один прекрасный день хозяин и говорит, что несколько клубов тоже её бы хотели и даже за деньги. Я то и не против лишних копеек. Покупать на совсем за дорого, естественно они не возжелали, но согласились платить помесячно. И тогда я решил что надо куда то вписывать данные о том, до какого срока программа может работать. Т.к. с VB я уже много работал, то был в курсе что шапке, скомпилированного ЕХЕ-шника, есть пустое место. И вот, воспользовавшись INNO-Setup я сделал инсталлятор, что спрашивает название клуба для вывода на экран и прописывает его, закодировав чуток, в распакованный файлик. Ну а в файле ключа так же кодировалось название и срок использования - примитивно, через перемешивание и добавления лишних символов и хранился он исключительно на админском ПК. Т.е. в следующий раз мне достаточно было передать обновлённый файл ключа. Естественно со сверкой ключа на управляющей программе у админа проблем не возникает, но вот на клиентских машинах... А там всё тривиально, проверка наличия ключа (он забирается с админа при запуске), даты в нём и соответствия имени клуба зашитого в ЕХЕ-шник. Сама же система "вредительства" проста до безобразия. Чем дальше прошёл срок, тем чаще срабатывает принудительная перезагрузка ПК. Естественно в рандомный промежуток времени после запуска программы. На админском же просто выдаётся дата активности ключа с подсветкой фона: белое, жёлтое. Т.е. даже в просроченное время всё продолжает работать, разве что лишая клиентов клуба комфортного времени отдыха.

Ну а что если без файла ключа? ПО просто не работает - выключается, а т.к. оно было встроено у клиентов вместо стандартного проводника, то и комп просто выключается. При этом админское место сразу выдаёт транспарант, что ключ не найден, купить там-то (собственно при просроке это же окно) и нажмите ОК для выхода. Ну а в случае просроченного ключа админка просто продолжает работать как ни в чём не бывало.

Да-да. Это были лихие время и совсем сильно наказывать было бы явно себе дороже.

Стоит сказать что попытки работать без продления, как и стырить ключ с другого клуба были. Но вот кул-хацкеров нанимать, для взлома защиты, оказалось дороже, чем заплатить за продление.

Ну и конечно, этот приём с пустым местом в скомпилированном файле, я после использовал много где ещё, т.к. выяснилось что не только VB5 грешил таким образом. Например, вписывал в него серийник одной из железяк при запуске, если там было пусто. А если не пусто, то сравнивал его с текущий железкой. Вот такая примитивность в качестве защиты от копирования. 😎

Показать полностью
10

Я создал расширение для браузера, которым пользуются в США

Честно: первые абзацы этой истории звучат так, будто продукт вообще не нужен.

«Ещё один HTML в PDF?» — Ctrl+P, Print, два десятка сайтов-конвертеров, половина браузеров умеет сохранять страницу. Зачем вообще лезть в Chrome Web Store с тем же самым?

Я сам так думал. И несколько раз закрывал проект, потому что не понимал, зачем кому-то ещё одна кнопка «Save as PDF».

Путь был длинный и кривой: идея → прототип → «это бессмысленно» → снова код → снова сомнения → релиз → первые установки из США, которых я не ждал.

Если дочитаете до конца - станет ясно, два момента, из‑за которых я всё-таки довёл HTML to PDF Converter: Upload & Paste Code до конца. Не про «уникальный AI» и не про революцию. Про две дыры, которые все делают вид, что их нет.

Почти бросил

Нужен PDF для отчёта. Онлайн-конвертер: регистрация, watermark, таблица порвана. Ctrl+P на длинной странице — половина контента; на SPA — белые блоки. 📷 СКРИН 1 — кривой PDF / watermark.

«Рынок забит» — проект лежал неделю.

Два момента, ради которых вернулся

1. PDF не только с сайта.

.html на диске или код из редактора — Ctrl+P не помогает, онлайн даёт белый лист. Нужно: Upload + Paste → preview → PDF.

Функция HTML файл в PDF

Функция HTML файл в PDF

Функция HTML код в PDF

Функция HTML код в PDF

2. Full ≠ Clean.

Full — «как на сайте». Clean — текст без рекламы и меню. Edit before save — убрать блок до захвата.

США

Делал для себя. Первые установки — из US, без рекламы: paste html to pdf в Google.

Итог

HTML to PDF Converter: Upload & Paste Code — страница / файл / код → PDF. Локально, без watermark.

вид расширения

вид расширения

Результат: 50 установок из США за 2 недели

Результат: 50 установок из США за 2 недели

HTML to PDF Converter: Upload & Paste Code: https://chromewebstore.google.com/detail/html-to-pdf-convert...

Нравится вам это расширение?
Всего голосов:
Показать полностью 4 1
0

Как разделить документы Word по страницам или разделам с помощью Python

Большие документы Word часто проще обрабатывать, когда они разделены на более мелкие файлы. Возможно, вы захотите отделить первые несколько страниц отчёта, разбить документ по границам разделов или создать отдельные файлы Word для разных глав.

Хотя Microsoft Word может выполнять эти задачи вручную, повторение процесса для множества документов быстро становится неэффективным. С помощью Spire.Doc for Python вы можете программно разделять документы Word, сохраняя их исходное содержимое и форматирование.

В этой статье мы рассмотрим два практических подхода:

  • Разделение документа Word по диапазону страниц

  • Разделение документа Word на отдельные файлы по разделам

Установка Spire.Doc for Python

Перед запуском примеров установите Spire.Doc for Python с помощью pip:

pip install Spire.Doc

Затем импортируйте библиотеку:

from spire.doc import *

Следующие примеры работают напрямую с документами Word без необходимости установки Microsoft Word.

Разделение документа Word по диапазону страниц

Разбиение по страницам полезно, когда вы уже знаете, какие страницы должны принадлежать каждому выходному файлу.

Например, предположим, что документ содержит титульную страницу, введение и основной контент. Вы можете захотеть извлечь страницы 1–3 в один документ и сохранить всё после страницы 3 как другой файл.

Spire.Doc предоставляет метод ExtractPages() для этой цели.

Пример: извлечение страниц 1–3 и оставшихся страниц

from spire.doc import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("input.docx")
# Извлечение страниц 1-3
first_part = doc.ExtractPages(0, min(3, doc.PageCount))
first_part.SaveToFile("Page1-3.docx", FileFormat.Docx)
first_part.Dispose()
# Извлечение оставшихся страниц, если в документе более 3 страниц
if doc.PageCount > 3:
second_part = doc.ExtractPages(3, doc.PageCount - 3)
second_part.SaveToFile("Page4-End.docx", FileFormat.Docx)
second_part.Dispose()
doc.Dispose()

Код создаёт до двух выходных файлов:

Page1-3.docx
Page4-End.docx

Как работает извлечение страниц

Ключевой метод:

doc.ExtractPages(startIndex, pageCount)

Первый аргумент указывает начальный индекс страницы, а второй определяет, сколько страниц должно быть извлечено.

Индексы страниц являются нулевыми , поэтому:

doc.ExtractPages(0, 3)

извлекает страницы 1, 2 и 3.

Аналогично:

doc.ExtractPages(3, doc.PageCount - 3)

начинается с четвёртой страницы и извлекает всё до конца документа.

В первой операции в этом примере используется:

min(3, doc.PageCount)

вместо простого указания 3. Это предотвращает запрос трёх страниц, когда исходный документ содержит менее трёх страниц.

Второе извлечение также обёрнуто в:

if doc.PageCount > 3:

чтобы не создавать ненужный пустой документ, когда исходный файл содержит только три страницы или меньше.

Извлечение другого диапазона страниц

Тот же метод можно адаптировать для любого диапазона страниц.

Например, чтобы извлечь страницы с 5 по 10:

part = doc.ExtractPages(4, 6)
part.SaveToFile("Page5-10.docx", FileFormat.Docx)
part.Dispose()

Начальный индекс — 4, потому что индексы страниц начинаются с нуля, а количество извлекаемых страниц — 6.

Это делает ExtractPages() особенно полезным, когда диапазоны страниц поступают из пользовательского ввода, файлов конфигурации или другого рабочего процесса обработки документов.

Разделение документа Word по разделам

Номера страниц не всегда являются наиболее осмысленным способом разделения документа Word.

Многие структурированные документы используют разделы для разделения содержимого. Раздел может представлять главу, сегмент отчёта, форму или другую логическую часть документа. Разделы также могут иметь собственные ориентацию страницы, поля, верхние и нижние колонтитулы или другие параметры страницы.

Если исходный документ уже использует разрывы разделов, разделение по разделам часто является более естественным подходом.

Пример: сохранение каждого раздела как отдельного документа Word

from spire.doc import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("input.docx")
# Разделение документа по разделам
for i in range(doc.Sections.Count):
new_doc = Document()
# Клонирование текущего раздела и добавление его в новый документ
new_doc.Sections.Add(doc.Sections.get_Item(i).Clone())
# Сохранение раздела как отдельного документа Word
new_doc.SaveToFile(
f"output/SplitDocument/SplitBySectionBreak_{i+1}.docx"
)
new_doc.Close()
doc.Close()

Если исходный документ Word содержит три раздела, скрипт создаёт файлы, такие как:

SplitBySectionBreak_1.docx
SplitBySectionBreak_2.docx
SplitBySectionBreak_3.docx

Как работает разделение по разделам

Количество разделов в документе доступно через:

doc.Sections.Count

Скрипт проходит по каждому разделу:

for i in range(doc.Sections.Count):

На каждой итерации создаётся новый объект Document.

Затем текущий раздел извлекается и клонируется:

doc.Sections.get_Item(i).Clone()

Клонированный раздел добавляется в новый документ:

new_doc.Sections.Add(...)

Наконец, новый документ сохраняется как независимый файл .docx.

Клонирование здесь важно, потому что выходной документ получает собственную копию раздела, а не просто ссылку на раздел, хранящийся в исходном документе.

Разделение по страницам и по разделам: сравнение

Хотя оба метода создают файлы Word меньшего размера, они решают несколько разные задачи.

Используйте разделение по страницам , когда требование звучит так:

Сохранить страницы 1–3 отдельно, а оставшиеся страницы поместить в другой файл.

Используйте разделение по разделам , когда сам документ уже содержит структурные границы:

Создать отдельный файл Word для каждого раздела в документе.

Это различие важно, потому что страницы и разделы не эквивалентны. Один раздел может занимать несколько страниц, а документ также может содержать несколько разделов с различными настройками форматирования.

Когда разделение по страницам является лучшим выбором

Разделение по страницам особенно полезно для рабочих процессов, где границы выходных файлов определяются внешне, а не структурой файла Word.

Типичные примеры включают:

  • Извлечение титульной страницы и резюме

  • Отделение выбранных страниц из отчёта

  • Создание меньших документов из длинного сгенерированного отчёта

  • Обработка только указанного диапазона страниц

  • Построение рабочих процессов предпросмотра или распространения документов

Поскольку диапазоны страниц могут вычисляться динамически, этот метод также хорошо работает в приложениях пакетной обработки.

Например, программа может считывать диапазоны, такие как:

1-5
6-10
11-20

и автоматически создавать один документ Word для каждого диапазона.

Когда разделение по разделам имеет больше смысла

Разделы полезны, когда документ уже организован в логические единицы.

Рассмотрим отчёт, содержащий:

Раздел 1 — Резюме
Раздел 2 — Финансовые результаты
Раздел 3 — Анализ рынка
Раздел 4 — Приложение

Вместо определения того, где начинается и заканчивается каждая часть по номеру страницы, скрипт может просто обработать существующую коллекцию разделов.

Это особенно полезно для документов, в которых разделы используют разные:

  • Верхние и нижние колонтитулы

  • Размеры страниц

  • Поля

  • Ориентации страниц

  • Колоночные макеты

  • Настройки нумерации страниц

В таких случаях границы разделов несут структурную информацию, которой одни только номера страниц не обладают.

Важное замечание о страницах Word

Существует одно важное различие между работой с документами Word и такими форматами, как PDF.

PDF имеет фиксированный макет страницы. Документ Word, однако, является потоковым документом . Его разбиение на страницы зависит от таких элементов, как шрифты, межстрочные интервалы, размер страницы, поля, таблицы и другие параметры макета.

В результате разделение по страницам уместно, когда вам нужно работать именно с отображаемыми страницами файла Word. Если ваша цель — сохранить логическую организацию документа, разделение по разделам может быть более предсказуемым.

Поэтому выбор стратегии разделения должен зависеть от структуры исходного документа, а не от простого использования одного и того же метода для каждого файла.

Заключение

Разделение документов Word с помощью Python может упростить рабочие процессы с большими отчётами, главами, контрактами и другими структурированными файлами.

С помощью Spire.Doc for Python есть два простых подхода:

  • Используйте ExtractPages(), когда нужно извлечь определённый диапазон страниц.

  • Проходите по doc.Sections, когда хотите создать отдельный документ для каждого раздела Word.

Разделение по страницам даёт точный контроль над отображаемыми диапазонами страниц, в то время как разделение по разделам использует логическую структуру, уже встроенную в документ Word.

Для отдельных файлов ручного копирования содержимого в Microsoft Word может быть достаточно. Но когда необходимо последовательно обрабатывать десятки или сотни документов, реализация операции разделения в Python делает рабочий процесс гораздо более простым для автоматизации и повторного использования.

Показать полностью 1

Напоминалки в TG Notion

Серия TG Notion

В TG Notion появились напоминалки для задач. Раньше бот умел только хранить задачи и показывать чекбоксы. Теперь можно поставить дату и время — и бот пришлёт уведомление в Telegram.

Но пока я это делал, собрал пару залуп. О них и расскажу.
Первая залупа — хранение времени. Сначала я хранил напоминание строкой вида «13.08.2026 15:00» и сравнивал с текущей минутой. Работало, пока бот не перезапустился. После рестарта напоминания, которые должны были прийти в этот момент, просто терялись.

Перевёл на timestamp в миллисекундах и выборку remind_at <= now. Теперь даже если бот проспал — при следующей проверке догонит.
Вторая залупа — миграция базы. Поле remind_at не добавлялось в существующую таблицу через CREATE TABLE IF NOT EXISTS. SQLite так не умеет — нужен ALTER TABLE. А он падает, если колонка уже есть. Пришлось оборачивать в try/catch и игнорировать ошибку. Мелочь, а потратил час.

Третья залупа — форма выбора времени. Сначала сделал кривой input, который не открывал календарь. Потом сделал кнопку с нативным пикером — вроде заработало. Но при повторном открытии формы вместо сохранённого времени показывался «Invalid date». Оставил как есть — косметика, потом поправлю.

Итог:

Напоминалки работают. Ставишь задаче дату и время, бот присылает уведомление.

Всё это — часть моего бота TG Notion. Там есть личные задачи, заметки, общие доски. Пользуйтесь.
Все обновления и внутренняя кухня - у меня на КАНАЛЕ!)

Показать полностью
4

Я сделал язык, на котором сайты пишут по-русски и сделал под него движок

Я соло-разработчик. Несколько дней делаю RuWeb Studio - инструмент, в котором сайт пишется по-русски, а при Экспорте получается обычный HTML, CSS и JavaScript.

Зачем

Я часто видел, как новички сгорают на старте. Не потому что «сложно думать как программист», а потому что всё вокруг на английском: теги, свойства, ошибки. Мне захотелось убрать этот барьер.

Как это работает

Я сделал язык, на котором сайты пишут по-русски и сделал под него движок


Пишешь заголовок1 "Привет" - получаешь

Привет. Пишешь фон: #667eea - получаешь фон. Пишешь функция и конец - получаешь рабочий JavaScript. Предпросмотр - настоящий браузер, встроенный прямо в приложение.

Зачем пишу

Хочу набрать аудиторию движка. Движок бесплатный, качается без регистрации. Если откликнется - продолжу писать о процессе: что работает, что ломается, и как соло-разработчик двигает продукт.

Если интересно, вот сайт движка
https://ruweb-studio.ct.ws

Показать полностью 1
6

Освоение разделения PDF в Python: от отдельных страниц до извлечения произвольных диапазонов

Освоение разделения PDF в Python: от отдельных страниц до извлечения произвольных диапазонов

Сталкивались ли вы когда-нибудь с такой ситуацией: вы получаете PDF-отчёт на сотни страниц, пытаетесь переслать его коллеге, но вложение в письме превышает допустимый размер и отклоняется? Или вам нужна только конкретная глава, но приходится вручную извлекать её постранично из сотен страниц? Эти «громоздкие» файлы всегда доставляют головную боль при обмене, печати или архивировании. Решение на самом деле довольно простое — просто разделите PDF на несколько меньших файлов по требованию, и проблема решена.

В этой статье мы покажем, как использовать библиотеку Spire.PDF for Python для реализации двух основных режимов разделения с минимальным количеством кода: разделение на одностраничные PDF-файлы одним нажатием и гибкое разделение по произвольным диапазонам страниц .

Предварительные требования: настройка окружения и импорт библиотеки

Spire.PDF for Python — это профессиональный компонент для работы с PDF, который работает полностью независимо от внешних программ, таких как Adobe Acrobat, что делает его идеальным для интеграции в серверы или автоматизированные скрипты.

Команда установки:

pip install Spire.PDF

После установки импортируйте необходимые модули в начале файла с кодом, чтобы приступить к работе.

Режим 1: Разделение каждой страницы на отдельные одностраничные PDF-файлы

Если ваша бизнес-задача требует сохранить каждую страницу многодесятистраничного контракта, тендерной документации или электронной книги как отдельный PDF-файл, метод Split() является самым удобным выбором.

from spire.pdf.common import *

from spire.pdf import *

# 1. Инициализация и загрузка исходного PDF-документа

doc = PdfDocument()

doc.LoadFromFile("Sample.pdf")

# 2. Разделение: сохранение каждой страницы как независимого одностраничного PDF-файла

# {0} — это заполнитель номера страницы; второй параметр 1 указывает, что нумерация начинается с 1

doc.Split("Output/SplitDocument-{0}.pdf", 1)

# 3. Освобождение ресурсов

doc.Close()

Пояснение метода:

Полная сигнатура метода Split() — Split(string fileName, int startNumber), и его функция заключается в строго фиксированном разделении каждой страницы PDF на независимый одностраничный PDF-файл — это поведение нельзя изменить с помощью параметров.

Два параметра означают следующее:

  • fileName : Путь для выходного файла и шаблон имени. {0} внутри является заполнителем, который будет автоматически заменён фактическим номером страницы при сохранении.

  • startNumber : Задаёт начальный номер для заполнителя {0}. Он влияет только на нумерацию в имени файла и не имеет отношения к логике разделения .

Режим 2: Разделение по требованию путём выбора диапазонов страниц

Иногда нам не нужно разделять каждую страницу, а хочется разбить PDF на логические части. Например: Часть 1 (обложка) , Часть 2 (основной текст, главы 1–3) , Часть 3 (приложение) .

В этом случае мы можем создать несколько объектов PdfDocument и использовать метод InsertPageRange() для точного извлечения определённых страниц из исходного документа.

from spire.pdf.common import *

from spire.pdf import *

# Загрузка исходного документа

doc = PdfDocument()

doc.LoadFromFile("Sample.pdf")

# Создание трёх пустых PDF-объектов для хранения разделённого содержимого

newDoc_1 = PdfDocument()

newDoc_2 = PdfDocument()

newDoc_3 = PdfDocument()

# 1. Извлечение страницы 1 (обложка)

# Примечание: индексы страниц начинаются с 0, поэтому страница 1 соответствует индексу 0

newDoc_1.InsertPage(doc, 0)

# 2. Извлечение страниц со 2 по 4 (начало основного текста)

# Параметры InsertPageRange: (исходный_документ, начальный_индекс, конечный_индекс)

newDoc_2.InsertPageRange(doc, 1, 3)

# 3. Извлечение страниц с 5 по последнюю (оставшаяся часть)

# doc.Pages.Count получает общее количество страниц; вычитание 1 даёт индекс последней страницы

newDoc_3.InsertPageRange(doc, 4, doc.Pages.Count - 1)

# Сохранение трёх разделённых документов по отдельности

newDoc_1.SaveToFile("Output1/Split-1.pdf")

newDoc_2.SaveToFile("Output1/Split-2.pdf")

newDoc_3.SaveToFile("Output1/Split-3.pdf")

# Закрытие всех объектов документа для освобождения памяти

doc.Close()

newDoc_1.Close()

newDoc_2.Close()

newDoc_3.Close()

Правила индексации страниц (очень важно):

В Spire.PDF нумерация страниц следует общепринятому в программировании соглашению — начиная с 0 . То есть doc.Pages[0] представляет первую страницу PDF. Понимание этого критически важно для точного извлечения диапазонов:

  • InsertPage(doc, 0): вставляет страницу 1.

  • InsertPageRange(doc, 1, 3): вставляет страницы со 2 по 4 включительно.

  • InsertPageRange(doc, 4, doc.Pages.Count - 1): начинается со страницы 5 и до физической последней страницы.

Преимущество такого подхода к разделению — его исключительная гибкость: вы можете комбинировать страницы по любым правилам или даже извлекать страницы из разных исходных файлов и объединять их в новый PDF (используя возможность InsertPage работать с разными документами).

Расширение: Разделение по фиксированным группам страниц

Стоит отметить, что метод Split() не может выполнить требование «объединять каждые N страниц в один PDF» (например, объединять каждые 2 страницы в один файл). Если вам требуется такое групповое разделение, необходимо использовать InsertPageRange в цикле для ручной реализации:

# Пример: объединение каждых 2 страниц в один PDF

group_size = 2

for i in range(0, doc.Pages.Count, group_size):

new_doc = PdfDocument()

end_index = min(i + group_size - 1, doc.Pages.Count - 1)

new_doc.InsertPageRange(doc, i, end_index)

new_doc.SaveToFile(f"Output/Group-{i // group_size + 1}.pdf")

new_doc.Close()

Рекомендации по выбору между двумя режимами

Освоение разделения PDF в Python: от отдельных страниц до извлечения произвольных диапазонов

Заключение

Как показано в приведённых примерах, с помощью Spire.PDF for Python мы можем выполнять сложные задачи по разделению PDF, используя всего лишь чуть более десятка строк основного кода. Будь то пакетная обработка архивных файлов или интеграция функциональности управления документами в систему, это решение может значительно сэкономить время разработки.

Надеемся, эта статья поможет вам эффективно решать задачи по разделению PDF! Если вы столкнётесь с другими проблемами на практике, не стесняйтесь изучать их дальше.

Показать полностью 2
10

100 дней изучения Python. День 1. Меня зовут Элиф, и я понятия не имею, что делаю

Серия Дневник Элиф Дебажной

UPD:

Дисклеймер: Элиф Дебажная - вымышленный персонаж. Посты написаны от её лица как дневник обучения Python. Это художественный формат, цель которого - показать путь новичка со всеми ошибками, вопросами и открытиями.

Комментарии от имени Элиф в этой серии также являются частью художественного формата. Она отвечает читателям как персонаж дневника, а не как реальный человек. Все обсуждения, реакции и самоирония нужны для сохранения атмосферы истории.

Привет, Пикабу. Меня зовут Элиф, мне 26.

Решила устроить себе небольшой эксперимент и заодно проверить, насколько у меня крепкая психика.

Следующие 100 дней буду изучать Python и выкладывать сюда всё как есть. Без красивых историй про "успех за две недели". Если код сломается, то покажу. Если три часа буду искать пропущенную запятую - тоже покажу. Если случайно удалю половину проекта... надеюсь, не покажу. Хотя кого я обманываю.

До IT я работала в другой сфере, а программирование для меня долго было чем-то вроде магии: люди нажимают на клавиши, потом покупают квартиру.

В какой-то момент решила перестать смотреть на это со стороны и попробовать сама.

Что будет в этом дневнике:

  • самые глупые ошибки, которые только можно сделать;

  • мемы про Python;

  • разборы того, что наконец удалось понять.

Пока мои достижения выглядят так:

  1. установила Python;

  2. установила VS Code;

  3. случайно открыла терминал;

  4. испугалась.

Не обещаю стать сеньором за три месяца. Но обещаю честно рассказывать обо всех победах и фейлах.

Если кому-то будет смешно - отлично.

Если кому-то пригодится мой опыт - ещё лучше.

Если опытные разработчики будут иногда пинать в нужную сторону - вообще замечательно.

День 1 начинается. Пожелайте удачи. Кажется, дальше будут отступы.

P.S. Если через неделю увидите пост "Перешла разводить суккуленты", значит Python оказался сильнее.

100 дней изучения Python. День 1. Меня зовут Элиф, и я понятия не имею, что делаю
Показать полностью 1
0

Как я устал от алгоритмов соцсетей и написал своего ИИ-ассистента для чтения новостей (и почему RSS всё ещё жив)

Привет, Пикабу!

Я — независимый разработчик. И, как и многие из вас, я поймал себя на ужасной зависимости: каждое утро я открывал Telegram, Хабр, новостные сайты и кучу каналов, тратя по 2 часа на бесконечный скроллинг. Алгоритмы соцсетей созданы для того, чтобы жрать наше время, подсовывая кликбейты вместо реально важной информации. В итоге к полудню голова уже была забита информационным мусором, а фокус полностью терялся.

Я вспомнил старый добрый RSS. Идея отличная: ты сам выбираешь, что читать, без умных лент и рекомендаций. Но читать 100+ полных статей в день вручную — это тоже адски долго.

Тогда я решил сделать инструмент для себя — карманного ИИ-ассистента прямо в Telegram, который взял бы на себя всю рутину. И вот что из этого вышло.

Что умеет мой бот?

  1. Вытаскивать суть (AI Digest): Бот сам заходит по ссылке (даже если там пейволл или сайт перегружен скриптами), выкачивает чистый текст, анализирует его с помощью ИИ и выдает мне сжатую суть в виде лаконичного дайджеста. Чтение статьи на 15 минут теперь занимает 30 секунд.

  2. Умный слайдер: Если у вас мало времени, бот генерирует короткие слайды-выжимки по ключевым темам.

  3. Карманный подкаст (Аудиофичи): Моя любимая фишка. Бот умеет озвучивать дайджесты голосом. Я просто нажимаю кнопку, вставляю наушники и слушаю выжимку утренних новостей, пока варю кофе или иду на прогулку.

  4. Никакой рекламы и мусора: Никаких баннеров, всплывающих окон и кликбейтов.

Как это устроено внутри?

Архитектура довольно простая, но отказоустойчивая. Бот написан на Python (библиотека Aiogram 3). В качестве базы данных используется PostgreSQL для хранения пользователей и подписок, а быстрый кэш и стейты (FSM) крутятся на Redis. Парсингом и очисткой страниц от мусора занимается кастомный инстанс Mercury Parser API, а суммаризацией и генерацией аудио — легковесные и быстрые ИИ-модели.

Поскольку я считаю, что информационная перегрузка — это глобальная боль, я перевел интерфейс бота на четыре языка: русский, английский, испанский и персидский.

Для чего я это пишу?

Бот полностью бесплатный для старта (мне действительно важно собрать фидбэк от реальных людей, а не заработать все деньги мира). Я хочу сделать инструмент, которым будет удобно пользоваться каждому, кто ценит свое время и ментальное здоровье.

Буду очень рад, если вы потестируете бота, найдете баги (а они наверняка есть, ведь я пилил его по ночам!) и напишете в комментариях, каких фич вам не хватает.

Ссылка на бота: @RSS_READER_AI_Bot

Берегите свой фокус и не позволяйте алгоритмам решать за вас, что сегодня читать!

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества