Notion 文章一键同步到 Twitter/X Article(Premium+ 长文,图文混排)。
bash
# 环境变量(必须)
export AUTH_TOKEN="<twitter auth_token cookie>"
export CT0="<twitter ct0 cookie>"
export HTTPS_PROXY="http://127.0.0.1:7897"
# Notion 文章 → Twitter 草稿(一条命令搞定)
node twitter-article.js notion-to-article --notion-key <key> --page-id <id>
# 或者分步操作
node twitter-article.js upload-media --file image.png # 上传图片
node twitter-article.js create --title "标题" --file a.md # 创建含内容的草稿
node twitter-article.js update-content --id <id> --file a.md # 更新已有草稿内容
node twitter-article.js update-cover --id <id> --media-id <m> # 设封面
node twitter-article.js publish --id <id> # 发布
命令说明list列出所有草稿create-draft --title "xxx"创建空草稿create --title "xxx" --file a.md创建并写入内容update-content --id <id> --file a.md更新内容(.md 或 .json)update-title --id <id> --title "xxx"更新标题update-cover --id <id> --media-id <mid>设封面upload-media --file image.png上传图片 → media_idget --id <id>查看文章详情publish --id <id>发布delete --id <id>删除
AUTH_TOKEN + CT0(从浏览器获取)HTTPS_PROXY(国内需要)Twitter Article 使用修改版 Draft.js 格式。发送用 snake_case,返回用 camelCase。
json
{
"data": {},
"text": "段落文字",
"key": "a1b2c",
"type": "unstyled",
"entity_ranges": [],
"inline_style_ranges": []
}
支持的 type: unstyled header-one header-two blockquote unordered-list-item ordered-list-item atomic
不支持: header-three header-four code-block(服务端 500)
Atomic block + MEDIA entity:
json
// entity_map 条目
{
"key": "0",
"value": {
"type": "MEDIA",
"mutability": "Immutable",
"data": {
"entity_key": "<uuid-v4>",
"media_items": [{
"local_media_id": 1,
"media_category": "DraftTweetImage",
"media_id": "<media_id_string>"
}]
}
}
}
// 对应的 atomic block
{
"data": {},
"text": " ",
"key": "xxx",
"type": "atomic",
"entity_ranges": [{"key": 0, "offset": 0, "length": 1}],
"inline_style_ranges": []
}
Mutation文章ID变量名其他关键变量DraftCreate(无)content_state, title, plaintext, word_countUpdateContentarticle_entitycontent_state, plaintext, word_countUpdateTitlearticleEntityIdtitleUpdateCoverMediaarticleEntityIdcoverMedia: {media_id, media_category}Delete/PublisharticleEntityId(无)
⚠️ UpdateContent 用 article_entity,其他用 articleEntityId!
media_id_stringcoverMedia: {media_id, media_category: "DraftTweetImage"},不是平铺的 media_idtext
skills/twitter-article/
├── SKILL.md # 本文档
└── twitter-article.js # CLI 工具(所有功能)