开发者

php twitter class not working anymore

So I have been using an open source twitter php class I got a few months back, and all of a sudden, it started to throw me errors last night. You can see what is happening here:

www.campusmediawatch.org

It says it requires authentication but I do authenticate and it has been working for months since last night. Any ideas? Here are the functions:

public function getFriends($id = null, $page = null)
{
    // build parameters
    $aParameters = array();
    if($page !== null) $aParameters['page'] = (int) $page;

    // build url
    $url = 'statuses/friends.xml';
    if($id !== null) $url = 'statuses/friends/'. 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;
}

And here is the code that makes the curl call:

private function doCall($url, $aParameters = array(), $authenticate = false, $usePost = true)
{
    // redefine
    $url = (string) $url;
    $aParameters = (array) $aParameters;
    $authenticate = (bool) $authenticate;
    $usePost = (bool) $usePost;

    // build url
    $url = self::TWITTER_API_URL .'/'. $url;

    // validate needed authentication
    if($authenticate && ($this->getUsername() == '' || $this->getPassword() == '')) throw new TwitterException('No username or password was set.');

    // rebuild url if we don't use post
    if(!empty($aParameters) && !$usePost)
    {
        // init var
        $queryString = '';

        // loop parameters and add them to the queryString
        foreach($aParameters as $key => $value) $queryString .= '&'. $key .'='. urlencode(utf8_encode($va开发者_开发知识库lue));

        // cleanup querystring
        $queryString = trim($queryString, '&');

        // append to url
        $url .= '?'. $queryString;
    }

    // set options
    $options[CURLOPT_URL] = $url;
    $options[CURLOPT_PORT] = self::TWITTER_API_PORT;
    $options[CURLOPT_USERAGENT] = $this->getUserAgent();
    $options[CURLOPT_FOLLOWLOCATION] = true;
    $options[CURLOPT_RETURNTRANSFER] = true;
    $options[CURLOPT_TIMEOUT] = (int) $this->getTimeOut();

    // should we authenticate?
    if($authenticate)
    {
        $options[CURLOPT_HTTPAUTH] = CURLAUTH_BASIC;
        $options[CURLOPT_USERPWD] = $this->getUsername() .':'. $this->getPassword();
    }

    // are there any parameters?
    if(!empty($aParameters) && $usePost)
    {
        $var = '';

        // rebuild parameters
        foreach($aParameters as $key => $value) $var .= '&'. $key .'='. urlencode($value);

        // set extra options
        $options[CURLOPT_POST] = true;
        $options[CURLOPT_POSTFIELDS] = trim($var, '&');

        // Probaly Twitter's webserver doesn't support the Expect: 100-continue header. So we reset it.
        $options[CURLOPT_HTTPHEADER] = array('Expect:');
    }

    // init
    $curl = curl_init();

    // set options
    curl_setopt_array($curl, $options);

    // execute
    $response = curl_exec($curl);
    $headers = curl_getinfo($curl);

    // fetch errors
    $errorNumber = curl_errno($curl);
    $errorMessage = curl_error($curl);

    // close
    curl_close($curl);

    // validate body
    $xml = @simplexml_load_string($response);
    if($xml !== false && isset($xml->error)) throw new TwitterException((string) $xml->error);

    // invalid headers
    if(!in_array($headers['http_code'], array(0, 200)))
    {
        // should we provide debug information
        if(self::DEBUG)
        {
            // make it output proper
            echo '<pre>';

            // dump the header-information
            var_dump($headers);

            // dump the raw response
            var_dump($response);

            // end proper format
            echo '</pre>';

            // stop the script
            exit;
        }

        // throw error
        throw new TwitterException(null, (int) $headers['http_code']);
    }

    // error?
    if($errorNumber != '') throw new TwitterException($errorMessage, $errorNumber);

    // return
    return $response;
}


I managed to find the twitter library you are using in a wordpress plugins repository. I hope it is the same one.

I played around with my account using it and I managed to get it working alright. I think you might have to try and log into your twitter account because that error only seems to occur when your account username and password are invalid (thus failed to authenticate on twitter)

So try and log in to your account and make sure your username and password are the same as what you using to initialize the twitter class.

e.g.

$twitter_api = new Twitter(<username>, <password>);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