Mastodon简介

post image

一.相关协议:

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 这个行为发送过去呢?这就需要知道 bobmsb.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 的账号?
可以试试 Fedifindermovetodon

除了 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,将它们展示到评论区。这位同学就是这么实践的。