Доступ к API Twitter через PHP - PullRequest
       5

Доступ к API Twitter через PHP

6 голосов
/ 09 августа 2010

Я работаю над созданием сетки скриптов с OAuth вместо Basic Auth, и я застрял. Пока что я просто работаю над аутентификацией, но я не могу заставить это работать. Этот код:

<?php

  include 'config.php';
  include 'twitteroauth/twitteroauth.php';

  // Use config.php credentials
  $conn = new TwitterOAuth(CONSUMER_KEY,CONSUMER_SECRET);

  // Use application's registered callback URL
  // And get temporary credentials using made connection
  $tempCred = $conn->getRequestToken();

  // Use 'Sign in with Twitter'
  // for Redirect URL
  $rURL = $conn->getAuthorizeURL($tempCred);

  echo '<a href="'.$rURL.'">1. Click me first!</a><br />';

работает просто отлично. Однако, когда я доберусь до этого шага:

  // Build a new TwitterOAuth connection
  // Now that the app has verified credentials
  $conn = new TwitterOAuth(CONSUMER_KEY,
                           CONSUMER_SECRET,
                           $_SESSION['oauth_token'],
                           $_SESSION['oauth_token_secret']);

  // Get non-temporary credentials from Twitter
  $tokenCred = $conn->getAccessToken();

  echo '<a href="index.php">2. Click me next!</a><br />';

?>

Я получаю страницу недоступна, Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error. Кто-нибудь знаком с этой проблемой? Я внимательно следил за документацией, но, поскольку я полный новичок, я уверен, что совершил какую-то глупую ошибку.

Кроме того, еще один вопрос: как только я получу авторизацию своего сценария с помощью этого процесса, каков мой следующий шаг в плане получения канала друзей xml? Могу ли я просто cURL как раньше?

РЕДАКТИРОВАТЬ: источник для getAccessToken(); выглядит следующим образом:

 function getAccessToken($oauth_verifier = FALSE) {
    $parameters = array();
    if (!empty($oauth_verifier)) {
      $parameters['oauth_verifier'] = $oauth_verifier;
    }
    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
    $token = OAuthUtil::parse_parameters($request);
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
    return $token;
  }

И да, config.php верен.

Ответы [ 3 ]

1 голос
/ 11 августа 2010

Я использовал этот API-интерфейс для проверки подлинности oauth на основе pin-кода для Twitter. Я использовал php simple oauth library http://php.net/manual/en/book.oauth.php.

Вот код, если вы хотите увидеть.



class TwitterPinBasedOauth{
    private static $requestTokenUrl = 'http://twitter.com/oauth/request_token';
    private static $accessTokenUrl = 'http://twitter.com/oauth/access_token';
    private static $authorizeUrl = 'http://twitter.com/oauth/authorize';
    private static $updateUrl = 'http://twitter.com/statuses/update.json';

    private $twitterOauth;
    public function __construct(){
        $this->twitterOauth = new OAuth(ConsumerToken::$CONSUMER_KEY,
                                        ConsumerToken::$CONSUMER_SECRET,
                                        OAUTH_SIG_METHOD_HMACSHA1,
                                        OAUTH_AUTH_TYPE_AUTHORIZATION);
    }

    public function getAndStoreRequestToken(){
        $callbackUrl = "oob";
        $response = $this->twitterOauth->getRequestToken(self::$requestTokenUrl, $callbackUrl);
        print_r("REQUEST TOKEN:\n");
        print_r($response);
        print_r(PHP_EOL);
        file_put_contents(Constants::$oauth_request_file, serialize($response));
        echo "AUTH URL:\n".self::$authorizeUrl."?oauth_token=".$response['oauth_token'].PHP_EOL;
    }
    public function getAcessToken($pin){
        $request_tokens = unserialize(file_get_contents(Constants::$oauth_request_file));
        $this->twitterOauth->setToken($request_tokens["oauth_token"],$request_tokens["oauth_token_secret"]);
        $response = $this->twitterOauth->getAccessToken(self::$accessTokenUrl, NULL, $pin);

        file_put_contents(Constants::$oauth_access_file, serialize($response));

        print_r("ACESS TOKEN:\n");
        print_r($response);
        print_r(PHP_EOL);
    }
    public function updateStatus($status){
        try{
            $access_tokens = unserialize(file_get_contents(Constants::$oauth_access_file));
            $this->twitterOauth->setToken($access_tokens["oauth_token"],$access_tokens["oauth_token_secret"]);
            $this->twitterOauth->fetch(self::$updateUrl,
                                    array('status' => $status),
                                    OAUTH_HTTP_METHOD_POST);
        }
        catch(OAuthException $e){
            error_log($e->getMessage().PHP_EOL);
            return intval($e->getCode());
        }
   }
} 

0 голосов
/ 09 августа 2010

Я использовал этот API, и он работал нормально для меня. Ничего другого не приходит на ум, кроме как на самом деле проверять, что CONSUMER_KEY и CONSUMER_SECRET, как сказал Ян Куигли Потому что вы говорите, что ваш $ _SESSION ['oauth_token'] пуст, и это не должно быть. Причиной, по которой он может быть пустым, могут быть неправильные значения в CONSUMER_KEY и CONSUMER_SECRET Если вы отправляете неверные ключи в Twitter, он не дает вам те переменные сеанса, которые вам нужны

Просто проверьте, совпадают ли эти значения в https://twitter.com/apps (данные вашего приложения) и в файле config.php. По умолчанию config.php содержит неправильные значения, вам нужно заполнить свои собственные.

0 голосов
/ 09 августа 2010

Убедитесь, что CONSUMER_KEY и CONSUMER_SECRET совпадают со значениями на странице вашего приложения в твиттере.

Какой URL-адрес авторизации возвращается из метода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...