Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SNS Archiver

汎用SNSアーカイバー Chrome拡張機能。ログイン済みの自分のアカウントで見えているタイムライン・プロフィール・投稿を、統一スキーマでローカルに保存し、Claude Codeに読ませやすい形式 (JSON / Markdown) でエクスポートする。

対応プラットフォーム

Platform URL
X (Twitter) x.com / twitter.com
Instagram www.instagram.com
Threads www.threads.net
Facebook www.facebook.com
TikTok www.tiktok.com
LinkedIn www.linkedin.com
Reddit www.reddit.com / old.reddit.com
YouTube www.youtube.com (動画詳細+コメント / 検索 / チャンネル)
Bluesky bsky.app
Mastodon 全インスタンス自動判定
note note.com
はてブ b.hatena.ne.jp
その他 OGP + 本文 + リンク見出しを汎用抽出

主な機能

  1. ワンクリックキャプチャ — ポップアップの「📥 このページをキャプチャ」でオートスクロール後に全件取得し JSON+Markdown で保存
  2. 監視モード — 「👁 監視開始」で MutationObserver を起動、ユーザーが手動スクロール中に追加投稿を蓄積、「⏹ 停止+保存」でまとめて吐き出し
  3. 統一スキーマ — どのプラットフォームでも {id, type, author, text, posted_at, media[], stats, url} の共通フォーマット。横断分析しやすい
  4. 2形式エクスポート — JSON (機械可読 / Claudeへの構造化入力) + Markdown (Claudeに直接読ませやすい)
  5. 保存先カスタマイズ — 設定画面で ~/Downloads/<dir>/ のサブディレクトリ指定
  6. 汎用フォールバック — 未対応サイトでも OGP / 本文 / 見出しリンクをベストエフォートで抽出

インストール

# 1. chrome://extensions/ を開く
# 2. 右上「デベロッパーモード」ON
# 3. 「パッケージ化されていない拡張機能を読み込む」
# 4. ~/projects/sns-archiver/ を選択

使い方

基本フロー

  1. 任意のSNSページ(自分のアカウントでログイン済み)を開く
  2. ツールバーのアイコンをクリック → ポップアップ表示
  3. 「📥 このページをキャプチャ」 をクリック
  4. オートスクロールで遅延読み込みコンテンツを取得(10〜30秒)
  5. ~/Downloads/sns-archive/<platform>_<timestamp>.json.md が保存される

監視モード(タイムライン無限スクロール対応)

通常モードは1回のスクロールで終わるので、大量の投稿を取りたい場合は監視モード推奨:

  1. 「👁 監視開始」クリック
  2. 自分でゆっくりスクロール(X/IGはスクロールバッファを切るので一気に降りると古い投稿がDOMから消える)
  3. 「⏹ 監視停止+保存」で蓄積した全件を保存

Claude Code に渡す

# Claude Code起動して保存ファイルを指定
claude

# Claude側でこう言う
> ~/Downloads/sns-archive/x_2026-05-19_163000.json を読んで、
> 直近のポストから今フォロワーが何に興味持ってるか分析して

JSON は構造化されているのでフィルタリング・集計しやすい。Markdown は概観把握向き。

設定変更

ポップアップ下部の「⚙ 設定を開く」または chrome://extensions/ → 拡張機能の詳細 → 「拡張機能のオプション」

  • 保存先サブディレクトリ: デフォルト sns-archive
  • 保存フォーマット: JSON / Markdown 個別ON/OFF

出力スキーマ

{
  "schema_version": "1.0",
  "platform": "x",
  "captured_at": "2026-05-19T16:30:00.000Z",
  "source_url": "https://x.com/home",
  "page_title": "Home / X",
  "item_count": 42,
  "items": [
    {
      "id": "1234567890",
      "type": "post",
      "author": {
        "handle": "someone",
        "name": "Someone",
        "url": "https://x.com/someone"
      },
      "text": "投稿本文",
      "posted_at": "2026-05-19T15:00:00.000Z",
      "media": [
        { "url": "https://...", "type": "image", "alt": "" }
      ],
      "stats": {
        "likes": 123,
        "reposts": 45,
        "replies": 6,
        "views": 12000
      },
      "url": "https://x.com/someone/status/1234567890",
      "reply_to": null,
      "platform_extras": {}
    }
  ]
}

各プラットフォームの想定ユースケース

  • X: タイムライン / 検索結果 / プロフィール / 単発ポスト詳細
  • Instagram: フィード / プロフィールグリッド / ハッシュタグページ
  • Threads: タイムライン / プロフィール / ポスト詳細
  • YouTube: 動画詳細→本体メタ+コメント、検索結果→動画一覧、チャンネル→動画一覧
  • Reddit: サブレディット一覧 / Front Page / ユーザーページ
  • TikTok: For You / プロフィール / 検索結果
  • note: 記事詳細 → 本文取得、一覧ページ → タイトル一覧

注意事項

  • 規約: 自分が閲覧できる範囲をローカルに保存する個人利用の範囲は概ねグレー。自動操作・再配布・大量取得・他人のDM等は明確に規約違反
  • DOM変化: 各SNSのDOM構造は頻繁に変わる。動かなくなったら該当 content/adapter-*.js のセレクタを修正
  • レート的な注意: オートスクロールはサイトに負荷をかける。common.jsautoScroll({ maxScrolls, delay }) でチューニング可
  • media URL: 期限切れになるURLが多い(特にX/IG)。重要な画像は別途ダウンロードしておく

ファイル構成

sns-archiver/
├── manifest.json          Manifest V3 定義
├── background.js          service worker(保存処理)
├── popup.html / .js       ツールバーポップアップ
├── options.html / .js     設定画面
├── content/
│   ├── common.js          共通ユーティリティ + adapterレジストリ
│   ├── adapter-*.js       プラットフォーム別アダプタ
│   ├── adapter-generic.js OGPフォールバック
│   └── dispatcher.js      メッセージ受信・autoScroll・MutationObserver
├── icons/                 PNGアイコン
└── README.md

拡張のしかた

新プラットフォーム対応するときは content/adapter-<name>.js を新規作成:

(() => {
  const SA = window.__snsArchiver;
  const U = SA.util;
  SA.register({
    name: 'mysite',
    match(host) { return host === 'mysite.example'; },
    async capture() {
      await U.autoScroll();
      const items = U.qsa(document, '.post').map(p => ({
        id: ..., type: 'post', author: {...}, text: ..., url: ...
      }));
      return U.buildPayload('mysite', items);
    }
  });
})();

そして manifest.jsoncontent_scripts.js 配列に追加すれば完了。

About

Generic SNS archiver Chrome extension — export your own timelines, profiles and posts from X, Instagram, Threads, Reddit and more to local JSON / Markdown.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages