2012-12-30 4 views
1

So를 제공합니다. 목록 피드에서 모든 상태를 얻으려고합니다. 더 구체적으로,이 하나 https://dev.twitter.com/docs/api/1.1/get/lists/statusesTwitter API 1.1에서 오류 코드 32

그것은 내가 아는 한 OAuth 1.0a를 사용하고 있습니다. 나는 문제가 무엇인지 알아낼 수 없습니다

<?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/lists/statuses.json?slug=danskere-i-udlandet&owner_screen_name=d_fodbold&count=20"; 
$oauth_access_token = "29194047-Dzwsoo1KiQg69dbabt3nS2ezjjNzlbZdlKpLWsOOG"; 
$oauth_access_token_secret = "secret"; 
$consumer_key = "iCV8UbKjmq9LAw1XIvTQ"; 
$consumer_secret = "secret"; 
$oauth = array('oauth_consumer_key' => $consumer_key, 
       'oauth_nonce' => md5(microtime()), 
       '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)); 
$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); 
var_dump($twitter_data); 
exit();?> 

: 내 문제는 내가 다음 코드를 사용하고 에러 코드를 32

을 얻을 것이다.

여러분 중 일부는 할 수 있기를 바랍니다.

+0

내 생각 엔 오류는 $ url의 쿼리 문자열에있는 것 같습니다. 나는 그것이 무엇인지 알 수없는 것 같습니다. 나는 경험이 많지 않다. –

답변

2

내가 발견했습니다. 기준선이 만들어진 방식은 옳지 않았습니다.

querystring이 포함되어야하며 알파벳순으로 정렬되어야합니다.

0

oauth_nonce에 문제가 있다고 생각합니다. 나는 그 md5(microtime()) 좋은 nonce 생성기라고 생각하지 않습니다. 트위터 개발자 문서처럼 해보려고 약 authorizing requests 말한다 :

oauth_nonce 매개 변수는 응용 프로그램이 각각의 고유 한 요청을 생성해야 고유 토큰입니다. 트위터는 에이 값을 사용하여 요청이 여러 번 제출되었는지 여부를 결정합니다. 이 요청에 대한 값은 32 비트의 랜덤 데이터를 base64로 인코딩하고 비 단어 문자를 모두 제거하지만 접근 방식을 사용하여 비교적 임의의 영숫자 문자열을 생성합니다 ( 은 여기에서 확인해야 함).

+0

'md5 (microtime())'은 보통 괜찮다. 그러나,'uniqid()'는 더 좋을 것이다. –