2012-11-03 4 views
2

매트 해리스의 tmhOAuth 라이브러리를 사용하여 Yelp의 API에 대한 인증 된 요청을 생성하고 있습니다. Twitter API에 액세스 할 때 이미 동일한 라이브러리를 사용하고 있으며 잘 작동합니다.tmhOAuth PHP 라이브러리를 사용하여 옐프 API에서 리뷰를 얻을 수 없습니다. 오류가 발생하지 않습니다.

옐프 개발자 API 자격증 명에 가입했으며이를 사용하고 있습니다. 당신은 내가 옐프에서 오류의 일종을 얻을 것이라고 생각에도 불구하고, 제대로

http://api.yelp.com/v2/search?limit=20&location=Atlanta&term=food

내 직감은 어떻게 든 내 인증 자격 증명이되고 있지 않습니다되어 출력 :

나는 같은 요청을하려면 tmhOAuth을 설정 이것에 관해서. 예를 들어, 소비자 키와 비밀 키와 사용자 토큰과 비밀 키를 임의의 문자로 변경하지만, 위조 키를 사용하여 요청할 때 아래에서와 동일한 응답을 얻고 인증 오류 메시지가 표시되지 않습니다. 아무것도 아니야!

다른 사람들이 Yelp API에 대한 호출을 처음 설정할 때 비슷한 반응이 나타나서 제가 잘못하고 있다는 것을 분명히 알 수 있습니다. 어떤 도움이라도 대단히 감사합니다.

내가 옐프에서 얻을 응답은 다음과 같습니다

Array ( 
    [headers] => Array ( 
    [date] => Sat, 03 Nov 2012 21:36:15 GMT 
    [server] => Apache 
    [x_node] => wsgi, web31, api_com 
    [content_length] => 0 
    [cache_control] => max-age=0, must-revalidate, no-cache, no-store, private 
    [expires] => Sat, 03 Nov 2012 21:36:15 GMT 
    [pragma] => no-cache [set_cookie] => bse=0aff211810c8d90f05c4e8438a3e0b7b; Domain=.yelp.com; Path=/; HttpOnly 
    [location] => http://api.yelp.com/v2/search?limit=20&location=Atlanta&term=food 
    [vary] => User-Agent 
    [connection] => close 
    [content_type] => text/html; charset=UTF-8 
    [x_mode] => rw 
    [x_proxied] => lb2 
    ) 
    [code] => 301 
    [response] => 
    [info] => Array ( 
    [url] => https://api.yelp.com/v2/search?limit=20&location=Atlanta&term=food 
    [content_type] => text/html; charset=UTF-8 
    [http_code] => 301 
    [header_size] => 534 
    [request_size] => 439 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 0.653941 
    [namelookup_time] => 0.000981 
    [connect_time] => 0.073796 
    [pretransfer_time] => 0.297663 
    [size_upload] => 0 
    [size_download] => 0 
    [speed_download] => 0 
    [speed_upload] => 0 
    [download_content_length] => 0 
    [upload_content_length] => 0 
    [starttransfer_time] => 0.653791 
    [redirect_time] => 0 
    [certinfo] => Array () 
    [request_header] => GET 

     /v2/search?limit=20&location=Atlanta&term=food 
     HTTP/1.1 User-Agent: themattharris' HTTP 
     Client Host: api.yelp.com Accept: */* Authorization: OAuth 
     oauth_consumer_key="****************", 
     oauth_nonce="*******************", 
     oauth_signature="***************************", 
     oauth_signature_method="HMAC-SHA1", 
     oauth_timestamp="1351978544", 
     oauth_token="******************", 
     oauth_version="1.0" 
    ) 
    ) 

내가 분명이 게시물에 대한 위의 실제 키, 넌스 및 서명 문자열을 난독했습니다.

+0

브라우저가 표시하고 렌더링하는 것이 아니라 원본 페이지 _의 var_dump()/print_r() 출력을 복사하여 붙여 넣으십시오. 그것은 읽을 수 있도록 줄 바꿈과 들여 쓰기를 그대로 유지합니다. –

+0

죄송합니다. 이런, 나는 질문을 게시 할거라는 것을 알고 있었고 매우 첫 번째 응답은 손에 때리는 것입니다. 물론, 당신 말이 맞습니다. 그것은 더 읽기 쉽고 의심의 여지가 없습니다. 귀하의 회신에 감사드립니다. –

답변

1

좋아요. StackOverflow를 다른 사람들의 질문에 대한 해답을 읽는 것만으로 몇 년을 보냈다가 여기에 게시 한 첫 번째 진정한 질문입니다. 겸손한 파이를 먹고 직접 대답해야합니다.

먼저 응답 배열의 대부분 위 목록은 oAuth 라이브러리 자체에서 생성 한 것입니다. Yelp의 실제 "응답"은 [응답] 배열 항목에 저장되었으며 비어있었습니다.

"웹 사이트는 언제 응답을하지 않습니까?" 응답으로 페이지 내용이 없다면 http 헤더의 브라우저에 지시 사항을 전송할 때뿐입니다.

물론 Yelp HAD가 응답했습니다. https : // url에서 http : // url로 리디렉션하려고 했으므로 브라우저에 다른 URL에서 재 시도하겠다고 알려주는 응답 코드 301로 응답했지만 cUrl을 사용하고 있었고 컬이 그랬습니다. 자동으로 리디렉션되지 않습니다. 그것은 간단히 초기 서버 응답을 oAuth lib에 전달했는데, 이는 현명하게 301을보고했습니다.

이전에 http : // url을 시도했지만 그 방법은 oAuth lib에 param을 전달하는 것입니다. 배열 항목 'use_https'=> false. 나는 실수로 'false'를 문자열로 넣었으므로 TRUE로 평가되어 https : //를 계속 사용했고 301 리디렉션이 계속 전송되었습니다.

두 번째로 'use_https'= false를 사용하기 시작했는데, 하늘에서 만나와 같은 화면을 채우는 나의 사랑하는 옐프 리뷰를 받았습니다.

하지만 어쩌면 내 우스운 고통이 다른 가난한 영혼을 도울 것입니다.