Автоматизация кросс-постинга: боремся с трудностями API Facebook | 2026-05-23T14:28:22

Доделал в лучшем виде кросс-постинг из фейсбука на два моих сайта-блога [на которые почти никто не заходит] — beinginamerica точка com и raufaliev точка com. При публикации нового поста в фейсбуке по расписанию стартует механизм перевода поста на английский, разбор приложенных картинок, генерация описаний к ним, создание заголовка на основе текста поста и описания картинок, создание тегов на их же основе, запись поста в turso db — это облачная база, бесплатная до определенных лимитов, создание эмбеддингов через openai, запись в qdrant cloud — это тоже облачная база, но уже векторная, ну и загрузка изображений в wordpress по API, и публикация поста на английском и на русском по API.

Все бы хорошо, но из всех API самый дурацкий — у фейсбука. Во-первых, для страниц как у меня, переведенных в New Experience, нет возможности использовать почти все из этого API. Точнее, есть, но нужно долго доказывать фейсбуку, что это реально надо, показывая документы на стартап, демонстрируя приложение и т.д. Очевидно, им не хочется иметь дело с чем-то уносящим контент из их системы во вне. Кроме этого, токен, который дает доступ к последним сообщениям, относительно короткоживущий (возможно, несколько недель), и получать его заново нужно через браузер только. То есть, любая автоматика требует регулярного внимания, иначе она ломается.

Если протупил и вовремя не выгрузил последние посты через этот Facebook Graph API, они просто исчезают из списка последних и все, больше по API к ним не обратиться. Единственный способ — запросить выгрузку архива у фейсбука. Эта выгрузка тоже довольно дурацкая — там нужно много трансформаций делать и убирать лишнее. Например, в файле с постами, который я обрабатываю, там почему-то хранятся ссылки, которые я отправлял в комментариях без сопроводительного текста. А комментарии там идут в отдельном файле!

Чтобы назначить теги, пришлось решить отдельный челендж. Вот есть около 10000 постов за все время. Это большой кусок, и по нему теги построить нельзя, потому что он в контекстное окно LLM не помещается. А надо. Поэтому я делал так: скрипт берет случайные посты из 10000 в таком объеме, чтобы их суммарный размер был чуть меньше указанного лимита в токенах, и в конец этого блока добавляется промпт «сгенери мне наиболее частые теги, 30 штук» (промпт привожу упрощенно). В итоге я запустил это 10 раз и получил 10 наборов тегов по 30 штук, сгенерированных для разных срезов базы. Получилось 300 тегов, из которых конечно есть полные дубликаты, а есть синонимы и близкие по смыслу. Это все скармливается LLM, и получаем список тегов и иерархию тегов. Теперь у нас есть ограниченный набор тегов, которые максимально отражают 10000 постов. Так получилось, что за почти 20 лет на фейсбуке у меня расклад такой:

Тег Постов

==================================================

#Russia 3412

#Thoughts 3146

#Tech 3105

#Culture 2765

#Hobbies 2726

#AI 1603

#Science 1367

#Software 1358

#Travel 1298

#Learning 1138

#Society 1050

#Nature 958

#Education 915

#Business 902

#Art 894

#Programming 889

#Humor 840

#History 807

#Gadgets 750

#Moscow 713

#USA 614

#Cinema 567

#Webdev 493

#Music 476

#Sports 473

#Mindset 443

#Auto 400

#Books 386

ну и так далее. Этот список включает как теги из ограниченного списка, так и теги, которые LLM поставила материалу просто потому, что не нашла в ограниченном ничего подходящего.

Теги из ограниченного списка стали категориями на сайте. Остальные теги + эти стали просто тегами wordpress.

Поиск по картинкам. У меня было две идеи как его сделать. Первая — OpenCLIP. Это довольно просто, но требует хостинга модели где-нибудь. На своей машине легко, но каждый раз ее запускать неудобно, плюс я планировал переносить мигратор на дешевый сервер в амазон. В облачных моделях тоже нормально считать, но хоть немного за это надо платить, а это еще одна dependency. Но главное — что и без этого неплохо работает. Я с помощью OpenAI , который и так используется для перевода на английский, генерю описания к картинкам, и дальше по этим описаниям делаю embeddings с помощью large модели. Пока что все тесты на поиск проходят на ура. Особенно, когда на картинке есть текст, и большой вопрос разобрал бы ли его OpenCLIP.

В итоге:

1) вордпресс raufaliev точка com — бесплатный

2) вордпресс beinginamerica точка com — бесплатный

3) turso db где хранятся все посты — бесплатный

4) qdrant cloud где хранятся эмбеддинги — бесплатный

5) openai для перевода и описания картинок — не бесплатный, но недорогой (обработка постов за год потребовала 30 баксов).

Прикладываю два скриншота — как работает поиск по изображениям, и по текстам, а также дашборд мигратора.

Smartfolio.me: Революция в организации знаний | 2026-03-19T04:01:04

Мое творение — инструмент для организации знаний Smartfolio.me — обросло новыми фичами. Прилагаю видос пятиминутный с обзором.

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

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

Если в тексте что-то непонятно, выделяешь область и жмешь «elaborate» — LLM распишет всё подробно, учитывая контекст всего документа, и объяснение останется ссылкой к выделенному фрагменту.

Можно просто вырезать кусок из PDF, а LLM вытащит оттуда чистый текст или готовую формулу.

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

