2012-10-20 38 views
7

Chỉnh sửa: Tôi đã trả lời câu hỏi của riêng mình. Tôi không biết các nghi thức thích hợp để chỉ ra điều này trong câu hỏi ban đầu hoặc chỉ trả lời và chấp nhận nó.Trạng thái Twitter bị lỗi với thông số bổ sung

Làm cách nào để thêm các thông số bổ sung để lọc ra các tweet và trả lời?

Tôi đã cố gắng gửi câu hỏi đến diễn đàn twitter dev nhưng tôi nghĩ rằng tôi sẽ nhận được kết quả tốt hơn cũng yêu cầu tại đây.

Tôi đã sử dụng mã mẫu từ answer này để triển khai truy xuất trạng thái hoạt động. Tôi muốn thử và lọc ra các retweets và trả lời bằng cách sử dụng các thông số tôi thấy trên twitter dev api và cập nhật các url từ

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; 

để

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json?include_rts=false"; 

mà trả về một lỗi 23 "Không thể xác thực bạn ".

"Dự đoán" của tôi là tôi không nên bao gồm thông số bổ sung trong url cơ sở, nhưng dưới dạng tham số bổ sung vào mảng oauth, nơi mã mẫu đã được nhận xét.

// Make Requests 
$header = array(buildAuthorizationHeader($oauth), 'Expect:'); 
$options = array(CURLOPT_HTTPHEADER => $header, 
    //CURLOPT_POSTFIELDS => $postfields, 
    CURLOPT_HEADER => false, 
    CURLOPT_URL => $url, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_SSL_VERIFYPEER => false); 

Mã mẫu đầy đủ với mã thông báo đã loại bỏ.

<?php 

function buildBaseString($baseURI, $method, $params) { 
    $r = array(); 
    ksort($params); 
    foreach($params as $key=>$value){ 
     $r[] = "$key=" . rawurlencode($value); 
    } 
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); 
} 


function buildAuthorizationHeader($oauth) { 
    $r = 'Authorization: OAuth '; 
    $values = array(); 
    foreach($oauth as $key=>$value) 
     $values[] = "$key=\"" . rawurlencode($value) . "\""; 
    $r .= implode(', ', $values); 
    return $r; 
} 


//$url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; 
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json?include_rts=false"; 

$oauth_access_token = "removed"; 
$oauth_access_token_secret = "removed"; 
$consumer_key = "removed"; 
$consumer_secret = "removed"; 


$oauth = array('oauth_consumer_key' => $consumer_key, 
       'oauth_nonce' => time(), 
       'oauth_signature_method' => 'HMAC-SHA1', 
       'oauth_token' => $oauth_access_token, 
       'oauth_timestamp' => time(), 
       'oauth_version' => '1.0'); 


$base_info = buildBaseString($url, 'GET', $oauth); 
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); 
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); 
$oauth['oauth_signature'] = $oauth_signature; 


// Make Requests 
$header = array(buildAuthorizationHeader($oauth), 'Expect:'); 
$options = array(CURLOPT_HTTPHEADER => $header, 
        //CURLOPT_POSTFIELDS => $postfields, 
        CURLOPT_HEADER => false, 
        CURLOPT_URL => $url, 
        CURLOPT_RETURNTRANSFER => true, 
        CURLOPT_SSL_VERIFYPEER => false); 


$feed = curl_init(); 
curl_setopt_array($feed, $options); 
$json = curl_exec($feed); 
curl_close($feed); 


$twitter_data = json_decode($json); 

foreach ($twitter_data as $tweet) 
{ 
    $text = $tweet->text; 
    echo $text . "</br></br>"; 
} 

?> 
+3

Twitter cho biết yêu cầu là yêu cầu 'GET', vì vậy việc đặt tham số trong mảng' POST' có thể sẽ không cho kết quả mong muốn. –

+0

Tôi đồng ý. Tôi đã vẽ bằng ống hút với điều đó. – TEEKAY

+0

Ngay bây giờ tôi đã từ chức để lọc chúng ra khỏi chương trình sau khi thực tế, nhưng nhìn thấy bài đăng này trên các diễn đàn dev twitter và có vẻ như có liên quan. Cùng một mẫu mã, hướng khác nhau nhưng vấn đề tương tự. Tôi có thể sẽ điều tra nó sau. https://dev.twitter.com/discussions/12242 – TEEKAY

Trả lời

3

Vì vậy, thay đổi khá đơn giản. Các tham số không thuộc về url chính. Url chỉ là url cơ sở, sau đó các tham số được thêm vào mảng oauth và các tham số được bổ sung vào url trong mảng $ options.


Được hiển thị với hai thông số loại trừ các tweet và trả lời.

<?php 

function buildBaseString($baseURI, $method, $params) { 
    $r = array(); 
    ksort($params); 
    foreach($params as $key=>$value){ 
     $r[] = "$key=" . rawurlencode($value); 
    } 
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); 
} 


function buildAuthorizationHeader($oauth) { 
    $r = 'Authorization: OAuth '; 
    $values = array(); 
    foreach($oauth as $key=>$value) 
     $values[] = "$key=\"" . rawurlencode($value) . "\""; 
    $r .= implode(', ', $values); 
    return $r; 
} 


$url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; 

$oauth_access_token = "removed"; 
$oauth_access_token_secret = "removed"; 
$consumer_key = "removed"; 
$consumer_secret = "removed"; 


$oauth = array('exclude_replies' => 'true', 
       'include_rts' => 'false', 
       'oauth_consumer_key' => $consumer_key, 
       'oauth_nonce' => time(), 
       'oauth_signature_method' => 'HMAC-SHA1', 
       'oauth_token' => $oauth_access_token, 
       'oauth_timestamp' => time(), 
       'oauth_version' => '1.0'); 


$base_info = buildBaseString($url, 'GET', $oauth); 
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); 
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); 
$oauth['oauth_signature'] = $oauth_signature; 


// Make Requests 
$header = array(buildAuthorizationHeader($oauth), 'Expect:'); 
$options = array(CURLOPT_HTTPHEADER => $header, 
        //CURLOPT_POSTFIELDS => $postfields, 
        CURLOPT_HEADER => false, 
        CURLOPT_URL => $url . '?exclude_replies=true&include_rts=false', 
        CURLOPT_RETURNTRANSFER => true, 
        CURLOPT_SSL_VERIFYPEER => false); 


$feed = curl_init(); 
curl_setopt_array($feed, $options); 
$json = curl_exec($feed); 
curl_close($feed); 


$twitter_data = json_decode($json); 

foreach ($twitter_data as $tweet) 
{ 
    $text = $tweet->text; 
    echo $text . "</br></br>"; 
} 

?> 
+1

Đó là vấn đề của tôi ... cách lạ để gửi các tham số đơn giản. Không hiểu điều đó trong tài liệu API –

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