スラド日記サルベージ

スラド日記は結局直らないままスラドは終了するらしい。
葬儀会場は賑わってたがこういう時に当たり障りのない事を言えるような殊勝さの持ち合わせもないので特にコメントも残さなかった。
記念真紀子くらいしてくればよかったか。

アナウンス:スラドは 2024 年 1 月 31 日で終了します。データ保存はお早めに。

「データ保存はお早めに。」とは言うもののみんなどうやってるんだろうな。
スラド日記のURLは基本的には連番なのだがユーザ名が挟まるのでそれほど簡単には取得できないはず。
自分は2017年頃に書いた日次サマリ頁を利用して日記をサルベージするスクリプトがあったのでそれを手直しして使った。

例えば2009年1月1日のスラド日記日次サマリは

https://srad.jp/journal/09/01/01/

となるのでこれを2023年11月25日まで順繰りにアクセスして日記URLを全部さらってから自分のIDでgrepしてwgetで保存した。
perlで書いたソースはこんな感じ。

use strict;
use warnings;
use utf8;
use WWW::Mechanize;
use Encode;
use HTML::TokeParser;
use Time::Piece;
use Time::Seconds;

$| = 1;
my $mech = WWW::Mechanize->new(agent=>'Mozilla/4.0', cookie_jar=>{});
my $date = Time::Piece->strptime('2008-12-31', '%Y-%m-%d');
while($date += ONE_DAY){
  last if $date->ymd("/") eq '2023/11/25';
  my $d = $date->ymd("/");
  $d =~ s/^20//;
  my $url = "https://srad.jp/journal/$d/";
  #die  $url;
  $mech->get($url);
  die $mech->status_line unless $mech->success;
  
  my $stream = HTML::TokeParser->new(\$mech->content);
  while(my $tag = $stream->get_tag){
    if($tag->[0] eq 'a' && $tag->[1]{'onclick'} && $tag->[1]{'onclick'} eq 'return toggle_fh_body_wrap_return(this);'){
      print STDOUT $date->ymd("/"), ' ', $tag->[1]{'href'}, "\n";
      print STDERR $date->ymd("/"), ' ', $tag->[1]{'href'}, "\n";
    }
  }
  sleep 30;
}

出力はこんな感じになる。

2009/01/01 https://srad.jp/~fslasht/journal/462913/
2009/01/01 https://srad.jp/~petit/journal/462916/
2009/01/01 https://srad.jp/~Mc.N/journal/462915/
2009/01/01 https://srad.jp/~etsav/journal/462914/
2009/01/01 https://srad.jp/~A7M/journal/462917/
2009/01/01 https://srad.jp/~alp/journal/462918/
2009/01/01 https://srad.jp/~NAZZ/journal/462919/
2009/01/01 https://srad.jp/~muji/journal/462920/

自分の日記を数えたら1363件あった。
平均すると年間100件くらい書いてたのか。
もっと他に時間の使いようもあっただろうにアホだな。


この記事が気に入ったらサポートをしてみませんか?