[英]PHP TWITTER bot to follow/unfollow using api version 1.1 and cursors
此代码应该只取消关注没有关注的用户,但它取消关注一些关注者,无法弄清楚原因。
$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;
}
难道问题是别的什么?
编辑:为这篇文章添加了自己的答案,代码可以在 Twitter 上关注关注者和取消关注非关注者。
这有效,我想也许它可以帮助像我这样的新手。 安迪琼斯的回答真的很有帮助。 在这里也为许多其他东西使用了很棒的图书馆。
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 />";
//带光标的完整朋友数组(Following > 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 === 5) 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 === 5) break;
}
echo 'Unfollowed:'.$unfollow_total.'<br />';
echo 'Followed:'.$follow_total.'<br />';
如果您的关注者大于 5000,则$aFollowers = $oTwitter->get('followers/ids');
只会返回前 5000 个 ID。 按什么顺序? 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.