Follow

@rf а кто знает где почитать как устроено взаимодействие серверов в федерации? Что бы не протокол, а простыми словами, вот пост, вот так распространяется, вот эти видят и т.д. Подозреваю сервера плеромы и мастодона еще и по разному реализуют взаимодействие.

Ну в целом всё так как @admin описал. Ты в своём комменте упоминаешь ники пользователей, твой инстанс рассылает сообщение на каждый инстанс упомянутого пользователя плюс на каждый инстанс тех пользователей, которые на тебя подписаны. Но при этом на каждый инстанс шлётся только один раз в один общий "shared inbox".

Плерома и Мастодон работают более менее одинаково и даже с Френдика более менее норм. А вот например Pixelfed, Hubzilla и т.д. что-то делают очень по своему, у меня с ними федерирование не работает.

@rf @3draven @ru @russian_mastodon #fediverse #mastodon

@top @admin @rf @ru @russian_mastodon тут возникла ситуация, что в треде я не видел ответов. То есть. Есть корневой пост. Я отвечаю. Мне говорят, что уже отвечено. А в треде я вижу только три поста, корень, свой и ответ мне. Я не в бане насколько я понимаю. Как такое может быть?

Если тебя не помянули в комменте и никто с твоего инстанса не подписан на того автора, то копия сообщения на твой инстанс не будет послана, поэтому твой инстанс с большой вероятностью этот коммент не увидит. На мало популярных серверах это распространённое явление.

@admin @rf @ru @russian_mastodon @3draven

@top @admin @rf @ru @russian_mastodon да, инстанс у меня личный, под себя любимого поднял. Есть правда ретранслятор, который пересылает. Но понятно, спасибо. Выглядит это так себе для федеративного обмена.

@top @admin @rf @ru @russian_mastodon раз уж такое дело, может кто знает. /api/v1/timelines/public

Это апи для получения публичного инбокса на серваке? Хочется считать тред какой то целиком и дочитывать его по мере поступления ответов.

Это апи для фронтенда, для межсерверных взаимодействий не используется.

@admin @rf @ru @russian_mastodon @3draven

@top @admin @rf @ru @russian_mastodon а есть где то апи для того что бы считать и дочитывать тред? И где межсерверное описано?

@top @admin @rf @ru @russian_mastodon ну и фронт тоже читает треды, он это делает этим эндпоинтом?

> ну и фронт тоже читает треды, он это делает этим эндпоинтом?

Фронт обращается только к своему серверу, к чужим не обращается.

> а есть где то апи для того что бы считать и дочитывать тред?

У мастодона есть межсерверное апи, через которое можно запросить ответы (у плеромы нет, например), но используется ли оно на практике я не видел.

> И где межсерверное описано?

API можно исследовать самостоятельно курлом, например:

curl -H 'Accept: application/activity+json' 'https://mtdn.anyqn.com/users/3draven/statuses/109653670409451907' | python3 -m json.tool

Смотри директиву "replies" в ответе, там ссылка на соответствующий api для получения ответов на пост.

@admin @rf @ru @russian_mastodon @3draven

@top @admin @rf @ru @russian_mastodon а, это все же активити паб. Придется читать таки.

Ну да, всё межсерверное взаимодействие происходит по протоколу AP.

А да, не очевидный момент, о котором мало где упоминают, ко многим урлам что ты видишь в адресной строке браузера на AP инстансах, можно обратиться передав хедер Accept: application/activity+json и тогда сервер вернёт ответ в формате jsonld, а не html.

@admin @rf @ru @russian_mastodon @3draven

@top @admin @rf @ru @russian_mastodon начал смотреть и кажется клиентский апи мастодона не соответсвует спеке. Буду копаться дальше. Спасибо.

@top @admin @rf @ru @russian_mastodon

Вот конкретно
mtdn.anyqn.com/inbox
mtdn.anyqn.com/users/3draven/i

Этих эндпоинтов нет. А именно они нужны что бы прочитать все ответы во всех тредах, что накопились с момента последней проверки. Что бы не читать миллион раз по каждому треду по отдельности.

Я так понимаю у мастодона вместо
mtdn.anyqn.com/inbox -> /api/v1/timelines/public
А вместо второго вообще неясно, что использовать пока. Бида.

@top @admin @rf @ru @russian_mastodon

Вот за хидер спасибо, полезный. С него зашел в
mtdn.anyqn.com/users/3draven

там эндпоинты в ответе описаны
"inbox": "mtdn.anyqn.com/users/3draven/i",
"sharedInbox": "mtdn.anyqn.com/inbox"

Но на серваке их реально нет.

inbox для входящих post запросов, а то что ты ищешь это outbox.

@admin @rf @ru @russian_mastodon @3draven

@top @admin @rf @ru @russian_mastodon

Видать я плохо читал. Мне показалось, что outbox это эндпоинт что бы получить, что написал юзер, а inbox это то, что написали ему. То есть если я хочу получить все ответы на все треды юзера мне надо именно inbox, нет? Причем мне надо получить ответы и самого юзера на его треды и других людей, на все треды юзера. То есть инкрементное развитие всех тредов с определенного момента в прошлом до текущего. Что бы периодически считывать развитие бесед.

