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

Очень вкусный иранский ресторан. Возможно, вы не знали, но есть два флага Ирана. Этот — исторический флаг, использовали до исламской революции 1979, и сегодня в самом Иране его использование — политическое преступление. Основное отличие от официального — эмблема льва и солнца. Поэтому когда иранские протестующие в Вашингтоне устраивают демонстрации, стоит посмотреть, какие флаги они несут. Если четыре полумесяца и меч посредине — то это протестующие из другого лагеря 😉

Вкусное путешествие: Афганская кухня в сердце Вашингтона | 2026-03-09T00:27:23

Я придумал нам интересный проект на 2026. Каждый раз, когда мы собираемся поесть где-нибудь, выбирать какой-нибудь из ресторанов какой-нибудь экзотической страны, и немного подготовиться, чтобы понимать, что заказываешь. Я живу рядом с Вашингтоном, и тут есть рестораны почти всех кухонь мира (белорусские драники и дрочену, например, тут не попробовать). Начали с буквы А!

Афганская кухня. Посетили Mazako Afgan Eatery.

Мы взяли кабульский плов (Qabuli Palau). Рис здесь длиннозерный, очень рассыпчатый и подслащенный карамелизированной морковью и изюмом. С сумахом. Вкуснотища! За 14 баксов. Взяли mantu. Родственники наших мантов, но с афганским акцентом. Главное отличие — соусы. Сверху их обязательно поливают густым йогуртом (чака) с чесноком и сушеной мятой, а также мясным соусом из желтого гороха. Очень вкусный куриный кебаб (Chicken Kebob). Афганцы — мастера маринада. Курицу они маринуют в йогурте с лимоном и шафраном, что делает её очень нежной. Взяли Doogh (Дуг) — освежающий напиток на основе йогурта, воды, соли и, теоретически, большого количества сушеной мяты (правда, мяту мы там не нашли, но может она просто спряталась) и мелко нарезанных огурцов. Поначалу кажется слишком соленым, но все-таки норм.

Итого плов+куриный кебаб+дуг+манту плюс 20% чаевых = 54 доллара. И это очень вкусно (и обожраться).

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

Вкус Таиланда в Origin Thai Spa: чай и массаж | 2026-01-08T23:48:03

Купили в нашем тайском массажном салоне Origin Thai Spa сегодня вот это все за $20. ломтиками — чай матум, Bael Fruit Tea. Левее него — пандановый чай. Там же перед покупкой попробовали с hand-made тортиками (вкуснотища!).

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

Экономические чудеса венесуэльского арбитража | 2026-01-04T17:10:36

Я впервые пошел смотреть на карту Венесуэлы лет 15 назад, когда туда можно было улететь из России за пару сотен долларов. Изучал схему, но не воспользовался (может и зря).

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

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

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

Но дешевые билеты были лишь верхушкой айсберга, потому что существовал еще так называемый «распао». Государство давало каждому путешественнику право купить пару тысяч долларов по официальному дешевому курсу на кредитку для трат за границей. В итоге люди покупали копеечные билеты, летели на ближайшие острова, обналичивали там валютную квоту и возвращались домой фактически богачами, продав эти доллары на черном рынке в десятки раз дороже.

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

Но какое-то время это работало. Я не помню точно, где-то между 2011 и 2014.

Почему такой разрыв с официальным и неофициальным курсом вообще столько прожил? Правительство не могло быстро отменить официальный курс, потому что на нем держался импорт еды и медикаментов. Как только они признали бы реальный курс доллара, цены в магазинах взлетели бы мгновенно (что позже и произошло). Авиабилеты просто оказались «побочной дырой» в этой системе, которой все пользовались, пока была возможность.