Skip to content

sf-kosen/x-stream-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

X Stream Saver

X (x.com / twitter.com) で実際に表示されたツイートやメディアを記録し、サイドパネルのフィードとして表示する Chrome 拡張 (Manifest V3) です。データは chrome.storage.local にのみ保存されます。

特徴

  • IntersectionObserver による表示判定 + 短時間の視認ゲート
  • 短期履歴: TTL 10 分 / 最大 500 件
  • フィルタ: All / Tweets / Media
  • ローカル保存のみ (外部送信なし)
  • サイドパネル UI で素早く確認

動作概要

  1. コンテンツスクリプトが新しいツイート要素を監視し、表示されたら抽出します。
  2. ツイート本文、投稿者、時間、画像、動画の有無を取得します。
  3. 取得結果をバッチ化してバックグラウンドに送信します。
  4. バックグラウンドでマージ/重複排除し、TTL と上限件数を適用します。
  5. サイドパネルが feed_log を読み込み、カード表示します。

インストール (展開版)

  1. chrome://extensions を開きます。
  2. Developer mode を有効にします。
  3. "Load unpacked" をクリックし、本リポジトリを選択します。

使い方

  1. https://x.com または https://twitter.com を開きます。
  2. タイムラインをスクロールします。
  3. 拡張機能のアクションからサイドパネルを開きます。
  4. フィルタで All / Tweets / Media を切り替えます。

設定

  • src/background.js
    • TTL_MS (10 分)
    • MAX_ITEMS (500)
    • STORAGE_KEY (feed_log)
  • src/content.js
    • IO_THRESHOLD
    • MIN_VISIBLE_MS
    • FLUSH_INTERVAL_MS
    • FLUSH_MAX_ITEMS
    • KEY_COOLDOWN_MS

テストランナー

test/test_runner.html をブラウザで開くと、モックのツイート DOM に対して content script が動作します。chrome.runtime.sendMessage をモックし、送信バッチを画面に表示します。

データモデル

chrome.storage.localfeed_log に保存されます:

type LogItem = {
  key: string;
  type: "tweet" | "image" | "video";
  url: string;
  tweetUrl?: string;
  text?: string;
  author?: string;
  timeISO?: string;
  seenAt: number;
  source?: { pageUrl?: string };
};

制限事項

  • 動画はプレースホルダーで、実体 URL は取得しません。
  • X の data-testid 依存のため、DOM 変更で取得できなくなる可能性があります。
  • manifest.json が参照する icon16.png, icon48.png, icon128.png は未同梱です。

構成

.
├─ manifest.json
├─ src/        # content/background scripts
├─ feed/       # Side Panel UI
└─ test/       # test runner

ライセンス

MIT License. 詳細は LICENSE を参照してください。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published