通过 API 自动发布到 Bluesky 和 Mastodon
上次我们学习了如何使用带有免费 Glitch 网站的域名来验证我们的帐户——这次让我们设置一个简单的应用程序,使用他们的 API 将一些自动内容交叉发布到 Bluesky 和 Mastodon。
我们将为两个平台设置开发者凭证,将它们放入 Glitch,并发布一些包含随机表情符号的愚蠢文本。我们还将发现一个发布链接和图像的更复杂的示例,以防您想继续构建!
重新混合 Glitch 项目
我们正在使用 Glitch 项目,其中已经设置了许多代码,因此请继续**重新混合**它以获取您自己的副本:
该应用程序使用 Node.js 和 Axios 连接到 Bluesky 和 Mastodon API,但如果您不熟悉这些框架,请不要担心,您将能够轻松输入您的详细信息并发布!
如果您愿意,您可以花一点时间浏览该项目。`README` 中也有说明。我们将主要处理这些文件:
我们默认发布的内容位于“src/client.js”中的“postTxt”变量中,因此如果您想发布不同内容,请更改它 - 代码最初仅支持纯文本内容,但您会在下面找到有关发布媒体的详细信息。

这些示例帖子演示了默认内容:
获取您的开发人员凭证
要从官方 Bluesky 和 Mastodon 应用之外的某个地方发帖,我们将使用 API。API 是平台提供的接口,允许您使用代码访问其功能。为了获得此访问权限,我们需要在两个平台上进行身份验证 - 这可以确保我们使用的应用和网站上的用户数据安全。
Bluesky 应用程序设置
对于 Bluesky,我们需要为要发布的帐户设置应用密码。在您的 Bluesky 帐户中,导航至 **设置** > **隐私和安全** > **应用密码**:


Mastodon 应用程序设置
对于 Mastodon,您需要一个令牌来验证您的请求。登录您的帐户(您需要在浏览器中,而不是移动应用程序中)。导航到 **首选项** > **开发**,然后单击 **新应用程序**。


💡 您还可以在您的 Mastodon 个人资料中添加您的 Glitch 网站作为经过验证的链接——在 `index.html` 中包含一个指向 Mastodon 帐户的链接,并在锚点处带有 `rel="me"`。


在您的 Mastodon 帐户中,最好在 **设置** > **个人资料** 中检查 **这是一个机器人帐户**。
邮政!
一切就绪,您就可以开始发帖了!您的 Glitch remix 包含按计划运行发帖的代码,但您也可以手动发帖。在预览中,点击地址栏并输入以下任一地址:
打开**日志**来查找任何详细信息或错误。

检查您的帐户以查找帖子。


查看代码
Bluesky 和 Mastodon 的代码略有不同,因此我们将其分解,以便您可以调整并在其他地方使用它。我们将探索 API 连接的“src/client.js”。
对于 Bluesky,我们需要启动一个会话并保存令牌:
const session = await bskyClient.request({ url: "/com.atproto.server.createSession", method: "post", data: { identifier: process.env.HANDLE, password: process.env.APP_PASSWORD, }, headers: { "Content-Type": "application/json", }, }); bskyToken = session.data.accessJwt;
然后,我们可以在后续请求中使用该令牌。接下来我们发布帖子:
const post = await bskyClient.request({ url: "/com.atproto.repo.createRecord", method: "post", data: { repo: process.env.HANDLE, collection: "app.bsky.feed.post", record: { $type: "app.bsky.feed.post", text: postText, createdAt: date, }, }, headers: { "Content-Type": "application/json", Authorization: "Bearer " + bskyToken, }, });
如果您需要的不仅仅是纯文本,那么情况会稍微复杂一些——要包含链接,您需要方面,要包含媒体,您需要嵌入。您可以在 **~wtf-poster** 中找到两者的示例。
对于 Mastodon 我们只需要一个请求:
let data = { status: postText, }; const postResponse = await mastoClient.request({ url: "/v1/statuses", method: "post", data: data, headers: { "Content-Type": "application/json", Authorization: "Bearer " + mastoToken, }, });
Mastodon 会自动处理链接,但如果您想上传图片,则需要更多处理 - 媒体端点允许您添加和链接到已上传的文件。请查看 **~wtf-poster** 以获取示例。
安排帖子
在您的 Glitch 项目 `server.js` 文件中,您会在第 25 行左右找到调度代码。如果您希望您的帐户按照计划自动发布,请取消注释该代码 - 您可以调整时间!
**🪩🛼🌈 在 Glitch 论坛分享你酷炫的自动海报!**