
一.相关协议:
1.ActivityPub 协议:实例间的通信使用的是 ActivityPub 协议,这个协议把常见的 Social Activity 封装为不同的数据格式。
2.WebFinger协议:先说说 handle 这个概念,在 Twitter 上我们想要 @ 一个用户时,只需 @someone 就行了,因为这个用户只存在于 Twitter 的服务器上。但如果在 MSA 上想要 @ MSB 上的一个用户的话,仅仅 @someone 就不够了,需要 @someone@msb.com 才能完整表达,这个 @someone@msb.com 就是 handle(就像 email address 一样)。
接下来的问题就是,我知道了 @bob@msb.com,如何把 follow 这个行为发送过去呢?这就需要知道 bob 在 msb.com 上的 inbox URL,而获取的方法就是使用 WebFinger 协议。只需要请求这个 URL
https://msb.com/.well-known/webfinger?resource=acct:bob@msb.com
就能拿到 bob 在 msb.com 上的一些信息,就像这样:
{
"subject": "acct:bob@msb.com",
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://msb.com/users/bob"
}
]
}
这个 https://msb.com/users/bob 就是 bob 的 profile URL。但这还不够,毕竟我们要往 bob 的 inbox 去发送数据,还需要知道 bob 的 inbox URL。这个也很简单,只要在 profile URL 后面加上 .json 就行了。比如要获取 Gargron 这个用户在 mastodon.social 上的 inbox URL,可以请求 https://mastodon.social/users/Gargron.json,结果中就会有这个 inbox URL
然后把 Follow 这个行为,封装成 ActivityPub 中定义的数据格式发送到 inbox URL 就行了,对方的服务器就知道 Alice follow 了 Bob,Bob 的 Follower 列表里会增加 alice@msa.com 这一项
Bob 如果发布一条 post,该 post 的内容就会被发送到 Alice 所在的服务器 MSA。
此时 Alice 如果浏览自己的 Home Timeline,就能看到 Bob 发的这个 post。
这样,借助 WebFinger 和 ActivityPub 协议,Mastodon 实例之间就能实现关注、点赞等常见社交行为。而社交行为并非只有 Twitter 这种形式,Instagram、YouTube 等 App 也可以有社交行为,那么是否可以基于 ActivityPub 去构建此类 App 呢?当然可以,比如 Pixelfed 就是一个类似 Instagram 的服务,Peertube 则是类似 Youtube 的实现。
二.相关应用
1.Pleroma,一个模块化的微博引擎
2.Pixelfed,联合图像共享平台,可让您共享和使用媒体帖子
3.Misskey,其中包括微博和可定制的仪表板
4.PeerTube,可让您将视频上传到频道
三.Q&A
如何找到我可以加入的 Mastodon 实例?
可以使用 instances.social 或浏览 Mastodon 官方的 servers 列表。
如何 follow fediverse 里的用户?
每个 fediverse 用户都会有一个 handle(类似 email address),如 @limboy@mas.to,搜索这个 handle 就能找到对应的用户。比如我在 mas.to 实例,而梁欢在 alive.bar 实例,在 mas.to 里搜索 @lianghuan@alive.bar 就能找到他,并关注。
可以加入多个 Mastodon 实例吗?
当然可以,就像你可以 join 多个 subreddit 一样。比如在游戏相关的 Mastodon 实例可以发表游戏相关的内容,在科幻小说的 Mastodon 实例里可以聊阿西莫夫。但需要注意每次加入新的实例都需要注册一个新的账号。
如何找到我在 Twitter 关注的人他们在 Fediverse 的账号?
可以试试 Fedifinder 或 movetodon。
除了 Mastodon 自带的 UI 外,有推荐的第三方 App 么?
web 端的话推荐 elk, 由 nuxt 团队开发,品质有保障。iOS 的话 Tweetbot 团队的 Ivory 目前正在内测,可以期待下。Mastodon 官方也有一个推荐列表,可以一并看下。
我有一个 Twitter 账号,应该迁移到 Mastodon 吗?
可以先找到一个 Mastodon 实例体验下,Follow 些用户慢慢玩起来。Twitter 虽然有它自己的问题,但毕竟有那么多的活跃用户和潜在的感兴趣内容,这些独特的价值短时间内还是很难被取代的。
可以把 Tweet 内容同步到 Mastodon 吗?
如果同时在使用 Twitter 和 Mastodon,同样的内容两边都发一遍还是会有点麻烦,可以试试 moa.party 这个服务,绑定 Twitter 和 Mastodon 账号后,就可以自动同步了(没有试过,不保证效果)。
我应该建一个自己的 Mastodon 实例吗?
如果你在一个组织或团队,且内容是可以公开的,可以考虑建一个,这样可以方便了解大家都在做什么,也能产生互动,内容沉淀和传播上也会比「群」要好。比如 ThoughtWorks Infra 就建了一个 Mastodon 实例:toot.thoughtworks.com。
这篇文章阐述了为什么你应该为自己的 Organization 建一个 Mastodon。
Mastodon 和 Twitter 在产品层面有哪些差异?
Mastodon 没有广告。
Mastodon 默认可以发表 500 个字(管理员可以自行设置)。
Tweet 在 Mastodon 叫 Toot,Retweet 在 Mastodon 叫 Boost。
Mastodon 可以编辑 Toot!(3.5 版本加的这个功能)
Mastodon 的 Timeline 没有算法「干扰」。
Mastodon 没有 Quote Tweet 功能。
Mastodon 没有 Full Text Search 功能,但可以搜 hashtag,如
#book。Mastodon 里的 Favorite 不会像 Twitter 的 Like 一样推送给 Follower。
Mastodon 的 Toot 可见范围有 4 个 Level,Tweet 只有 Everyone 和 Circle 两个 Level。
direct: 只有提及的用户才能看到这条消息,就像 Twitter 的 Direct Message。
followers-only: 只有关注你的用户才能看到这条消息。
unlisted: 不会出现在 Local 或 Federated Timeline,但是关注你的用户或点击你主页依旧能看到。
public: 完全公开。
Mastodon 还有哪些非常规操作?
可以用来作为评论系统。在 Mastodon 上发布文章链接,得到 toot id,然后通过 API 请求该 toot 的 replies,将它们展示到评论区。这位同学就是这么实践的。
