Помните, меня достал фейсбук с тем, что не может нормально искать по моим постам и корректно фильтровать по тегам? Ну программист я или кто — я просто взял и перенес 5787 постов вместе с фотографиями к ним на beinginamerica.com через API фейсбука и API WordPress-а.
Этот путь кстати тернистый. Фейсбук предоставляет API для доступа к постам, но при этом накладывает лимит в 200 обращений в час, и этот API просто не работает на моем фейсбуке. Не работает он потому, что я когда-то перевел фейсбук в «профессиональный режим», а на нем не работает часть API (документировано). Но вот этот, с получением постов, должен работать. Но он тоже не работает. В интернетах пишут, что нужно отключить профессиональный режим и все заработает. А мне не хочется отключать, потому что непонятно, какая процедура включения его обратно. И я пошел другим путем — я затребовал у фейсбука выгрузку всего архива. Это занимает около 3 дней, дальше дается неделя на скачать архив.
В этом архиве есть JSON-коллекция. В ней вся кириллица представлена в ДВУХ кодировках. Первая кодировка выглядит так — \u00d0\u009e\u00d1\u0082\u00d0\u00ba\u00d1\u0080\u00d1\u008b\u00d1\u0082\u00d0\u00b8\u00d0\u00b5 . Вторая кодировка выглядит так: наÑ�одка. То есть, они изначально обе выглядят как первое, только после перевода из юникода в одном случае получается нормальный текст, а в другом — требующий еще дополнительного раскодирования из ISO-8859-1. Ну с этими двумя манипуляциями в целом архив парсится нормально.
Но что делать с новыми постами, которые появляются после выгрузки архива? Для них же не работает API на проф аккаунте. Там хитрость /me/feed действительно не работает (выдает Permissions error, New Pages Experience Is Not Supported, This endpoint is not supported in the new Pages experience). Но вот /me?fields=feed выдает отдельные посты с их айдишниками, и по айдишникам можно запросить детали. В целом, это выход. Если надо запросить последние 100 постов, то будет работать /me?fields-feed.limit(100). Но бесконечно так нельзя, там можно максимум 100. Но этого достаточно, потому что архив я уже перенес, а это нужно для новых постов с момента запуска предыдущий раз. Там можно limit поставить условно 10.
Отдельной сложностью является то, что дата изменения и дата создания любого поста в выгрузке архива JSON почему-то не совпадают с датами изменения и создания того же поста, когда получаешь его через API. В итоге, появляется проблема с тем, как понять, что пост уже существует. Ведь нет уникального ID и там, и там. Пока это не проблема, потому что у меня есть понятная отсечка — до вчера все посты пришли из архива, со вчера и дальше в будущее приходят только из API.
Дальше как это перенести в wordpress. У меня он БЕСПЛАТНЫЙ. То есть там лимит в 1Гб по плану, но почему-то интерфейс показывает, что можно загрузить 3Гб медиа. Выгрузку из Facebook можно сделать, указав качество изображений. Основная масса (картинки для моих 5000 постов — понятно, что картинки не везде) заняла только 15% от 3Гб. Новые же картинки идут с полным разрешением. Но wordpress справляется с их ужатием на этапе отображения.
В итоге пост вордпресса состоит из HTML, состоящего из
— контента без тегов от facebook — я автоматом расставляю
— плюс ссылка A HREF если к посту прицеплена ссылка
— плюс набор img если к посту прицеплены картинки
API wordpress позволил мне создавать и редактировать посты массово. Поэтому я просто проходил циклом по выгрузке Facebook и создавал посты в WordPress.
Не перенес видео. Во-первых, их надо сначала куда-то загрузить, а потом создать в wordpress пост с интегрированным плейером. Это несложно, надо когда-нибудь заморочиться.
Еще загрузка автоматическая на wordpress иногда уходит в таймаут бесконечный, и скрипт приходится перезапускать. На 5000 постов ушло где-то 20 перезапусков. Но в целом можно было бы это автоматизировать.
WordPress имеет в целом неплохой поиск. Все, что мне нужно, нахожу влет. Теперь проблемы с поиском по постам нет. В платной версии WordPress можно ставить плагины для массового теггирования, но у меня API есть и JSON со всем архивом на компе, я в целом могу сделать тоже самое через API и через обработку этого JSON. Например, если мне понадобится все посты про английский язык пометить тегом «английский» или поместить в категорию «английский», я могу одним скриптом выбрать посты из JSON, а вторым проапдейтить соответствующие посты в wordpress. У каждого поста title соответствует дате, так что это несложно.
Отдельная проблема с постингом галереи — когда есть несколько картинок, и хочется сделать так, чтобы в вордпрессе они были кликабельные и раскрывались на весь экран, а в посте были превьюшки. В этот раз проблема с WordPress. Там есть API по созданию постов, но он ненормально поддерживает галерею. Как ее создавать через API вообще недокументировано, но туда можно бросать HTML, симулирующий тот, что получается, если галерею создать, а потом запросить у WordPress пост через API. В этом посте есть специальные теги figure, и если их эмулировавать при создании нового поста, то даже получается что-то, но, к сожалению, некликабельно. Разбираюсь еще можно ли это починить, но, похоже, не очень можно.
