読者です 読者をやめる 読者になる 読者になる

PerlのNet::Twitter使ってりむったーみたいなの作りました

りむったーは一回使ってたけどあんまそう言うのいいかなーって思って外して、なんとなくもう一回りむったーフォローしたらDMを一度も受け取ること無く停止したから自分用に作りました。
あと、今作ったら多少話題にならないかなっていう下心もありつつソース載せます
とは言っても普通の人はPerlとか実行出来る環境無いと思うし、Net::Twitterとかその他もろもろ入れないと動かないです。
ってのを前提に。
導入方法はググりましょう!

以下ソース

#!/opt/local/bin/perl

use strict;
use warnings;
use utf8;
use Net::Twitter;

print "---Start---\n";
print "---OAuth---";

# OAuth認証
my $consumer_key = '';
my $consumer_secret = '';
my $access_token = '';
my $access_token_secret = '';

my $twit = Net::Twitter->new(
	traits => ['API::REST', 'OAuth'],
	consumer_key => $consumer_key,
	consumer_secret => $consumer_secret,
);

$twit->access_token( $access_token );
$twit->access_token_secret( $access_token_secret );
print "OK\n";

# 前回のフォロアー取得時のデータをファイルからハッシュに移す
# スクリプトと同じ階層にファイルなかったら作成します
use FindBin;
use Fcntl;
my $dir = $FindBin::Bin;
my $FileName = 'followers.txt';
my $FilePath = $dir. '/'. $FileName;

# 最終更新日チェック
my $filestat = ( stat( $FilePath ))[9];
( my $sec, my $min, my $hour, my $mday, my $mon, my $year) = localtime($filestat);
$year = $year + 1900;
$mon = $mon + 1;
print 'last check : '.$year.'/'.$mon.'/'.$mday.' '.$hour.':'.$min.':'.$sec."\n"; 

print "---LoadData---";
# ファイルなかったら作って在ったら開いてリスト代入して
sysopen( FH, $FilePath, O_RDONLY  | O_CREAT ) or croak $!;

my %old_followers =();
foreach( <FH> ){
	my @temp;
	@temp = split( ',', $_ );
	chomp( @temp );
	$old_followers{ $temp[0] } = $temp[1];
}
close( FH );

# ハッシュのキー( id )をリストに移して昇順にソート
my @old_followers_id = keys( %old_followers );
@old_followers_id = sort{ $a <=> $b }( @old_followers_id );

print "OK\n---GetFollowers---";

# フォロアー取得
my $cursor = -1;
my %new_followers = ();
while( $cursor != 0 ){
	my $f = $twit->followers({ cursor => $cursor });
	$cursor = $f->{ next_cursor };
	
	foreach ( @{$f->{ users }} ){
		$new_followers{ $_->{ id }} = $_->{ screen_name };
	}
}
my @new_followers_id = keys( %new_followers );
# ハッシュのキーをソート
@new_followers_id = sort{ $a <=> $b }( @new_followers_id );

print "OK\n";


# リムーブチェック
my @rename_usersID = ();

print '=====remove====='."\n";
foreach ( @old_followers_id ){
	# 新しいハッシュに古いidが無くなってたら表示
	unless( exists( $new_followers{ $_ } )){
		print $old_followers{ $_ }."\n";
	}
}
print "================\n";
print "---DataSave---";
# ファイルに取得したフォロアー一覧の書き込み
open( FH, '>',$FilePath ) or die "$!";

foreach( @new_followers_id ){
	print FH $_.','.$new_followers{ $_ }."\n";
}
close( FH );
print "OK\n";


print '***ProgEND***'."\n";
__END__

こんな感じです。
my $consumer_key = '';
my $consumer_secret = '';
くらいは公開してもいいのかなって思ったけどあんまよく分からないからとりあえずからの状態でアレします。
とりあえず僕の環境ではちゃんと動いてます。他の環境ではよく分からないです。
たぶんWinで使うにはディレクトリのパスとかをそれ用にしないとダメですね。

そんな感じです。
Perlはコレ作るために勉強した感じなので、ここはこうした方がいいよーとか在ったら教えてください。