2012-11-03 30 views
2

我使用馬特哈里斯的tmhOAuth庫生成一個驗證的請求,以Yelp的API。我已經在使用相同的庫來訪問Twitter API,並且它運行良好。無法使用tmhOAuth php庫從Yelp API獲取評論。我得到沒有錯誤

我已經註冊了Yelp Developer API證書並正在使用它們。

我成立了tmhOAuth做出那樣的要求:正確地

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

我的預感是不知我的身份驗證憑據沒有被輸出,即使你會認爲我會得到某種錯誤來自Yelp的對這個。例如,我將消費者密鑰和祕密以及我的用戶令牌和密碼更改爲隨機字符,但是當我使用這些假密鑰發出請求時,我會得到與下面相同的響應,並且仍然沒有驗證錯誤消息。根本不值一提!

我確定別人,當他們第一次設置他們對Yelp API的調用時,可能會遇到類似的響應,並告訴我一些明顯的錯誤信息。任何幫助是極大的讚賞。

我從Yelp的得到的迴應是:

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

請複製/粘貼_the page source_的var_dump()/ print_r()'輸出,而不是瀏覽器顯示和呈現的輸出。它將保留換行符和縮進以使其可讀。 –

+0

對不起。吉茲,我知道我會提出一個問題,第一個迴應就是一巴掌。當然,你是對的,它更清晰,毫無疑問。感謝您的答覆。 –

回答

1

太好了。我在使用StackOverflow幾年後發佈的第一個真正的真實問題,只需閱讀其他人的問題的答案,然後我必須自己吃點謙虛的餡餅,自己回答問題:

首先,大部分響應數組我上面列出的是由oAuth庫本身構建的。來自Yelp的實際「響應」存儲在[response]數組項中,並且它是空的。

我問自己,「網站什麼時候沒有迴應?」如果通過我們的迴應,我們的意思是,沒有頁面內容,它只是當它發送一些指示給瀏覽器的HTTP頭。

當然,Yelp HAD迴應。它希望將我從https:// url重定向到http:// url,因此它使用響應代碼301進行響應,該響應代碼告訴瀏覽器要在其他網址重試,但我使用的是cUrl,並且使用了curl不自動重定向。它只是將初始服務器響應傳遞給oAuth庫,該庫精簡地報告了301.

我之前嘗試過http:// url,但是要做到這一點的方法是將一個參數傳遞給oAuth庫,作爲數組項'use_https'=> false。我錯誤地將'false'作爲一個字符串,所以它評估爲TRUE並繼續使用https://並且301重定向仍然被髮送。

第二個我開始使用'use_https'=> false,我得到了我喜歡的Yelp評論,填滿屏幕就像天降甘露一樣。

但是,也許我的荒謬的辛勞將幫助其他一些可憐的靈魂,我希望。