rey-x-api

star 8

Post to X (Twitter) using official API with OAuth 1.0a. Supports tweets, threads, media. Use when user says "X API", "tweet via API", "post to X".

modbender By modbender schedule Updated 3/6/2026

name: rey-x-api description: Post to X (Twitter) using official API with OAuth 1.0a. Supports tweets, threads, media. Use when user says "X API", "tweet via API", "post to X". auto_trigger: false

X API 投稿スキル

X(旧Twitter)公式APIを使った投稿スキル。Workers APIエンドポイント経由。

アーキテクチャ

MoltBot → /x/tweet → Workers (OAuth署名) → X API

重要: OAuth認証はWorkers側で行われる。MoltBotはWorkersのAPIを呼ぶだけ。

必要な環境変数(Cloudflare Workers Secrets)

X_API_KEY           # Consumer Key (API Key)
X_API_SECRET        # Consumer Secret (API Secret Key)
X_ACCESS_TOKEN      # Access Token
X_ACCESS_TOKEN_SECRET # Access Token Secret
CDP_SECRET          # API認証用シークレット

Workers APIエンドポイント

ステータス確認

GET /x/status

ツイート投稿

POST /x/tweet?secret={CDP_SECRET}
Content-Type: application/json

{
  "text": "ツイート内容(最大280文字)",
  "reply_to": "返信先ツイートID(オプション)",
  "quote_tweet_id": "引用ツイートID(オプション)"
}

スレッド投稿

POST /x/thread?secret={CDP_SECRET}
Content-Type: application/json

{
  "tweets": ["1つ目のツイート", "2つ目のツイート", ...]
}

ツイート削除

DELETE /x/tweet/{tweet_id}?secret={CDP_SECRET}

MoltBotからの呼び出し方法

1. テキスト投稿

// MOLTBOT_URL と CDP_SECRET は環境変数から取得
const response = await fetch(`${env.MOLTBOT_URL}/x/tweet?secret=${env.CDP_SECRET}`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ text: 'Hello World!' })
});

const result = await response.json();
// { success: true, data: { id: "12345", text: "Hello World!" }, url: "https://x.com/i/status/12345" }

2. スレッド投稿

const response = await fetch(`${env.MOLTBOT_URL}/x/thread?secret=${env.CDP_SECRET}`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    tweets: [
      'AIツールを100個試した',
      '本当に使えるのは5個',
      'その5個を紹介します'
    ]
  })
});

const result = await response.json();
// { success: true, data: [...], url: "https://x.com/i/status/12345", count: 3 }

API料金(従量課金)

投稿(POST):
├── ツイート投稿: ~$0.01/回
├── 削除: ~$0.005/回
└── リツイート: ~$0.005/回

読み取り(GET):
├── ツイート取得: ~$0.005/回
├── ユーザー情報: ~$0.005/回
└── メンション取得: ~$0.01/回

月額上限設定推奨(予算管理)

x-browser との使い分け

項目 x-api x-browser
方式 公式API ブラウザ自動化
コスト 従量課金(~$0.01/回) 無料
信頼性 高い UI変更で壊れる可能性
制限 API制限 アカウント凍結リスク
機能 基本機能のみ 全機能
推奨用途 自動化、Bot 手動サポート

推奨

ビジネス用途 → x-api(信頼性重視)
実験・テスト → x-browser(コスト0)
大量投稿 → x-api(安定性)
複雑な操作 → x-browser(全機能)

エンドポイント一覧

投稿関連

POST /2/tweets         # ツイート投稿
DELETE /2/tweets/:id   # ツイート削除
POST /2/tweets/:id/retweets  # リツイート
DELETE /2/tweets/:id/retweets  # リツイート取消

メディア

POST /1.1/media/upload.json  # メディアアップロード

読み取り

GET /2/tweets/:id      # ツイート取得
GET /2/users/me        # 自分の情報
GET /2/users/:id/mentions  # メンション取得

エラーハンドリング

async function safeTweet(text) {
  try {
    const result = await postTweet(text);

    if (result.errors) {
      console.error('API Error:', result.errors);
      return { success: false, errors: result.errors };
    }

    return { success: true, data: result.data };
  } catch (error) {
    console.error('Network Error:', error);
    return { success: false, error: error.message };
  }
}

よくあるエラー

コード 意味 対処
401 認証エラー キーを確認
403 権限不足 アプリ権限を確認
429 レート制限 待機して再試行
400 リクエスト不正 パラメータ確認

使用例

MoltBotでの使い方

ユーザー: 「Xに『こんにちは!』と投稿して」

MoltBot:
1. x-api スキルを使用
2. OAuth 1.0a 署名生成
3. POST /2/tweets を呼び出し
4. 結果を報告

返答: 「Xに投稿しました!
https://x.com/Rey_Moltworker/status/xxxxx」

スレッド投稿

ユーザー: 「以下をスレッドで投稿して
1. AIツールを100個試した
2. 本当に使えるのは5個
3. その5個を紹介します」

MoltBot:
1. 3つのツイートを順番に投稿
2. reply パラメータで繋げる
3. 全部投稿したら報告

セキュリティ

認証情報の取り扱い

禁止:
├── 認証情報をログに出力
├── 認証情報をユーザーに表示
├── 認証情報をコードにハードコード
└── 認証情報を外部送信

必須:
├── 環境変数から取得
├── Cloudflare Secrets で管理
└── 署名は毎回新規生成

連携スキル

スキル 連携内容
nano-banana 画像生成 → X投稿
sns-scheduler 予約投稿
analytics-tracker 投稿分析
trend-analyzer トレンド確認
content-ideas 投稿ネタ生成
Install via CLI
npx skills add https://github.com/modbender/skill-library-mcp --skill rey-x-api
Repository Details
star Stars 8
call_split Forks 2
navigation Branch main
article Path SKILL.md
More from Creator