ネットワークにつながっていないページを洗い出したい
old title:特定のページからリンクを辿ってたどり着けないページを探したい
bsahd.iconIdea for Code
例えば今日の日記からいくら辿っても出てこないページがあれば、それはゴミなのでは?
すでにあった!
エクスポートファイルいるのか...
「ピン留めしたページから」ではなく、
全文検索ではたどり着けるのでゴミとは言い切れない気がしたyosider.icon
メインネットワークにつながっていないものを洗い出したい、ですねbsahd.icon
単独では孤立していないが最大のネットワークとは繋がっていないサブネットワークに属するページの場合もリンクを辿ってたどり着けないことがありそうyosider.icon
実装
Deno使う
オンラインのコードを簡単に実行できる
1ファイルでいい
井戸端で人気だから
ページ取得はAPI叩きまくる
プログラム手順
メイン探索処理
並列化はしない
遅すぎるので並列化する
探索用にキューと「辿って見つかったページリスト(以下マークリスト)」を用意する
マークアンドスイープ的な感じ
キューは「これから取得すべきページ一覧」
最初に起点となるページをキューに入れる
1でもいいし、4くらいあってもいい
今日の日記を起点にするのが良さげ?
まず、キューの1番目をshift(js)して
APIで取得する
404だったら
何もしない
200だったら
マークリストに追加する
リンク先を見る
JSONのLinksにこっちからのリンク、被リンク区別なく格納されている
違ったらごめん
被リンクは含まれないtakker.icon
区別なく取るときは、relatedPages.links1hopを使う
直しますbsahd.icon
Linksをfor...of処理でキューに追加する
追加前にマークリストとキューを見て、どっちかに入ってたらキューに追加しない
キューが尽きたら終了
仕組み的には、幅優先探索
キューをスタックに変えたら深さ優先探索
全ページリストを取得する
別スクリプトに分離しよう
全ページリストからマークリストを引く
スイープリストができる
ある程度garbage免除があっても良さそう
例えば、ここ一週間で更新されたページは除外など
2024/11/6 22:38 おわり
2024/11/07 朝にやろう
さ.iconぼ.iconっ.iconた.icon
2024/11/7 18:20 開始
完成したコードは公開します
2024/11/7 21:34 ページが重複しまくってるので、
2. Depth機能廃止
2024/11/9 08:53
jsr:@cosense/types/rest
2024/11/9 17:16 regex excludeを追加する
並列版
example
help
比較的高速で安定した回線が必要