2010-08-09 37 views
6

Tôi đang làm việc để tạo lưới script bằng OAuth thay vì Basic Auth và tôi bị kẹt. Cho đến nay, tôi chỉ đang làm việc xác thực vào lúc này, nhưng tôi không thể làm việc đó. Mã này:Truy cập API Twitter qua PHP

<?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 />'; 

chỉ hoạt động tốt. Tuy nhiên, khi tôi thực hiện bước này:

// 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 />'; 

?> 

Tôi nhận được một trang Không có sẵn, Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error. Có ai quen thuộc với vấn đề này không? Tôi đã theo dõi tài liệu một cách chặt chẽ nhất có thể, nhưng khi tôi là một tân binh hoàn toàn, tôi chắc chắn rằng tôi đã mắc phải một số sai lầm ngu ngốc.

Ngoài ra, một câu hỏi tiếp theo: Khi tôi nhận được tập lệnh của mình cho phép thông qua quy trình này, bước tiếp theo của tôi là lấy nguồn cấp dữ liệu bạn bè xml là gì? Tôi có thể chỉ cURL như trước đây không?

EDIT: Nguồn cho getAccessToken(); là như sau:

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; 
    } 

Và vâng, config.php là đúng.

+0

bạn có thể đăng nguồn cho hàm 'getAccessToken()' ?? –

+0

Thư viện API tôi đã sử dụng là của Abraham, liên kết đầu tiên trong PHP trong phần thư viện của Twitter API Wiki. Tôi không tự viết hàm đó, xin lỗi. – Andy

+0

Buuuut Tôi đặt nó lên. 99 và chắc chắn đó là nguồn mở. – Andy

Trả lời

1

Tôi đã sử dụng api này để xác thực oauth dựa trên pin cho twitter. Tôi đã sử dụng thư viện đơn giản oauth php http://php.net/manual/en/book.oauth.php.

Đây là mã nếu bạn muốn xem.



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

Kiểm tra xem CONSUMER_KEYCONSUMER_SECRET có giống với các giá trị trong trang ứng dụng của bạn trên twitter không.

URL ủy quyền được trả lại từ phương thức là gì?

0

Tôi đã sử dụng API này và nó hoạt động tốt cho tôi. Không có gì khác đề cập đến ngoại trừ thực sự kiểm tra rằng CONSUMER_KEY và CONSUMER_SECRET, như Ian Quigley nói Bởi vì bạn nói $ _SESSION ['oauth_token'] của bạn trống, và nó không nên. Lý do tại sao giá trị rỗng của nó có thể là giá trị sai trong CONSUMER_KEY và CONSUMER_SECRET Nếu bạn gửi sai khóa cho Twitter, nó không cung cấp cho bạn các biến phiên đó bạn cần

Chỉ cần kiểm tra xem các giá trị đó trong https://twitter.com/apps (dữ liệu ứng dụng của bạn) và trong tệp config.php giống hệt nhau. Theo mặc định, config.php chứa các giá trị sai, bạn cần điền vào các giá trị của riêng bạn.

Các vấn đề liên quan