コレクターモジュール
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 抽出
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
| Cookie名 | 用途 |
|---|---|
auth_token | セッション認証トークン |
ct0 | CSRF トークン(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 (?, ...)