PAGE TOP


Twitter自動ツール (フォローバック・フォロー・リムーブ)

2018年5月13日PHP

実装概要

簡易のTwitterの自動フォロー、フォローバック、リムーブツールの作成です。実装には、githubで公開されているライブラリーを利用します。アクセスがあったときにに起動する機能は下記の3点です。
①指定したワードをつぶやいている他者アカウントをひとりフォローします。
②その時点でフォローバックしていないフォロワーをフォローします。
③両思いではない場合に、古いほうの他者アカウントをリムーブします。

また、プログラムへのアクセスには、サーバー側のcronでおこない、一定の間隔ごとに実行することにします。また、ドキュメントルート下にプログラムを配置した場合は、誰でもアクセスされるとまずいので、basic認証をかけて、URLにIDとパスワードを添付しておます。


【注意】
Twitterでは、自動化しすぎると、アカウントが凍結しますので、過度にならないように注意してください。特に、自動実行の頻度を減らしても、手動の投稿が極端に少ない場合には、凍結します。おそらく自動化と手動実行の割合も関係していると思われますので、一般的な手動での利用と、自動化を混ぜて利用するようにしてください。cron設定は、フォロバックなら30分毎でも大丈夫でしたが、フォローに関しては、15分毎や30分毎だと、場合によっては、凍結します。

ライブラリーの設置とアプリの登録

まずは、ライブラリーをGithubよりダウンロードして、任意の場所に設置します。
twitteroauth ダウンロード


次にツイッターにログインしてApplication Management画面より、アプリの登録をします。ツイッターをPHPより操作するには、下記の4つの情報を取得する必要があります。

Consumer Key (API Key)
Consumer Secret (API Secret)
Access Token
Access Token Secret

[Create New App]より、Name*(アプリの名前)、Description*(アプリの概要)、Website*(アプリのURL)…webサイトと連結するわけでもないので、不要ですが、必須項目なので、適当にURLを入れておきましょう。Callback URLsは空白でよいです。Developer Agreementのチェックボックスにチェックをいれて、[Create Your Twitter Application]を押して、登録します。
次に、アプリの個別情報画面に遷移しますが、keys and Access Tokens タブの
Consumer Key (API Key)とConsumer Secret (API Secret)をメモっておきます。また、その画面の、下の[Create my access token]より、Access TokenとAccess Token Secretを発行し、メモっておきます。

コード

コードに関して、まずは、ライブラリーを読み込むことと、アプリ登録で取得した4つの情報を変数に入れます。また、自動フォローではあるつぶやきにもとづいてフォローするので、$searchWordに、検索ワードを設定してください。
下記のコードは、上から順にフォローバック、リムーブ、フォローと順番に書いてみましたが、実際、使用する際、使わない場合は、コメントアウト又は削除しておいてください。

【index.php】

<?php

require_once("../twitteroauth-master/autoload.php");//ダウンロードしたライブラリーのautoload.phpを読み込む。
use Abraham\TwitterOAuth\TwitterOAuth;

//↓登録した時の情報を入力する。
$consumerKey = "xxxxxxxxxxxxxxxxxxxxxxxx";
$consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$accessTokenSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$searchWord = "経済";

$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

//フォローバック
    $followers = $connection->get('followers/ids', array('cursor' => -1));
    $friends = $connection->get('friends/ids', array('cursor' => -1));
 
    foreach ((array)$followers->ids as $j => $id) {
        if (empty($friends->ids) or !in_array($id, (array)$friends->ids)) {
            $connection->post('friendships/create', array('user_id' => $id));
        }
    }

//リムーブ
$both = 0;
$receive = 0;
$both_id = array();

   foreach ($followers->ids as $j => $id) {
    if(!in_array($id, (array)$friends->ids)) {//片思われ
       $receive++;
     }
     if(in_array($id, (array)$friends->ids)) {//両思い
       array_push($both_id, $id);
       $both++;
     }
   }

   if(!empty($both_id)){
   $red = array();
   $s = array_reverse($friends->ids);

    foreach ((array)$s as $j => $id) {
        if(!in_array($id, (array)$both_id)) {
            array_push($red, $id);
        }
    }

    $connection->post('friendships/destroy',array('user_id' =>$red[0]));

    }

//フォロー

$tweets = $connection->get('search/tweets', array("q" => $searchWord));
$arrayIds = array();
  foreach ($tweets->statuses as $tweet) {
    $arrayTmp[] = $tweet->user->id;
   }

$users = $connection->get('friendships/lookup', array("user_id" => implode(",", $arrayTmp)));
$arrayNotYetFollow = array();
foreach ($users as $u) {
   if (!in_array("following", $u->connections)) {
      $arrayNotYetFollow[] = $u->id;
   }
}

foreach ($tweets->statuses as $tweet) {
   if (in_array($tweet->user->id, $arrayNotYetFollow)) {
      $connection->post('friendships/create', array("user_id" => $tweet->user->id));
       break;
   }
}

 
?>

Basic認証とCron

Basic認証では、設定した場所の階層以下をログイン認証付きのページにすることができます。特に、上記で書いたTwitterの自動機能は、アクセスした時点で、実行されてしまうので、他者からのアクセスがあるだけでも、実行されてしまいます。なので、それらを回避する為に、ログイン付きにします。(ドキュメントルートより上の階層に設置する場合は必要ありません)。また、アクセスは自動で行うので、サーバーのcron設定(参考)をします。こちらは、サーバーの管理画面、又は、SSH接続によるコマンド操作で設定可能ですので、ご自身の環境に合わせて設定してください。Basic認証付きのページにcronよりアクセスする場合は、IDとパスワードを添付する必要があります。(例
https://test:test@example.com/index.php)

認証をかけたい階層に、.htaccessと.htpasswdを置きます。

【.htaccess】
1行目に、.htpasswdがある場所へフルパスで指定します。

AuthUserFile "/home/test/public_html/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user

【.htpasswd】
IDとパスワードを設定します。下記の場合は、idはtestで、コロンで区切って以下がパスワードになります。パスワードもtestにしてありますが、パスワードは暗号化されているので、自分で関数で出力してもよいのですが、手間がかかるので、「htpasswd パスワード生成」等で検索して、簡単に出力できるツールがあるので、それらを利用しましょう。

test:Y1h/f.wODG1VY

感想

だれでも利用できるTwitterの自動化ツールの公開サービスは、いくつかありますが、実は、どれも自己責任なので、とても危険だと思います。特に、アプリ情報のConsumer KeyやConsumer Secret等をサービスに登録しなければならないので、これを他者に教えてしまうと、外部から操作可能になります。万が一、改修後のバグで暴走したり、情報が漏れたりした場合にでも、なんの保証もありません。特にビジネス関連でフォローワーを増やしたい方は、注意が必要です。凍結してしまえば、一気にフォロワーが減りますし、繰り返すようなら永久に凍結します。今回実装した、機能は、かなりシンプルなので、まだまだ改良の余地があります。フォローバック等で、外国からのユーザーを拒否したり、Botと思われるものを排除もできますし、リムーブの場合は、特定のユーザー以外を除いてリムーブもできます。やり方次第では、かなり質の高いものができると思いますので、利用してみるのも良いかもしれません。ただ、近年、かなり厳しくなっているようなので、APIを利用する場合は、日々気にかけておく必要があります。