Sharkey 如何导入贴子
Sharkey 是一个基于 Misskey 的 Fediverse 社交平台 fork,它提供了强大的导入功能,支持从多个平台迁移帖子(notes)。这包括 Fediverse 生态中的 Mastodon、Pleroma、Akkoma(Pleroma 分支)、Misskey、Firefish(Misskey 分支)及其各种 forks,还扩展支持 Instagram、X(前 Twitter)和 Facebook 的数据导入。这些功能通过上传 ZIP 档案或 JSON 文件实现,Sharkey 会自动解析、上传媒体并创建本地帖子。
本文将详细介绍每个平台的数据导出方法、ZIP/JSON 结构调整(基于Sharkey 导入功能源代码逻辑,确保兼容)和导入步骤。导入过程是异步的,可能需几分钟到几小时,完成后帖子会保留原时间戳,但仅本地可见(不联邦)。贴子过多时建议从小档案测试,避免服务器负载过高。
注意:Sharkey 的导入依赖 Drive 文件夹(如 “Imports” 和平台专用文件夹)。如果失败,检查日志(docker logs sharkey-web-1 | grep import
)。
1. Fediverse 平台:Mastodon、Pleroma、Akkoma 及其 Forks
这些平台使用 ActivityPub 协议,导出档案为 ZIP 格式,包含 outbox.json
(帖子列表)。Sharkey 通过检查 outbox.json
和 @context
(Pleroma/Akkoma 特定)区分类型。
数据导出
- Mastodon:登录 > 偏好设置 > 导入与导出 > “请求你的档案” > 下载你的存档。
- Pleroma/Akkoma:设置 > 管理 > 导出数据 > 下载 ZIP(包含 outbox.json)。
- Forks(如 Glitch-Soc Mastodon fork):类似 Mastodon 导出。
- 提示:选择“所有时间”,备份媒体文件夹。
ZIP 结构调整
Sharkey 期望根目录有 outbox.json
和 actor.json
。标准导出通常兼容,但如果媒体路径不对,重命名:
- 根目录:
outbox.json
(帖子数组,包含object.id
、object.inReplyTo
)。 actor.json
(用户元数据,Pleroma/Akkoma 有@context
包含 “litepub”)。- 媒体:
media_attachments/files/
(上传到 “Mastodon” 或 “Pleroma” Drive 文件夹)。 - 调整示例:
- 如果媒体在
attachments/
,重命名为media_attachments/files/
。 - ZIP 打包:
zip -r mastodon_import.zip outbox.json actor.json media_attachments/
(保留结构)。
- 如果媒体在
导入步骤
- Sharkey 设置 > 账户数据 > 所有贴子 > 导入(选择 “Mastodon” 或自动检测)。
- 确认:Sharkey 解压,重建回复链(用
recreateChain
方法,按 ID/inReplyTo)。 - 等待:媒体上传到 Drive “Mastodon”/“Pleroma” 文件夹,帖子创建(visibility 基于 to/cc)。
- 检查:时间线刷新;日志显示 “Starting note import” 和 “Import jobs created”。
兼容性:Akkoma 作为 Pleroma fork,使用相同逻辑(检查 @context
中的 litepub)。Forks 如 Soapbox (Pleroma) 通常兼容。
2. Misskey、Firefish 及其 Forks
Misskey 和 Firefish(Misskey fork)导出为 JSON 文件(notes-*.json),Sharkey 直接解析,无需 ZIP。
数据导出
- Misskey/Firefish:设置 > 导入/导出 > “导出笔记” > 下载 JSON(notes.json,包含 id、text、replyId、files)。
- Forks(如 Iceshrimp):类似 Misskey 导出。
- 提示:导出所有笔记,包含附件 URL。
文件结构调整
Sharkey 期望 JSON 数组,格式 { id, text, replyId, createdAt, files: [] }
。标准导出兼容,但如果文件 URL 无效,重命名:
- 文件名:
notes-username.json
(根目录)。 - 媒体:files 数组中的 URL(Sharkey 下载到 “Misskey” Drive 文件夹)。
- 调整示例:如果 JSON 太大,分拆为小文件(每个 <1MB),或用文本编辑器修复无效 URL。
导入步骤
- Sharkey 设置 > 账户数据 > 所有贴子 > 导入 > 上传 JSON(选择 “Misskey/Firefish”)。
- 确认:解析 notes,重建回复链(用 id/replyId)。
- 等待:下载附件到 Drive “Misskey” 文件夹,创建帖子(cw、visibility 保留)。
- 检查:时间线;日志 “Import jobs created”。
兼容性:Firefish/Iceshrimp forks 使用相同 JSON 格式,无需调整。
3. Instagram
Sharkey 支持实验性 Instagram 导入,解析帖子文本/媒体,但需特定路径。
数据导出
- Instagram 设置 > 账户中心 > 你的信息和权限 > 下载你的信息 > 选择 “帖子” > JSON 格式 > 请求下载(需 1-48 小时,邮件通知 ZIP)。
ZIP 结构调整
Sharkey 检查 instagram_live
或 instagram_ads_and_businesses
确认类型,读取 content/posts_1.json
(帖子数组)和 media/posts/
(媒体)。标准 ZIP 无这些路径,重命名:
content/posts_1.json
←your_instagram_activity/accounts/activity/posts/media.json
(帖子:title、creation_timestamp、media.uri)。media/posts/
←media/
(媒体文件夹,按 ID)。- 调整示例:
- 创建
content/
文件夹,放重命名 JSON。 - 创建
media/posts/
,复制媒体子文件夹。 - ZIP:
zip -r ig_import.zip content/ media/posts/
(添加空instagram_ads_and_businesses/
以触发检测)。
- 创建
导入步骤
- Sharkey 设置 > 账户数据 > 所有贴子 > 导入 > Instagram > 上传调整后的 ZIP。
- 确认:解压,上传媒体到 “Instagram” Drive 文件夹。
- 等待:队列
ImportIGToDbJob
处理帖子(decodeIGString 解码标题,时间戳 *1000 转为 Date)。 - 检查:时间线;日志 “createImportIGToDbJob”。
提示:多媒体帖子用 media 数组;失败常见于路径错。
4. X (前 Twitter)
Sharkey 解析 Twitter ZIP 的 data/tweets.js
,重建回复链。
数据导出
- X 设置 > 你的账户 > 下载 X 数据存档 > 请求档案(需几天,邮件 ZIP)。
ZIP 结构调整
标准 ZIP 兼容,但确保:
- 根目录:
data/tweets.js
(JS 格式推文数组)。 - 媒体:extended_entities.media URL(Sharkey 下载)。
- 调整示例:如果 JS 损坏,用编辑器修复;ZIP 打包保持
data/
结构。
导入步骤
- Sharkey 设置 > 账户数据 > 所有贴子 > 导入 > Twitter > 上传 ZIP。
- 确认:解压,解析 tweets.js(移除 window.YTD 包装)。
- 等待:重建链(id_str/in_reply_to_status_id_str),文本替换(URL/mentions 为 Markdown),媒体下载到 “Twitter” Drive。
- 检查:时间线(递归创建回复);日志 “parseTwitterFile” 和 “processTwitterDb”。
提示:视频用 mp4 变体;重复媒体跳过。
5. Facebook
Sharkey 解析 Facebook ZIP 的帖子 JSON,解码字符串。
数据导出
- Facebook 设置 > 账户中心 > 你的信息和权限 > 下载你的信息 > 选择 “帖子” > JSON > 请求下载(需 1-14 天,ZIP)。
ZIP 结构调整
Sharkey 读取 your_activity_across_facebook/posts/your_posts__check_ins__photos_and_videos_1.json
和 media/
。标准 ZIP 兼容,但重命名:
your_activity_across_facebook/posts/your_posts_1.json
←posts/your_posts_1.json
(帖子:timestamp、data.post)。your_activity_across_facebook/posts/media/
←posts/media/
(附件)。- 调整示例:创建
your_activity_across_facebook/posts/
,放重命名文件;ZIP 保持结构。
导入步骤
- Sharkey 设置 > 账户数据 > 所有贴子 > 导入 > Facebook > 上传 ZIP。
- 确认:解压,上传媒体到 “Facebook” Drive。
- 等待:队列
ImportFBToDbJob
处理(decodeFBString 解码标题,attachments.data.media)。 - 检查:时间线;日志 “processFBDb”。
提示:attachments 数组处理多媒体;check-ins/照片优先。
注意事项与故障排除
- 通用:备份数据;小档案测试(<100 帖子);重启容器刷新队列。
- 常见错误:路径不匹配(日志 “ENOENT”)—调整 ZIP;解析失败(“malformed file”)—检查 JSON 有效性。
- 性能:大档案慢(>1000 帖子),分批;媒体下载超时(config.import.downloadTimeout)。
- 源代码洞见:导入用 BullMQ 队列(process/job),媒体用 driveService.addFile,帖子用 noteCreateService.import(保留 createdAt)。
- 社区:查 Sharkey GitHub issues 或 Reddit r/fediverse 求助。
通过这些步骤,你能顺利迁移帖子到 Sharkey,享受 Fediverse !如果有叙述错误,欢迎评论指出。