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