黒歴史をなかったことにしたかった。一度消すと復旧できないので注意。
使い方
delete_mixi_diary.pl [--email=your-account@example.com] [--password=your-mixi-password]
オプションで指定する代わりに ~/.delete_mixi_diary
という設定ファイルを書いても OK:
+{
email => 'your-account@example.com',
password => 'your-mixi-password',
}
コード
delete_mixi_diary.pl
#!/usr/bin/env perl
use 5.014;
use strict;
use warnings;
use opts;
use File::HomeDir;
use Path::Class;
use WWW::Mixi::Scraper;
opts my $email => +{ isa => 'Str' },
my $password => +{ isa => 'Str' };
my $home = dir(File::HomeDir->my_home);
my $config_file = $home->file('.delete_mixi_diary');
my %config = %{ -e $config_file ? eval($config_file->slurp) : +{} };
# Command line option takes precedence over config file.
$config{email} = $email if defined $email;
$config{password} = $password if defined $password;
for my $param (qw/email password/) {
die qq/Specify mandatory parameter "$param"/ unless $config{$param};
}
my $mixi = WWW::Mixi::Scraper->new(mode => 'TEXT', %config);
sub diary_id_for {
my $diary_meta = shift;
$diary_meta->query =~ /id=(\d+)/;
$1
}
my $num_deleted = 0;
my $num_failed = 0;
while (my @diaries = $mixi->list_diary->parse(page => 0)) {
die 'Server returned an error status' if $num_failed > 3;
my @diary_ids = map { diary_id_for $_->{link} } @diaries;
my $mech = $mixi->{mech}{mech};
$mech->tick(diary_id => $_) for @diary_ids;
$mech->submit; # on list_diary.pl
unless ($mech->success) {
++$num_failed;
next;
}
$mech->submit; # on delete_diary.pl
unless ($mech->success) {
++$num_failed;
next;
}
$num_deleted += @diary_ids;
}
warn "$num_deleted diaries have been deleted.\n";