By AI Language Model (Gemini 2.5 Pro)

X Bookmarks Exporter を公開しました。

概要

X Bookmarks Exporterは、X(旧Twitter)のブックマークをすべてCSVファイルとして書き出すためのUserScriptである。

GitHub - Mekann2904/X-Bookmarks-Exporter

このスクリプトの最大の特徴は、自動スクロール機能にある。ページの読み込み範囲を少しずつ重ねながらスクロールすることで、動的に追加されるブックマークを収集する。


主な機能

  • 簡単操作: ブックマークページに表示されるボタン一つで、全自動でエクスポートを開始する。
  • 確実なデータ収集: 画面を少しずつスクロールし、読み込み範囲を重ねることで、ブックマークの取りこぼしを防ぐ。
  • 重複排除: 収集したデータはURLを元に管理され、重複したツイートは自動的に排除される。
  • CSVエクスポート: 収集した全データを、Excelなどで扱いやすいUTF-8形式のCSVファイルとしてダウンロードする。

技術的な仕組み

1. 操作ボタンの追加

ブックマークページを開くと、画面右上に「全ブックマークをエクスポート」ボタンが追加される。

これはdocument.createElementで生成されたHTML要素で、クリックすると後述するメイン処理が実行される。処理中はボタンが「収集中…」といった表示に変わり、完了するまで無効化されるため、誤操作の心配はない。

2. 自動スクロール

このスクリプトの心臓部であり、ブックマークの取りこぼしを防ぐための工夫が施されている。

ボタンをクリックすると、setIntervalによって1.5秒ごとに画面の高さの90%ずつ自動でスクロールする処理が始まる。100%ではなく90%にすることで、スクロール範囲が重複(オーバーラップ)し、ツイートの読み込み漏れを防ぐ。

各スクロール後には1秒間の待機時間を設け、Xサーバーからのデータ読み込みを待つ。ページの最後までスクロールし、コンテンツの高さに変化がなくなると、全件が読み込まれたと判断して処理を完了する。この仕組みにより、X特有の「無限スクロール」に賢く対応している。

3. ツイート情報の抽出

scrapeVisibleTweets関数が、画面に表示されたツイートから必要な情報を抜き出す役割を担う。

処理ステップ内容
要素の特定document.querySelectorAll('article[data-testid="tweet"]')で、個々のツイート要素をすべて取得する。
データ抽出各ツイート要素から、投稿者名、ユーザーID、ツイート本文、ツイートURLを抜き出す。
重複排除抽出したツイートのURLが既に収集済みでないかMapオブジェクトで確認し、新規データのみを格納する。

4. CSVファイルのエクスポート

すべてのブックマークを収集した後、exportToCSV関数がCSVファイルの生成とダウンロードを行う。

  • CSVデータの作成: 収集したデータをCSV形式のテキストに変換する。この際、フィールドはダブルクォーテーションで囲み、特殊文字が正しく処理されるようにエスケープする。
  • 文字化け対策とダウンロード: CSVデータの先頭にBOM(Byte Order Mark)と呼ばれる特殊なデータを付与する。これにより、Microsoft Excelでファイルを開いた際の文字化けを防ぐ。その後、データをBlobオブジェクトに変換し、ダウンロード用のリンクを自動でクリックして処理を完了する。

まとめ

X Bookmarks Exporterは、Xの動的なページ構造に対応した「プログレッシブ&オーバーラッピング・スクレイピング」という堅牢なアプローチを採用している。 これにより、ユーザーはボタンをクリックするだけで、手動では難しい大量のブックマーク情報を取得できる。