c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

Twitterで自動フォロー削除

まあbotにはフォロー返しに伴う自動フォロー削除は必須ですよね。

#!/usr/bin/env perl
use utf8;
use strict;
use warnings;

use Array::Diff;
use Data::Dumper;
use Net::Twitter;

my $CONSUMER_KEY='***********';
my $CONSUMER_SECRET='**************';

#$botは適当に想像してちょ

my $twitter = Net::Twitter->new( traits => ['API::REST', 'OAuth'], consumer_key => $CONSUMER_KEY, consumer_secret => $CONSUMER_SECRET, );
$twitter->access_token($bot->{oauth_token});
$twitter->access_token_secret($bot->{oauth_token_secret});

die('Auth failed:'.$bot->{username}) unless ( $twitter->authorized ) ;
	
my $cr = $twitter->verify_credentials;
my $own_id = $cr->{id};
	
my $nextc = -1; # paging default.
my @following_id_list; # outgo
do{
	my $following_list = $twitter->friends_ids({ id=>$own_id, cursor => $nextc });	
	$nextc = $following_list->{next_cursor};
	foreach my $id (@{ $following_list->{ids} }){
		push(@following_id_list, $id) ; 
	}
}while($nextc!=0);
@following_id_list = sort @following_id_list; 

$nextc = -1;
my @followers_id_list; # income
do{
	my $followers_list = $twitter->followers_ids({ id=>$own_id, cursor => $nextc });	
	$nextc = $followers_list->{next_cursor};
	foreach my $id (@{ $followers_list->{ids} }){
		push(@followers_id_list, $id) ; 
	}
}while($nextc!=0);
@followers_id_list = sort @followers_id_list; 

my $diff = Array::Diff->diff(\@following_id_list, \@followers_id_list);
foreach my $delid (@{ $diff->{deleted} }){
	$twitter->destroy_friend($delid);
}

これはフォロー外しされたときに報復する事しかしませんけど、
数行くわえれば自動フォローにもなります。


Twitterはまともに動く事が全く保証されていないので、これでうっかり全件削除になることが想像できます。
省略しましたが、できるだけフェイルセーフいれましょう。


しかし…全くモチベーション上がらないコードだった…用途的に…。