--- title: "Bluesky 嵌入" description: "服务器端渲染的 Bluesky 嵌入,零客户端 API 调用。" canonical_url: "https://nuxt-scripts.zhcndoc.com/scripts/bluesky-embed" last_updated: "2026-05-22T14:11:57.090Z" --- [Bluesky](https://bsky.app) 是一个基于 AT Protocol 构建的去中心化社交媒体平台。 Nuxt Scripts 提供了一个 [``](/scripts/bluesky-embed) 组件,它在服务器端获取帖子数据,并通过插槽暴露数据,完全支持样式自定义。所有数据都通过你的服务器代理 — 无需客户端对 Bluesky 进行 API 调用。 This script's proxy endpoints use [HMAC URL signing](/docs/guides/first-party#proxy-endpoint-security) when you configure a `NUXT_SCRIPTS_PROXY_SECRET`. See the [security guide](/docs/guides/first-party#proxy-endpoint-security) for setup instructions. This registers the required server API routes (`/_scripts/embed/bluesky` and `/_scripts/embed/bluesky-image`) that handle fetching post data and proxying images. ## [``](/scripts/bluesky-embed) [``](/scripts/bluesky-embed) 组件是一个无头组件,特点: - 通过 Bluesky 公共 API(AT Protocol)在服务器端获取帖子数据 - 所有图片通过你的服务器代理,保护隐私 - 将富文本中的特性(链接、提及、标签)转换为 HTML - 通过作用域插槽暴露帖子数据,支持自定义渲染 - 缓存响应 10 分钟 - 遵守作者选择退出机制(`!no-unauthenticated` 标签) ### 示例 ```vue [基础用法] ``` ```vue [Bluesky 卡片(Tailwind)] ``` ```vue [极简] ``` ### 插槽 Props 默认插槽接收以下属性: ```ts interface SlotProps { // 原始数据 post: BlueskyEmbedPostData // 作者信息 displayName: string handle: string avatar: string // 代理后的 URL avatarOriginal: string // 原始 Bluesky CDN URL isVerified: boolean // 帖子内容 text: string // 纯文本 richText: string // 含链接、提及和标签的 HTML langs?: string[] // 语言代码 // 格式化数值 datetime: string // "12:47 PM · 2024 年 2 月 5 日" createdAt: Date likes: number likesFormatted: string // "1.2K" reposts: number repostsFormatted: string // "234" replies: number repliesFormatted: string // "42" quotes: number quotesFormatted: string // "12" // 媒体 images?: Array<{ thumb: string // 代理缩略图 URL fullsize: string // 代理全尺寸 URL alt: string aspectRatio?: { width: number, height: number } }> externalEmbed?: { uri: string title: string description: string thumb?: string // 代理 URL } // 链接 postUrl: string authorUrl: string // 辅助函数 proxyImage: (url: string) => string } ``` ### 命名插槽
插槽 描述
default 主内容,使用插槽属性渲染
loading 数据加载中显示
error 获取失败时显示,接收 { error }
## 工作原理 1. **服务器端获取**:服务器在 SSR 期间从 `public.api.bsky.app`(AT 协议)获取帖子数据 2. **解析用户名**:服务器将用户名解析为 DID,以便可靠地查找帖子 3. **图片代理**:服务器重写所有图片,通过 `/_scripts/embed/bluesky-image` 代理 4. **富文本**:组件将 Bluesky 的 facets(链接、提及、标签)转换为 HTML 5. **缓存**:服务器缓存响应 10 分钟 6. **无客户端 API 调用**:用户浏览器永远不会直接联系 Bluesky ## 隐私优势 - 不加载第三方 JavaScript - Bluesky 不设置 Cookie - 浏览器与 Bluesky 无直接通信 - 用户 IP 地址不与 Bluesky 共享 - 所有内容均从您的域名提供 ## 作者选择退出 该组件尊重 Bluesky 的 `!no-unauthenticated` 标签。如果帖子作者选择退出外部嵌入,API 会返回 403 错误,组件会显示错误插槽。