PHP TWITTER bot, чтобы следовать / отменить подписку с помощью api версии 1.1 и курсоров

Этот код должен только отменить подписку на пользователей, которые не вернутся назад, но он отменил подписку на НЕКОТОРЫЕ последователи, не могу понять, почему.

$oTwitter = new TwitterOAuth (...) $aFollowing = $oTwitter->get('friends/ids'); $aFollowing = $aFollowing->ids; $aFollowers = $oTwitter->get('followers/ids'); $aFollowers = $aFollowers->ids; $i=1; foreach( $aFollowing as $iFollowing ) { $isFollowing = in_array( $iFollowing, $aFollowers ); echo "$iFollowing: ".( $isFollowing ? 'OK' : '!!!' )."<br/>"; if( !$isFollowing ) { $parameters = array( 'user_id' => $iFollowing ); $status = $oTwitter->post('friendships/destroy', $parameters); } if ($i++ === 100 ) break; } 

Может быть, проблема в другом?

EDIT: добавлен собственный ответ на этот пост с кодом, который работает, чтобы следить за последователями и отменить подписку на сторонних пользователей в твиттере.

Если ваш сторонник больше 5000, тогда $aFollowers = $oTwitter->get('followers/ids'); будет возвращать только первые 5000 идентификаторов. В каком порядке? Twitter не гарантирует никакого заказа, поэтому мы будем считать случайным.

Если следующая проверка: $isFollowing = in_array( $iFollowing, $aFollowers ); , человек $iFollowing может или не может быть в списке $aFollowers зависимости от того, как Twitter вернул вам последователей. Если человек находится в первых 5000, то это будет работать, если они находятся за пределами первых 5000, тогда проверка не удастся, даже если человек законно следует за вами.

Вам нужно будет вытащить всех ваших последователей через курсоры. Проверьте документ на курсорах / страницах – поможет вам немного. В основном вам нужно это сделать.

 $aFollowers = array(); $cursor = -1; do { $follows = $oTwitter->get('followers/ids?cursor=' . $cursor); $aFollowers = array_merge($follows->ids, $aFollowers); $cursor = $follows->next_cursor; } while ($cursor > 0); 

Это работает, я думаю, может быть, это может помочь новичкам вроде меня. Ответ Энди Джонса действительно помог. Используется большая библиотека для многих других вещей, а также здесь .

  require_once 'twitteroauth.php'; $oTwitter = new TwitterOAuth ( 'YOUR_TWITTER_APP_CONSUMER_KEY', 'YOUR_TWITTER_APP_CONSUMER_SECRET', 'YOUR_TWITTER_APP_OAUTH_TOKEN', 'YOUR_TWITTER_APP_OAUTH_SECRET'); 

// ПОЛНЫЕ СЛЕДУЮЩИЕ СТАВКИ С КУРСОРОМ (ПОСЛЕДОВАТЕЛЬНОСТЬ> 5000)

 $e = 1; $cursor = -1; $full_followers = array(); do { $follows = $oTwitter->get("followers/ids.json?screen_name=yourusername&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 following:" .$e. "<br /><br />"; 

// ПОЛНАЯ ДРУГОВАЯ ЧАСТЬ С КУРСОРОМ (СЛЕДУЮЩАЯ> 5000)

 $e = 1; $cursor = -1; $full_friends = array(); do { $follow = $oTwitter->get("friends/ids.json?screen_name=yourusername&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); 

// ЕСЛИ Я ПОСЛЕДУЮЩИЙ ПОЛЬЗОВАТЕЛЬ, И ОН НЕ СЛЕДУЕТ ПОСЛЕ МЕНЯ, Я НЕ ПОЛУЧИЛ ЕГО

  $index = 1; $unfollow_total=0; foreach( $full_friends as $iFollow ) { $isFollowing = in_array( $iFollow, $full_followers ); echo "$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 />';