Не, по идее в outbox только то что юзер отправил в паблик. Эндпоинт inbox принимает только post запросы (хотя может с авторизацией и отдаст то что ему предназначено, хз, это не исследовал). Можно ли как-то прямым путём получить сообщения, предназначенные другому пользователю, хоть и публичные, это хз.

@admin @rf @ru @russian_mastodon @3draven

@top @admin @rf @ru @russian_mastodon

Спасибо. Пойду копаться дальше.

Show newer

@3draven я сейчас, возможно, неожиданную вещь скажу, но прямо в первоисточнике, в спецификации протокола ActivityPub, есть несложная обзорная секция в самом начале: w3.org/TR/activitypub/#Overvie

Если там не хватает каких-то деталей или наоборот, что-то лишнее, можно спросить предметно.

@dside а, так я там и прочитал про инбокс. Нет такого эндпоинта в мастодоне.

@3draven ну как это нету, смотри, вот твой:

$ curl -H "Accept: application/activity+json" "mtdn.anyqn.com/@3draven" 2>/dev/null | jq . |
grep inbox

"inbox": "mtdn.anyqn.com/users/3draven/i",
"sharedInbox": "mtdn.anyqn.com/inbox"

@dside а попробуй его дернуть. Описание есть, а его нет.

@dside сделаю ка я им багу в гитхабе. Опять пошлют наверное, но хоть знать будут. Ну или объяснят где искать.

@3draven $ curl -XPOST -H "Content-Type: application/activity+json" "-d{}" "mtdn.anyqn.com/users/3draven/i" 2>/dev/null

Request not signed

Всё честно, сообщение я не подписал, вот инбокс его и не принял.

@dside это гет запрос. Там в обзоре, что ты прислал написано, что вы можете гетнуть свой инбокс что бы прочитать свои сообщения последние.

@3draven а, это часть client-to-server API которую Мастодон, по-моему, не реализует. Но это и не про федерацию. Федерация это server-to-server.

> Нет такого эндпоинта в мастодоне.

Да есть, просто он используется для POST запросов, а на GET запросы отвечает 404 not found.

@dside @3draven @admin @rf @ru @russian_mastodon @3draven

@top @dside @admin @rf @ru @russian_mastodon ну, можешь пользоваться тогда если есть и в гитхабе тикет можно закрыть ;)

Так эндпоинт есть, в гитхабе речь немного о другом, там про c2s в целом. То что эндпоинт не все теоретические возможности реализует это ок. Для s2s этот эндпоинт работает.

Ну и не очень понятно зачем тебе inbox для изначальной задачи, учитывая что ответ из треда тебе на инстанс всё навно не прилител, соответственно его и в инбоксе тоже не будет. Для ретривинга треда как раз больше подошёл бы эндпоинт типа https://mtdn.anyqn.com/users/3draven/statuses/109653670409451907/replies.

@dside @admin @rf @ru @russian_mastodon @3draven

@top @dside @admin @rf @ru @russian_mastodon

Изначальный вопрос был про другое. Там не прилетело, кривое и ладно.

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

А, ну это уже не про activityPub, а про конкретную реализацию API в мастодоне. Тут я пас ))

@dside @admin @rf @ru @russian_mastodon @3draven

@top @dside @admin @rf @ru @russian_mastodon

@top @dside @admin @rf @ru @russian_mastodon

Ну, жаль :) Насколько я понимаю сейчас это придется делать с костылями. Типа читать все нотификации и по ним восстанавливать треды или что-то такое. Или читать /timelines/public и по нему восстанавливать треды. Костыли в общем. Но, не первый раз, так что придумаю постепенно..видать придется.

@top @dside @admin @rf @ru @russian_mastodon

Сейчас я запилил это черезх стриминг коннекшен к серверу. Но он то работает только пока приложение запущено. А когда я выключил его, потом стартанул, надо засосасть все, что было в промежутке. И тут выяснилось, что это придется делать на костылях.

> It is part of unrealized client-server

Вместо "unrealized" лучше написать "non-implemented", realize обычно используется в значении "осознавать" )

@dside @admin @rf @ru @russian_mastodon @3draven

Пост (Note) оборачивается в активити (Create) и в виде json-объекта отправляется в инбоксы подписчиков. Сервер каждого подписчика проверяет подпись запроса и кладёт пост в локальную БД. В общем-то всё.

Когда-нибудь я допишу эту статью.

@grishka ТАм дело в том, что тут
w3.org/TR/activitypub/#Overvie

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

Roman, ты хочешь c2s что ли? Да, на него все забили. Кажется, что тебе нужно клиентское апи мастодона https://docs.joinmastodon.org/api/guidelines/

@grishka А в клиентском апи мастодона тоже нет такого.

Sign in to participate in the conversation
MustUdon

I like Twitter, but, Mastodon it is so excited! Feel free to register it is server just for fun! Usefull links https://instances.social https://www.reddit.com/r/Mastodon/comments/yugh2o/some_useful_mastodon_lists/?utm_source=share&utm_medium=web2x&context=3