Skip to content

コレクターモジュール

X (Twitter) のブックマークを自動収集するモジュールです。API契約なし・課金ゼロで動作します。

概要

mermaid
flowchart LR
    Chrome["Chrome\nCookies DB"] -->|AES-128-CBC\n復号| Extract["Cookie\nExtractor"]
    Extract -->|auth_token\n+ ct0| Keychain["OS\nKeychain"]
    Keychain --> Fetcher["GraphQL\nFetcher"]
    Fetcher -->|paginated\nfetch| X["X API"]
    X --> Dedup["重複\n排除"]
    Dedup --> DB["SQLite"]

Chrome の Cookie データベースからX の認証情報を取得します。

対応ブラウザ

ブラウザCookie DB パス (macOS)
Chrome~/Library/Application Support/Google/Chrome/Default/Cookies
Chromium~/Library/Application Support/Chromium/Default/Cookies
Brave~/Library/Application Support/BraveSoftware/Brave-Browser/Default/Cookies

復号フロー

mermaid
sequenceDiagram
    participant Script
    participant Keychain as OS Keychain
    participant ChromeDB as Chrome Cookies DB

    Script->>Keychain: Chrome Safe Storage Key 取得
    Keychain-->>Script: encryption_key
    Script->>ChromeDB: SELECT encrypted_value WHERE host = '.x.com'
    ChromeDB-->>Script: encrypted cookies
    Script->>Script: AES-128-CBC 復号 (PBKDF2)
    Script-->>Script: auth_token, ct0
    Script->>Keychain: 認証情報を保存
Cookie名用途
auth_tokenセッション認証トークン
ct0CSRF トークン(X-Csrf-Token ヘッダーに使用)

X GraphQL API

X の内部 GraphQL API を使用してブックマークを取得します。公式 API 契約は不要です。

エンドポイント

POST https://x.com/i/api/graphql/{queryId}/Bookmarks

必須ヘッダー

http
Authorization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs=...
Cookie: auth_token={auth_token}; ct0={ct0}
X-Csrf-Token: {ct0}
Content-Type: application/json

ページネーション

カーソルベースのページネーションで全ブックマークを取得します:

mermaid
flowchart TD
    A[初回リクエスト] --> B{レスポンスに\ncursor あり?}
    B -->|Yes| C[cursor パラメータ付きで\n次ページ取得]
    C --> B
    B -->|No| D[取得完了]

重複排除

tweetId をキーとして重複を排除します。既存のブックマークは更新せず、新規のみ挿入します。

sql
-- tweetId がユニークキー
INSERT OR IGNORE INTO Bookmark (tweetId, ...) VALUES (?, ...)