2013-07-02 3 views
4

Я использую этот https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=sitestreams&count=5000, чтобы перечислить список подписчиков Twitter, но у меня есть только список из 200 последователей. Как увеличить список подписчиков Twitter с использованием нового API 1.1?Как получить полный список подписчиков Twitter, используя новый API 1.1

+0

Я с помощью этого твиттер https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=sitestreams&count=5000 с OAuth в список имя последователей list.I у 1667 последователей но список API содержит только 200 последователей. –

+0

Создал [repo on github] (https://github.com/aphoe/twitter-followers-id), я сам его использовал некоторое время и со временем изменил ,Надеюсь, что это решило вашу проблему. – aphoe

ответ

4

Вы должны сначала настроить вам приложение

<?php 
$consumerKey = 'Consumer-Key'; 
$consumerSecret = 'Consumer-Secret'; 
$oAuthToken = 'OAuthToken'; 
$oAuthSecret = 'OAuth Secret'; 

# API OAuth 
require_once('twitteroauth.php'); 

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret); 

Вы можете скачать twitteroauth.php здесь: https://github.com/elpeter/pv-auto-tweets/blob/master/twitteroauth.php

Тогда

Вы можете получить своих последователей, как это:

$tweet->get('followers/ids', array('screen_name' => 'YOUR-SCREEN-NAME-USER')); 

Если вы хотите получить следующую группу из 5000 последователей вы должны добавить значение курсора из первого вызова.

$tweet->get('followers/ids', array('screen_name' => 'YOUR-SCREEN-NAME-USER', 'cursor' => 9999999999)); 

Вы можете прочитать о: Использование курсоров для навигации коллекции в этой ссылке: https://dev.twitter.com/docs/misc/cursoring

+0

Это все еще актуально и вы можете получить имя @ TwitterName всех последователей? –

+0

yep. Но чтобы увидеть @ TwitterName всех последователей, вам нужно создать еще один вызов метода _users/lookup_. Я думаю, что лучший подход для этого - генерировать массив со всеми идентификаторами, возвращаемыми _followers/id_, и запускать другой вызов следующим образом: '$ tweet-> get ('users/lookup', array ('user_id '=>' 1,2,3,4,5, ... ')); ' Официальная документация: https://dev.twitter.com/docs/api/1.1/get/users/lookup – elpeter

0

Вы не можете получить более 200 сразу ... Это было четко указано на документации, где рассчитывать:

количество пользователей, чтобы вернуться на страницу, до максимум 200. Defaults до 20.

вы можете каким-то образом сделать его VI с разбивкой по страницам с использованием

«cursor = -1» #means стр. 1, «Если курсор не указан, предполагается значение -1, что является первой« страницей ».

+0

Редактировать : до 100 ;) –

0

Вот как я запускаю/обновляю полный список идентификаторов следящих элементов на своей платформе. Я бы не использовал sleep(), как скрипт @aphoe. Действительно плохо, чтобы поддерживать связь так долго, и что происходит, если у вашего пользователя есть 1MILL-последователи? Вы собираетесь держать эту связь открытой в течение недели? lol Если вам нужно, запустите cron или сохраните команду redis/memcache. Прополощите и повторите, пока не получите всех последователей.

Обратите внимание, что мой код ниже - это класс, который запускается через команду cron каждую минуту. Я использую Laravel 5.1. Таким образом, вы, вероятно, можете игнорировать много этого кода, поскольку он уникален для моей платформы. Например, TwitterOAuth (который получает все oAuths, которые у меня есть на db), TwitterFollowerList - это еще одна таблица, и я проверяю, существует ли запись, TwitterFollowersDaily - это другая таблица, в которой я храню/обновляю общую сумму за день для пользователя, а TwitterApi - это Abraham\TwitterOAuth упаковка. Однако вы можете использовать любую библиотеку.

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

/** 
* Update follower list for each oAuth 
* 
* @return response 
*/ 
public function updateFollowers() 
{ 
    TwitterOAuth::chunk(200, function ($oauths) 
    { 
     foreach ($oauths as $oauth) 
     { 
      $page_id = $oauth->page_id; 
      $follower_list = TwitterFollowerList::where('page_id', $page_id)->first(); 

      if (!$follower_list || $follower_list->updated_at < Carbon::now()->subMinutes(15)) 
      { 
       $next_cursor = isset($follower_list->next_cursor) ? $follower_list->next_cursor : -1; 
       $ids = isset($follower_list->follower_ids) ? $follower_list->follower_ids : []; 

       $twitter = new TwitterApi($oauth->oauth_token, $oauth->oauth_token_secret); 
       $results = $twitter->get("followers/ids", ["user_id" => $page_id, "cursor" => $next_cursor]); 

       if (isset($results->errors)) continue; 

       $ids = $results->ids; 

       if ($results->next_cursor !== 0) 
       { 
        $ticks = 0; 

        do 
        { 
         if ($ticks === 13) 
         { 
          $ticks = 0; 
          break; 
         } 

         $ticks++; 

         $results = $twitter->get("followers/ids", ["user_id" => $page_id, "cursor" => $results->next_cursor]); 
         if (!$results) break; 

         $more_ids = $results->ids; 
         $ids = array_merge($ids, $more_ids); 
        } 
        while ($results->next_cursor > 0); 
       } 

       $stats = [ 
        'page_id' => $page_id, 
        'follower_count' => count($ids), 
        'follower_ids' => $ids, 
        'next_cursor' => ($results->next_cursor > 0) ? $results->next_cursor : null, 
        'updated_at' => Carbon::now() 
       ]; 

       TwitterFollowerList::updateOrCreate(['page_id' => $page_id], $stats); 

       TwitterFollowersDaily::updateOrCreate([ 
         'page_id' => $page_id, 
         'date' => Carbon::now()->toDateString() 
        ], 
        [ 
         'page_id' => $page_id, 
         'date' => Carbon::now()->toDateString(), 
         'follower_count' => count($ids), 
        ] 
       ); 
       continue; 
      } 
     } 
    }); 
} 
Смежные вопросы