Автоматизация кросс-постинга: боремся с трудностями 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 баксов).

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

Лисы и Юки: Встречи в золотом свете | 2026-05-09T03:10:53

Гуляем с Юки. Он очень нравится лисам. Они всегда его долго разглядывают. Видео в комментариях

Странности в окне: когда бездна засматривается в ответ | 2026-05-01T12:56:16

Нарисовалось. Изначально Юка ждал в окне дерево. Как там у Ницше, «Если ты долго смотришь в бездну, то бездна начинает смотреть на тебя»

Иллюзия скрытой линии | 2026-04-29T17:56:08

Пытаюсь понять, это у меня одного так глаза работают или нет 🙂 если смотреть на любое место, кроме слова «Омурбекова», то боковым зрением четко выделяется линия, показанная на втором скриншоте красным цветом (но конечно, она белая). Как только возвращаешь глаза на нее, линии нет. То есть, она видна только боковым зрением. Делитесь, как у вас 🙂

Взбираясь наверх: день в скалолазном зале | 2026-04-27T15:03:10

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

Осенние и весенние причуды Юки | 2026-04-09T14:31:01

У Юки снова включился режим «уууу» (7 апреля 2026). Обычно длится несколько дней в апреле и октябре.

Предыдущие разы были —

— 15-20 октября 2025

— 11 апреля 2025

— 1-4 апреля 2024

— 2 февраля 2023,

— 27 октября 2022,

— 15 марта 2022

Изменения в поведении в этот период такие:

1) может петь песни час напролет. Например, в шесть утра.

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

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

И да, начинает он хотеть гулять часов в шесть утра, а в следующий раз — вскоре после возвращения с прогулки.

3) на прогулке сует нос в траву каждые пять минут, и его еле оттуда отдерешь. Обычно такое редко, а тут прям постоянно.

4) может полчаса сидеть и смотреть на закат.

5) нестабильный аппетит, временами. Кладешь ему мясо сверху корма, он на него даже не смотрит.

Взгляд сквозь иллюминатор: космос и космические масштабы | 2026-04-06T19:59:36

по сути, человек в космосе — это про эти дни и про дни в 50 лет назад. Международная космическая станция уже детский сад: в масштабах Земли она немногим выше, чем самолеты летают.

Ирония дизайна: двойные стандарты в символике туалетов | 2026-03-29T20:17:23

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