とりあえずさっきのプログラムを書きなおして完全にフォロワーさんを同期するプログラムを書きました。
Botみたいで(処理してるのはBotですが・・・)味気ないけど仕方ないですねwwww
#!/usr/bin/perl use utf8; use strict; use warnings; # モジュール使用宣言 use Array::Diff; use Data::Dumper; use Net::Twitter; use YAML::Tiny; use Encode; use FindBin; # 現在のパスから見て設定ファイルを読み込み my $config = (YAML::Tiny->read($FindBin::Bin . '/config.yml'))->[0]; # OAuth認証 my $twitter = Net::Twitter->new( traits => ['API::REST', 'OAuth'], consumer_key => $config->{'consumer_key'}, consumer_secret => $config->{'consumer_secret'} ); $twitter->access_token($config->{'access_token'}); $twitter->access_token_secret($config->{'access_token_secret'}); # 認証失敗時の処理 die('Auth failed:'.$config->{'username'}) unless ( $twitter->authorized ) ; # ユーザー名を含むユーザー情報を取得 my $cr = $twitter->verify_credentials; my $own_id = $cr->{id}; my $nextc = -1; # paging default. my @following_id_list; # outgo # APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ do{ # パラメータcursorは前回取得したフォローイングまでの番号が入っている my $following_list = $twitter->friends_ids({ id=>$own_id, cursor => $nextc }); $nextc = $following_list->{next_cursor}; # 配列からフォローイングのidを取得 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 # APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ do{ # パラメータcursorは前回取得したフォロワーまでの番号が入っている my $followers_list = $twitter->followers_ids({ id=>$own_id, cursor => $nextc }); $nextc = $followers_list->{next_cursor}; # 配列からフォロワーのidを取得 foreach my $id (@{ $followers_list->{ids} }){ push(@followers_id_list, $id); # 後で比較するためにフォロワーを配列に保管 } }while($nextc!=0); # 文字昇順でソート @followers_id_list = sort @followers_id_list; # 差分を取得(フォローイング) my $diff_following = Array::Diff->diff(@following_id_list, @followers_id_list); # 差分を取得(フォロワー) my $diff_followers = Array::Diff->diff(@followers_id_list, @following_id_list); # リムった人をリム返し foreach my $delid_following (@{ $diff_following->{deleted} }){ $twitter->destroy_friend($delid_following); } # フォローした人をフォロー返し foreach my $delid_followers (@{ $diff_followers->{deleted} }){ $twitter->create_friend($delid_followers); }
うん。書いてて思った。今まで差分取るとかループで比較するだけじゃんとか思ってたけどData::Dumperって結構便利だなw 今度機会があったら使ってみようかな?
0 Comments.