通过 API 自动发布到 Bluesky 和 ​​Mastodon

上次我们学习了如何使用带有免费 Glitch 网站的域名来验证我们的帐户——这次让我们设置一个简单的应用程序,使用他们的 API 将一些自动内容交叉发布到 Bluesky 和 ​​Mastodon。

我们将为两个平台设置开发者凭证,将它们放入 Glitch,并发布一些包含随机表情符号的愚蠢文本。我们还将发现一个发布链接和图像的更复杂的示例,以防您想继续构建!

重新混合 Glitch 项目

我们正在使用 Glitch 项目,其中已经设置了许多代码,因此请继续**重新混合**它以获取您自己的副本:

  • ~社交海报
  • 该应用程序使用 Node.js 和 Axios 连接到 Bluesky 和 ​​Mastodon API,但如果您不熟悉这些框架,请不要担心,您将能够轻松输入您的详细信息并发布!

    如果您愿意,您可以花一点时间浏览该项目。`README` 中也有说明。我们将主要处理这些文件:

  • .env,其中包含我们的凭证
  • src/client.js 我们用来连接 API
  • server.js,我们在其中调用客户端方法并管理调度
  • 我们默认发布的内容位于“src/client.js”中的“postTxt”变量中,因此如果您想发布不同内容,请更改它 - 代码最初仅支持纯文本内容,但您会在下面找到有关发布媒体的详细信息。

    The default text content in a variable

    这些示例帖子演示了默认内容:

  • https://mastodon.social/@suewtf/113644869914130623
  • https://bsky.app/profile/www.sue.wtf/post/3ld6oulfqg72z
  • 获取您的开发人员凭证

    要从官方 Bluesky 和 ​​Mastodon 应用之外的某个地方发帖,我们将使用 API。API 是平台提供的接口,允许您使用代码访问其功能。为了获得此访问权限,我们需要在两个平台上进行身份验证 - 这可以确保我们使用的应用和网站上的用户数据安全。

    Bluesky 应用程序设置

    对于 Bluesky,我们需要为要发布的帐户设置应用密码。在您的 Bluesky 帐户中,导航至 **设置** > **隐私和安全** > **应用密码**:

    Bluesky app password screen
  • 单击“添加应用密码”
  • 输入应用密码的名称,例如“Glitch poster”
  • 复制密码并点击完成
  • 将密码粘贴到 .env 文件中的 Glitch remix 中,作为 APP_PASSWORD 变量
  • 在 .env 中,输入要发布到的 Bluesky 帐户的句柄
  • Glitch env with app password and handle

    Mastodon 应用程序设置

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

  • 给你的应用程序起个名字,比如“Glitch poster”
  • 对于应用程序网站,请包含您的 Glitch 网站的 URL,以 .glitch.me 结尾
  • 将重定向 URI 保留为默认内容
  • 对于范围,如果您希望能够发布图像,请确保检查 write:statuses 和 write:media
  • 提交申请
  • 复制您的访问令牌的值
  • 将其粘贴到你的 Glitch 项目 .env 中作为 MASTODON_TOKEN 变量
  • Mastodon appMastodon scopes

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

    My verified linkVerified in Mastodon

    在您的 Mastodon 帐户中,最好在 **设置** > **个人资料** 中检查 **这是一个机器人帐户**。

    邮政!

    一切就绪,您就可以开始发帖了!您的 Glitch remix 包含按计划运行发帖的代码,但您也可以手动发帖。在预览中,点击地址栏并输入以下任一地址:

  • postBsky 仅发布到 Bluesky
  • postMasto 仅适用于 Mastodon
  • 两者的 postAll
  • 打开**日志**来查找任何详细信息或错误。

    Post output

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

    Bluesky postMasto post

    查看代码

    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 行左右找到调度代码。如果您希望您的帐户按照计划自动发布,请取消注释该代码 - 您可以调整时间!

  • 准备好实现更多自动化了吗?从 ~wtf-poster 中混音或复制,以发布来自第三方 API 的链接、图像和内容……🎢🎡🛸
  • **🪩🛼🌈 在 Glitch 论坛分享你酷炫的自动海报!**