2

現在、数千人の Twitter フォロワーがおり、今まで手動でフォローしていました。全員を追跡するには時間がかかる可能性があるため、PHP を使用してプロセスを自動化したいと考えています。

Abraham Williams によって作成された PHP 用の Twitter ライブラリを見つけ、コードを書き始めました。

ただし、スクリプトを実行するたびに、フォローバックする必要があるユーザーの数が正しくありません! これは私のコーディングの誤りですか、それとも Twitter API の仕組みですか?

これが私のコードです:

<?php

require_once 'twitteroauth/twitteroauth.php';

define('CONSUMER_KEY', '');
define('CONSUMER_SECRET', '');
define('ACCESS_TOKEN', '');
define('ACCESS_TOKEN_SECRET', '');

ob_start();
set_time_limit(0);

function autoFollow($action){
    //auth with twitter.
    $toa = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);

    //get the last 5000 followers
    $followers = $toa->get('followers/ids', array('cursor' => -1));
    $followerIds = array();

    foreach ($followers->ids as $i => $id) {
        $followerIds[] = $id;
    }

    //get the last 5000 people you've followed
    $friends = $toa->get('friends/ids', array('cursor' => -1));
    $friendIds = array();
    foreach ($friends->ids as $i => $id) {
        $friendIds[] = $id;
    }


    if($action=="unfollow"){
        //unfollow all users that aren't following back.
        $usersNotFollowingBackcount = 0;
        $usersNotFollowingBack = array();

        foreach($friendIds as $id){ 
            if(!in_array($id,$followerIds) ){
                array_push($usersNotFollowingBack, $id); 
                //unfollow the user
                //$toa->post('friendships/destroy', array('id' => $id));
                $usersNotFollowingBackcount++;
                echo $usersNotFollowingBackcount.' users unfollowed so far</br>';
                ob_flush();
                flush();
            }
        } 

        echo sizeof($usersNotFollowingBack).' users who weren\'t following you back have now been unfollowed!';
    }
    if($action =="follow"){                 
        //follow all users that you're not following back.
        $usersYoureNotFollowingBackcount = 0;
        $usersYoureNotFollowingBack = array();

        foreach($followerIds as $id){ 
            if(!in_array($id,$friendIds) ){
                array_push($usersYoureNotFollowingBack, $id); 
                //follow the user
                //$toa->post('friendships/create', array('id' => $id));
                $usersYoureNotFollowingBackcount++;
                echo $usersYoureNotFollowingBackcount.' users followed back so far</br>';
                ob_flush();
                flush();
            }
        } 

        echo sizeof($usersYoureNotFollowingBack).' users have been followed back!';
    }
}

if($_GET['action']){
    autoFollow($_GET['action']);
    ob_end_flush();
}
?>
4

2 に答える 2

8

Twitter アカウントを使用してラップトップでコードを実行したところ、正しい値が得られました。あなたのコードはあなたの側から正しいです。

フォロワー数またはフォローしている人の数が 5000 を超える場合、またはそれらの差が 5000 を超える場合、一部のユーザーが最後の 5000 フォロワーに表示されないため、矛盾が生じる可能性があります。彼に従ったことはありません。そのため、そのペルソナは見逃されます。

また、コードの実行中に一部のユーザーがフォローされないという問題がある場合は、Twitter の API レート制限が原因である可能性があります。

OAuth 呼び出しは、1 時間あたり 350 リクエストまで許可され、リクエストで使用される oauth_token に対して測定されます。

詳細については、こちらをご覧ください: https://developer.twitter.com/en/docs/basics/rate-limiting.html したがって、Twitter によるレート制限により、350 人を超えるユーザーをフォローすることはできません。

于 2012-06-27T10:25:45.113 に答える
1

これはtwitteroauth.php + OAuth.phpと appi v1.1でフォロー/フォロー解除するのに機能します。フォローのアンフォローが999回に制限されているのは、1000日の制限のためです。私はこれで始めました

//FULL FOLLOWERS ARRAY WITH CURSOR ( FOLLOWERS > 5000)
    $e = 0;
    $cursor = -1;
    $full_followers = array();
    do {
        //SET UP THE URL
      $follows = $oTwitter->get("followers/ids.json?screen_name=youruser&cursor=".$cursor);
      $foll_array = (array)$follows;

      foreach ($foll_array['ids'] as $key => $val) {

            $full_followers[$e] = $val;
            $e++; 
      }
           $cursor = $follows->next_cursor;

      } while ($cursor > 0);
echo "Number of followers:" .$e. "<br /><br />";

//FULL FRIEND ARRAY WITH CURSOR (FOLLOWING > 5000)
    $e = 0;
    $cursor = -1;
    $full_friends = array();
    do {

      $follow = $oTwitter->get("friends/ids.json?screen_name=youruser&cursor=".$cursor);
      $foll_array = (array)$follow;

      foreach ($foll_array['ids'] as $key => $val) {

            $full_friends[$e] = $val;
            $e++;
      }
          $cursor = $follow->next_cursor;

    } while ($cursor > 0);
    echo "Number of following:" .$e. "<br /><br />";

//IF I AM FOLLOWING USER AND HE IS NOT FOLLOWING ME BACK, I UNFOLLOW HIM
$index=1;
$unfollow_total = 0;

foreach( $full_friends as $iFollow )
{
$isFollowing = in_array( $iFollow, $full_followers );

echo $index .":"."$iFollow: ".( $isFollowing ? 'OK' : '!!!' )."<br/>";
$index++;

if( !$isFollowing )
    {
    $parameters = array( 'user_id' => $iFollow );
    $status = $oTwitter->post('friendships/destroy', $parameters);
    $unfollow_total++;
    } if ($unfollow_total++; === 999) break;
}

//ユーザーが私をフォローしていて、私がフォローしていない場合、私はフォローします

$index=1;
$follow_total = 0;
foreach( $full_followers as $heFollows )
{
$amFollowing = in_array( $heFollows, $full_friends );

echo "$heFollows: ".( $amFollowing ? 'OK' : '!!!' )."<br/>";


$index++;
     if( !$amFollowing )
    {
    $parameters = array( 'user_id' => $heFollows );
    $status = $oTwitter->post('friendships/create', $parameters);
    $follow_total++;
    } if ($follow_total === 999) break;
}

echo 'Unfollowed:'.$unfollow_total.'<br />';
echo 'Followed:'.$follow_total.'<br />';
于 2013-09-16T01:58:37.290 に答える