vCard’ы, аватары и прочее из XMPP

Начал подробнее копать тему того, что в некоторых клиентах – в частности Gajim и Conversations – не показываются аватары для ботов RSS-транспорта, хотя в Psi все ок. Собственно, в Gajim’e vCard виден и в нем есть фото, которое транслирует транспорт. Но в тот же самый момент в ростере дефолтная заглушка. В Conversations в “Информации о контакте” в принципе нет ничего полезного (ну, кроме статуса). Решил немного упорядочить то, что сегодня вычитал и узнал.

Во-первых, есть 2 стандарта на vCard: существующий уже 20 лет и повсеместно применяемый XEP-0054: vCard-temp и более новый, XEP-0292: vCard4 Over XMPP. Разница в том, что в первом поля данных описываются так, как это видели авторы XEP-0054 и это применяется исключительно в XMPP, а второй использует появившийся позже и ставший стандартом формат vCard (собственно, уже 4-ю версию). Причем, первый формат актуален до сих пор, а второй пока отложен.

Про urn:xmpp:vcard4 я впервые увидел в XML-консоли нового Gajim’a, после чего и ушел читать про vCard4. Gajim, кстати, ничего внятного теперь не показывает вообще – похоже, поддержку старого (и актуального!) формата визиток выбросили, оставив только новый. Но в целом, глобально ничего не поменялось, все тот же “вопрос-ответ”, просто с другим namespace и другой структурой. При желании можно будет попробовать реализовать и даже держать 2 варианта параллельно – как это я видел в вариантах обработчиков для XMPP Time в XMPPPY – там были варианты old и new.

Но изначальная цель была не в визитках, а в аватарках. И из того, в чем смог разобраться – мое ожидаемое поведение – брать для ростера аватарку из фото в визитке – актуально только для Psi. В Gajim’e – и, похоже, в Conversations еще в большей мере – фото в визитке это одна сущность, а аватарка в ростере – уже другая. Первое я реализовал, а второе, похоже, завязано на pubsub и я пока не имею представления с какой стороны к этому подходить. Как минимум, для бота Isida, для которого есть полноценный аккаунт на сервере, в базе по запросу

select * from pubsub_node where node = 'urn:xmpp:avatar:data';

находятся данные. Не копал глубже – наверное, по id для отданной записи для этого запроса где-то в storage можно найти данные, где и будет аватар. Update: все же глянул таблицы. Да, по запросу

select * from pubsub_item where publisher = 'isida-bot@jabberworld.info/Psi+';

нашел data xmlns='urn:xmpp:avatar:data' и дальше код в base64 – похоже, это и подгружается в качестве аватара в современных клиентах. Т.е., чтобы все работало – каждый бот должен сделать публикацию на сервере, а дальше уже клиенты смогут что-то получать. Вопрос только, а имеют ли боты права на такие публикации? Ведь в случае с Изидой она – обычный JID на сервере (под которым я залогинился с Psi+ и сделал публикацию vCard и аватара), а JID’ы ботов – уже как бы отдельный ресурс.

В общем, непонятно. Так как тема затрагивает сразу несколько направлений – надо сначала изучить работу pubsub, а потом уже разбираться, в каком стандарте идет описание публикации аватара – то пока что, думаю, стоит заняться чем-то более полезным, чем такими украшательствами. В транспорт и так уже добавлено порядком кода, который работает, фактически, только в Psi. Разве что пока свежи в памяти наработки по вытягиванию контента со страничек – можно потренироваться в получении favicon’ок в максимальном разрешении. Но это для общего развития.

Добавить комментарий