2012-10-20 17 views
7

संपादित करें: मैंने अपने स्वयं के प्रश्न का उत्तर दिया। मैं इसे मूल प्रश्न में इंगित करने के लिए उचित शिष्टाचार नहीं जानता हूं या सिर्फ जवाब दे रहा हूं और इसे स्वीकार कर रहा हूं।ट्विटर प्राप्त स्थिति अतिरिक्त पैरामीटर के साथ विफल हो जाती है

मैं रीट्वीट और उत्तरों को फ़िल्टर करने के लिए अतिरिक्त पैरामीटर कैसे जोड़ूं?

मैंने ट्विटर देव मंचों पर एक प्रश्न सबमिट करने का प्रयास किया लेकिन मुझे लगता है कि मुझे बेहतर परिणाम भी मिलेंगे।

मैंने स्थिति के कामकाजी पुनर्प्राप्ति को लागू करने के लिए इस answer से नमूना कोड का उपयोग किया है। मैं

$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"; 

जो एक त्रुटि 23 "नहीं किया जा सका रिटर्न के लिए कोशिश करते हैं और मापदंडों मैं चहचहाना देव api पर देखा का उपयोग करके रीट्वीट और उत्तरों को फ़िल्टर और अद्यतन करने के लिए यूआरएल चाहते हैं आपको प्रमाणित करें "।

मेरा "अनुमान" यह है कि मुझे बेस यूआरएल में अतिरिक्त पैरामीटर शामिल नहीं करना चाहिए, लेकिन ओथ एरे में अतिरिक्त पैरामीटर के रूप में जहां नमूना कोड पर टिप्पणी की गई थी।

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

हटाए गए टोकन के साथ पूर्ण नमूना कोड।

<?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

ट्विटर का कहना है कि अनुरोध 'प्राप्त करें' अनुरोध है, इसलिए 'POST' सरणी में पैरामीटर डालने से वांछित परिणाम नहीं मिलेगा। –

+0

मैं सहमत हूं। मैं उस के साथ स्ट्रॉ पर चित्रित कर रहा था। – TEEKAY

+0

अभी इस तथ्य के बाद प्रोग्रामेटिक रूप से उन्हें फ़िल्टर करने के लिए इस्तीफा दे दिया गया है, लेकिन इस पोस्ट को ट्विटर देव मंचों पर देखा और यह प्रासंगिक लगता है। समान कोड नमूना, अलग दिशा लेकिन समान समस्या। मैं शायद बाद में इसकी जांच करूंगा। https://dev.twitter.com/discussions/12242 – TEEKAY

उत्तर

3

तो परिवर्तन बहुत आसान है। पैराम मुख्य यूआरएल में नहीं हैं। यूआरएल सिर्फ बेस यूआरएल है, फिर पैरा को ओथ एरे में जोड़ा जाता है, और पैराम्स को अतिरिक्त विकल्प यूआरएल में यूआरएल में जोड़ा जाता है।


दो पैरामीटर के साथ दिखाए गए ट्वीट्स और उत्तरों को छोड़ दें।

<?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

यह मेरी समस्या थी ... सरल पैरामीटर भेजने का अजीब तरीका। एपीआई दस्तावेज में इसे पकड़ नहीं लिया –