LoginSignup
1
1

More than 5 years have passed since last update.

mixi の日記を全消去する

Posted at

黒歴史をなかったことにしたかった。一度消すと復旧できないので注意。

使い方

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";
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1