2012-06-20 7 views
2

У меня теперь есть несколько тысяч подписчиков Twitter, и до сих пор я слежу за ними вручную. Теперь я хочу автоматизировать процесс с помощью PHP, так как это может занять много времени, чтобы следовать за всеми.Автоматическое возвращение назад на Twitter

Я нашел библиотеку Twitter для PHP, созданную Абрахамом Уильямсом, и начал писать код.

Однако каждый раз, когда я запускаю сценарий, число пользователей, которые мне нужны для последующего отслеживания, неверно! Является ли это ошибкой в ​​моем кодировании, или это именно то, как работает API Twitter?

Вот мой код:

<?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

Почему вы хотите, чтобы следовать так много людей, что даже становится такими что вы должны его автоматизировать? – BoltClock

+2

Тогда вам понадобится сценарий, чтобы блокировать все входящие твиты от людей, которых вы следовали. –

+0

80% пользователей, которых я придерживаюсь в Twitter, являются друзьями, поэтому я не против видеть их обновления на моей временной шкале :) –

ответ

8

Я просто побежал ваш код на моем ноутбуке с моим Твиттере и я получаю правильные значения. Ваш код правильный с вашей стороны.

Существует вероятность несогласованности, если число последователей или людей, которых вы придерживаетесь, составляет более 5000 или разница между ними составляет более 5000, потому что некоторые пользователи не появятся в последних 5000 последователей, потому что после него другие 5000 пользователей имеют последовали за тобой, и ты никогда не следовал за ним. Так что персонаж будет пропущен.

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

OAuth calls разрешено 350 запросов в час и измеряется против oauth_token, используемого в запросе.

проверить это больше: https://dev.twitter.com/docs/rate-limiting Так следующие более 350 пользователей, не представляется возможным из-за ограничений скорости на твиттере.

+0

Ну, по крайней мере, после более чем 350 за один час невозможно. Очевидно, что пользователи, которых следует отслеживать, могут быть поставлены в очередь и представлены со скоростью, которую позволяет API. – quickshiftin

+0

@quickshiftin да, но ОП не здесь, чтобы ответить, что на самом деле он делает. : \ – ksg91

+0

Привет @ ksg91. Спасибо за Ваш ответ. Мне жаль, что я только сейчас отвечаю вам, но я отсутствовал последние 12 дней. http://ifttt.com/ кажется лучшим решением моей проблемы, но спасибо за ответ в любом случае. –

1

Это работает, чтобы следовать/отменить подписку на twitteroauth.php + OAuth.php и appi v1.1, если у вас более 5000 подписчиков/друзей. Предел 999 для последующего unfollow - из-за предела 1000 дней. Я начал with this

//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 />'; 
Смежные вопросы