Archive for 2010年9月

Twitter用自動フォロー返しスクリプト PHP

9月 2nd, 2010

Twitter用の自動フォロー返しスクリプトです。
Oauth版で、http://github.com/abraham/twitteroauth/downloads で公開されているtwitteroauth.php と Oauth.php が必要です。過去にフォローしたことのあるアカウントのリストをwasFriendというファイルで保持し、これらのアカウントからフォローされてもフォローし返さないようになっています。BOTやスパムへの自動フォローをしないようにするため、このようになっています。

<?php
define("USER" , "YOUR ACCOUNT");
define("DIR" , dirname(__FILE__) );
define("CONSUMER_KEY" , "KEY from Twitter");
define("CONSUMER_SECRET" , "KEY from Twitter");
define("ACCESS_TOKEN", "KEY from Twitter");
define("ACCESS_TOKEN_SECRET" , "KEY from Twitter");

require_once("twitteroauth.php");
// get friends
function getFriends() {
  $ch = curl_init("http://api.twitter.com/1/friends/ids.json?screen_name=".USER);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $res = curl_exec($ch);
  curl_close($ch);
  $ret = array();
  if (!$res) {
    fputs(STDERR , "Failed to get response\n");
    return $ret;
  }
  $res = str_replace("[", "", $res);
  $res = str_replace("]", "", $res);
  $ret = explode(",",$res);
  $wasFriends=fopen(DIR."/wasFriends", "r");
  while(!feof($wasFriends)){
    $t = trim(fgetss($wasFriends));
    if (!in_array($t , $ret)) {
      array_push($ret,$t);
    }
  }
  fclose($wasFriends);
  $wasFriends=fopen(DIR."/wasFriends", "w");
  flock($wasFriends, LOCK_EX);
  foreach ($ret as $t) {
    fputs($wasFriends,$t."\n");
  }
  flock($wasFriends, LOCK_UN);
  fclose($wasFriends);
  return $ret;
}
// get followers
function getfollowers() {
  $to = new TwitterOAuth(CONSUMER_KEY , CONSUMER_SECRET , ACCESS_TOKEN , ACCESS_TOKEN_SECRET);
  $res = $to->OauthRequest("http://twitter.com/followers/ids.json?user_name=".USER,"GET",array());

  $ret = array();
  if (!$res) {
    fputs(STDERR , "Failed to get response\n");
    return $ret;
  }
  $res = str_replace("[", "", $res);
  $res = str_replace("]", "", $res);
  $ret = explode(",",$res);
  $followerCount=fopen(DIR."/followerCount", "a");
  flock($followerCount, LOCK_EX);
  fputs($followerCount,date("Y/m/d H:i:s")." ".count($ret)."\n");
  flock($followerCount, LOCK_UN);
  fclose($followerCount);
  return $ret;
}
// follow user
function follow($id) {
  $to = new TwitterOAuth(CONSUMER_KEY , CONSUMER_SECRET , ACCESS_TOKEN , ACCESS_TOKEN_SECRET);
  $res = $to->OauthRequest("http://twitter.com/friendships/create/".$id.".json","POST",array());

  if (!$res) {
    fputs(STDERR , "Failed to get response\n");
    return >false;
  }
  $json = json_decode($res);
  if (!$json) {
    fputs(STDERR , "Failed to get json\n");
    return >false;
  }
  if (isset($json->following)) {
    fputs(STDOUT , "Successed to follow " . $id . "\n");
    $wasFriends=fopen(DIR."/wasFriends", "a");
    flock($wasFriends, LOCK_EX);
    fputs($wasFriends,$id."\n");
    flock($wasFriends, LOCK_UN);
    fclose($wasFriends);
    return >true;
  } else {
    fputs(STDERR , "Failed to follow " . $id . "\n" . var_export($json , true) . "\n");
    return >false;
  }
}
// get friends
$friends = getFriends();
 fputs(STDERR , "Friends List Aquired " );
 fputs(STDERR , count($friends) ."friends are listed \n" );
// search
$result = getfollowers();
 fputs(STDERR , "follower List Aquired" );
 fputs(STDERR , count($result) ."followers are listed \n" );
// follow
>foreach ($result as $r) {
  if (!in_array($r , $friends)) {
     fputs(STDERR , "Tring to follow " . $r ."\n" );

    follow($r);
    sleep(5);
  }
}
?>