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

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

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

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

Надежда Шульга | 2026-03-12T18:55:57

За последнюю неделю Nadezhda Shulga нарисовала в первый раз в жизни картину маслом и в первый раз в жизни села играть на пианино одной рукой Умку! Надя, ты молодец!!! Она столько раз меня просила рисовать природу, что в итоге взяла и нарисовала сама

Илья Репин | 2026-03-01T23:59:08

Оказывается в первой версии картины «Не ждали» главной героиней была женщина, народоволка-революционерка! Это малая версия, потом Репин написал большую и уже с мужчиной — ту которую все знают.

А первая версия хранится в Третьяковке но ее не выставляют.

Ну как все знают. Вообще русских и украинских художников вне своих стран почти не знают. Вроде одна картина Репина есть в metropolitan NY и несколько в Орсе, но это почти ничего, и я не удивлюсь, что все в запасниках.

Тут знают Рублева, знают русский авангард (Малевич, Кандинский, Шагал), го никто (кроме профессионалов) не знает Шишкина, Левитана, Васнецова, Сурикова, Саврасова. При том, что довольно многие учились в Европе, работали оттуда. Того же Иванова с его Христом народу вспомнить.

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

Закатная мелодия: портрет первой лошади-блондинки | 2026-02-27T15:00:15

Ну вот, моя первая лошадь-блондинка //

My first blonde horse

Astor Piazzolla | 2026-02-23T06:31:00

Пару дней назад решил погуглить будет ли исполняться Astor Piazzolla где-нибудь в округе, и увидел, что буквально в эти выходные неподалёку в Strathmore гастролирует Tango After Dark под музыку Piazzolla в, сопровождении аргентинского оркестра и аргентинских же танцоров танго. Очень круто, но не принёс ни одной записи сюда.

Пока гуглил что это за диковинный инструмент у тамошнего солиста был — бандонеон — наткнулся на очень очень очень крутой концерт Mario Pietrodarchi в сопровождении Минского оркестра. Это концерт занимает пять первых мест в наиболее популярных записях ютьюба Belarusian State Chamber Orchestra — прямо идите в popular и слушайте все, там все классное. Просто либертанго и обвилион вы наверняка и без меня слышали, они заезженные, поэтому в комментарий прикладываю Танец ангела (Milonga del angel).

Сюрреализм в повседневности | 2026-02-08T15:36:52

Один обычный день

Решил я, значит, яичницу пожарить. Беру сковородку, а она мне говорит: «Вам на какой этаж?». Я не растерялся, достал из кармана рояль и нажал на педаль тормоза. Тут из духовки вылетает стюардесса и вежливо так спрашивает: «Чай, кофе или кирпич подержать?». Я выбрал кирпич, потому что он был в синюю клеточку и пах весной.

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

— Почему без панамы в общественном месте?

А я ему паспорт показываю, а там вместо фотографии — селедка под шубой. Он расплакался от счастья, подарил мне кактус и улетел на зонтике в сторону Сызрани.

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

Подхожу к нему, захожу в лифт, сажусь на велосипед, завожу мотоцикл, тут бац, ко мне кондуктор подходит и говорит: «Дядя, уступи место». А я говорю что не курю. Так этот ребенок как начнет плакать! Но я не растерялся, и как дал ему по роже, а он хватается за коленку и кричит: «Моя спина! Моя спина!»

Выхожу я из этой электрички,

смотрю, маршрутка стоит. Ну подхожу и говорю: «Винстон синий и водки 0,5». Ну она мне и дает Bond и пиво. Я беру эту приму и самогон, и убегаю от этих мусоров! Так эти пожарники меня на скорой догнали! Догнали и говорят: «Вы сдачу забыли!». Ну я беру килограмм яблок, и иду на базар торговать.

Приношу, не успел выложить эти бананы, тут же бабка подбегает и скупает у меня все персики, и говорит чтобы все сложил в кулечек! А я думаю, что она совсем больная, как я ей 20 арбузов в сумку положу?! Взял я деньги и пошел домой! Больше я в лес не ходил… и грибы не трогал… даже курить бросил.