Можно вырезать схему или график из PDF, скопировать как картинку и вставить в свой текст. Она сама обрежется «на лету» и сохранится в базу, но не как копия, а как ссылка на страницу с параметрами кропа.

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

Математика поддерживается полностью — формулы на LaTeX можно не только смотреть, но и кликнуть, чтобы подправить их в редакторе.

Можно генерировать формулы по описанию. Просто пишешь словами, что за формула тебе нужна (например, «биномиальное распределение»), и система сама выдает готовый код формулы.

Теперь есть система плагинов — по сути это изолированные от главной программы экспериментальные функции. Например, есть плагин, который рекурсивно собирает все-все дочерние странички в один длинный документ — удобно, если надо всё сразу прочитать или распечатать.

Или вот плагин «Чистка транскриптов YouTube». Если есть грязный текст лекции с YouTube, плагин сам расставит знаки препинания, параграфы и сделает красивые заголовки.

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

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

Можно просто скопипастить изображение или скриншот, и он не просто вставится, а еще и зааплоадится в базу данных.

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

Поддерживаются несколько баз данных — можно переключаться. Можно подключать разные базы данных и разные LLM и переключаться между ними.

Ловушка щедрости на Strathmore: как не потерять последние места и деньги | 2026-02-20T19:02:49

Вот ж редиски. Если случайно выбираешь ответ на «хотите нам пожертвовать», то дорога к «ой, не хочу пока» занимает минут 10 и сопряжено с риском потерять места. Потому что 1) нет пункта не хочу 2) любой выбор стоит от $5 до $9.60 3) рефреш страницы приводит к ошибке, надо заново выбирать места и стараться не попадать мышью в эти радиокнопки. А места, между прочим, последние два места в зале. Вчера их вообще не было, сегодня появились.

Создание и визуализация волейбольных схем | 2026-01-01T21:37:01

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

Детали реализации тут:

Создание редактора волейбольных схем: новые технологии для тренеров | 2025-12-23T21:39:02

Завтра вылет в Коста-Рику, а я тут для Нади делаю (или сделал) редактор волейбольных схем. Она как тренер готовится к занятиям, и оставляет после себя сотни страниц текста со схемами на каждой странице. Текст рукописный, и теоретически его просто перевести в электронную форму, а вот схемы в качественную векторную форму переводить замучаешься, их очень много. И я решил сделать софт вчера. И вот сегодня уже первая ласточка, можно пользоваться. Это редактор схем, немного похожий отдаленно на редактор диаграмм. Заодно поразбирался с фреймворком fabric.

Процесс выглядит так. Gemini/ChatGPT через API могут конвертировать рукописные схемы в структуру, которая понимает моя программа. Далее открываем этот файл в программе, и немного подправляем если надо. А может и вообще рисуем заново — для простых схем это даже проще. Там есть четыре типа объекта — игрок, конус, мишень, текст. Любые можно соединять друг с другом стрелками, простыми или пунктирными, подписанными текстом или номером или нет, выбранного цвета, прямыми или по дуге. Если зацепить мышкой за объект, то потянутся за ним все стрелки.

Результат можно записать в файл. Можно открыть шаблон и на его основе сделать что-то новое. Можно сгенерировать скрипт на питоне — вчера это было еще актуально, сегодня в целом не надо уже — SVG/PNG высокого разрешения делаются сразу из этого приложения (вчера делались отдельно с питона).

Понятно, почему сразу не попросить Gemini/ChatGPT сделать что-то для готовых векторных редакторов: во-первых, они слишком гибкие и ограничить фантазию LLM довольно сложно. В итоге получаются разностильные, никуда не годящиеся картинки. Тут же есть фреймворк из четырех объектов и все, LLM о нем знает и генерит только то, что им можно отобразить. Во-вторых, этот фреймворк оперирует объектами, а не элементарными векторными примитивами.

В целом, это первый шаг к моей идее про систему автоматического диаграммрования по описанию. Когда даешь LLM описание диаграммы, а она консистентно генерит то, что написано в описании, и если ты что-то подправил, то при перегенерации это изменение будет учитываться.

SingleFile: решение проблем с сохранением и обменом веб-страницами | 2025-11-05T17:45:42

Нашел полезный экстеншн к Chrome — SingleFile. Решает вот такую задачу — нужно поделиться страницей из браузера, которая не публичная, например, по iMessage или Telegram. Это не так тривиально сделать. Например, модно записать из браузера на лэптопе файл .mhtml, и его отправить, но открыть его не смогут только получатели на айфоне. Записать в обычный .html тоже не вариант, так как там не сохраняются картинки и стили. Сделать скриншот — попадет только небольшой фрагмент. Поставить экстеншн, который делает длинный большой PNG со всей страницей — этот PNG нельзя открыть на айфоне из телеграмма как минимум, отрисовывается только верх. Печать в PDF тоже не выход — результат очень плохой и очень зависящий от желания разработчиков делать print-friendly version.

SingleFile позволяет создать снэпшот страницы из браузера, обычный .html, который открывается где угодно, со встроенными стилями и изображениями. Но что особенно удобно, перед экспортом можно через WebInspector поудалять все, чем делиться не хочешь, и оно не попадет в финальный .html. У экстеншена свободный код на github, и он никуда ничего не отправляет. Судя по всему, если на странице была динамическая подгрузка через JS, то сохраняется не JS, а результат подгрузки, а JS вырезается.

В общем, удобно, хорошая штука, пользуйтесь.

(Это у меня сегодня интервью вышло на внутреннем портале, и мне нужно было им с семьей поделиться в нашем семейном чатике)