通过Twitter获得所有粉丝

时间:2009-12-27 16:33:33

标签: php twitter

如何通过一个请求获取所有关注者? 如果我做$this->twitter->getFollowers(); 我只是得到了100个粉丝;

这是获取粉丝的代码

/**
     * Returns the authenticating user's followers.
     *
     * @return  array
     * @param   string[optional] $id     The id or screen name of the user for whom to request a list of followers.
     * @param   int[optional] $page
     */
    public function getFollowers($id = null, $page = null)
    {
        // build parameters
        $aParameters = array();
        if($page !== null) $aParameters['page'] = (int) $page;

        // build url
        $url = 'statuses/followers.xml';
        if($id !== null) $url = 'statuses/followers/'. urlencode($id) .'.xml';

        // do the call
        $response = $this->doCall($url, $aParameters, true, false);

        // convert into xml-object
        $xml = @simplexml_load_string($response);

        // validate
        if($xml == false) throw new TwitterException('invalid body');

        // init var
        $aUsers = array();

        // loop statuses
        foreach ($xml->user as $user) $aUsers[] = $this->userXMLToArray($user);

        // return
        return (array) $aUsers;
    }

5 个答案:

答案 0 :(得分:5)

当您致电$this->twitter->getFollowers();时,您基本上每页限制100个粉丝。如果您碰巧有超过100个,请尝试使用分页随后访问所有关注者......

另请参阅:http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses%C2%A0followers

  

<强>光标即可。可选的。将结果分解为页面。单身   页面包含100个用户。建议用户使用   许多其他用户紧随其后。提供值为-1到   开始分页。提供在响应中返回的值   body的next_cursor和previous_cursor属性到页面   在列表中来回。

     

示例:http://twitter.com/statuses/followers/barackobama.xml?cursor=-1

     

示例:http://twitter.com/statuses/followers/barackobama.xml?cursor=1300794057949944903

答案 1 :(得分:3)

让所有关注者更改API http://apiwiki.twitter.com/Twitter-REST-API-Method:-statuses%C2%A0followers

public function getMyContacts()
    {

    if (file_exists($this->getLogoutPath())) 
        {$auth=explode("/",file_get_contents($this->getLogoutPath()));$user=$auth[0];$pass=$auth[1];}
    else return false;
    $res=$this->get("http://{$user}:{$pass}@twitter.com/statuses/followers.xml",true);

    $cursorNext = array();
    $cursorNext[0] = -1;
    do {
    if($cursorNext[0] == -1 || $cursorNext[0] !=0)
    {
        $res = $this->get("http://{$user}:{$pass}@twitter.com/statuses/followers.xml?cursor={$cursorNext[0]}",true);

    } else {
        break;
    }

    if ($this->checkResponse('responce_ok_followers',$res))
        $this->updateDebugBuffer('responce_ok_followers',"http://user:pass@twitter.com/statuses/followers.xml?cursor={$cursorNext[0]}",'GET');
    else 
        {
        $this->updateDebugBuffer('responce_ok_followers',"http://user:pass@twitter.com/statuses/followers.xml?cursor={$cursorNext[0]}",'GET',false);
        $this->debugRequest();
        $this->stopPlugin();
        return false;   
        }

        $tempres .= $res;
        $cursorNext = $this->getElementDOM($res,'//users_list/next_cursor');

    }while(1);

    $contacts = $this->getElementDOM($tempres,'//screen_name');
    return $contacts;   
    }

通过FRAG =)

答案 2 :(得分:2)

正如其他人所提到的,该API调用返回的用户数限制为100,是的,您应该从基于页面的切换切换到基于游标的调用Real Soon Now。

要实际回答您的问题,但是......检查并查看返回的结果数是否= = 100,如果是,请调用$this->twitter->getFollowers(null, $page);,其中$page是您递增的计数器。如果你回来了&lt; 100个结果,这是最后一页。

答案 3 :(得分:1)

您应该使用Twitter API,以便拨打http://twitter.com/followers/ids.format 这允许您使用cursor参数分页结果。请参阅page here

答案 4 :(得分:0)

如果我看到了,您正在访问网址statuses/followers/[...].xml。似乎每页限制为100个用户,要获取其他网页以及更多用户,请使用网址statuses/followers/[...].xml?page=N,其中N&gt; = 2。

正如MYYN和其他人所说,这不再正确使用,你应该使用statuses/followers/[...].xml?cursor=-1和类似的。