1個ずつWEBで削除していきながら、「これはAPIを使ってやるべきだな・・・」と思ったものの、やり方がわからず結局全部「手動で」消した。
調べたらごく簡単だったのでメモしておく。
tweetを削除するにはそのidを知る必要がある。まずはそれを知る方法。
#!/usr/bin/perl
use strict;
use warnings;
use YAML::Tiny;
use Net::Twitter::Lite;
use Encode;
my $config = ( YAML::Tiny->read('/hoge/config.yml') )->[0];
my $twit = Net::Twitter::Lite->new(
legacy_lists_api => 0,
consumer_key => $config->{'cs_key'}, consumer_secret => $config->{'cs_secret'} );
$twit->access_token( $config->{'ac_token'} );
$twit->access_token_secret( $config->{'ac_secret'} );
eval {
my $statuses = $twit->friends_timeline({ since_id => 1000, count => 10 });
for my $status ( @$statuses ) {
print encode('utf8',"$status->{created_at} <$status->{user}{screen_name}> $status->{text} $status->{id}\n");
}
};
warn "$@\n" if $@;
これは、Net::Twitter::Liteの、cpanのページの最初のサンプルほとんどそのままである。
tweet(status) は日本語なのでencodeしている。encodeしなくても表示できるが警告がうるさいのでencodeした。
use warning をはずせばいいのか・・・まあいいや。
since_id というのは名前からして、表示する最小のidであろう。ちなみにゼロにしたらエラーになった(省略できる)。
$status->{id}が、tweet(status)のidである。これはおそらく全tweetでユニークなidだ。
statusは新しいものからcountの数だけ取得される。
idがわかったら、以下のようにidを指定して destroy_statusを実行する。
eval {
my $statuses = $twit->destroy_status(3047606842882xxxxx);
};
warn "$@\n" if $@;
eval, warnとかの書き方はよくわからないがサンプルのままである。
あとは、tweetとidを表示し、消したいidを選んでdestroyすればよい。
「一括削除アプリ」みたいなものもあったのだが、遅い上に削除もできなかった。
注意すべきなのはあまり大量にいっぺんに表示・削除するとAPIの利用制限に引っかかるおそれがあることだ。
destroy_statusはAPIを1回呼び出すごとに1個ずつ消すから多分すぐアウトになるんじゃないか?
上記のやり方では1個だけ消せることを確認した。
大量に削除する際は要注意だ。