2013-08-23 38 views
3

我正在寫一個iOS應用程序,請求來自Yelp的數據。我可以使用RestKit 0.20.3提交Yelp所需的OAuth參數請求嗎?

我目前擁有管理Yelp請求/響應並解析內部返回的JSON數據的代碼。當前代碼使用Jon Crosby的OAuthConsumer爲其請求構建OAuth參數。

昨天我來到了RestKit,發現它非常有吸引力。這可能會消除我正在做的大部分請求提交和響應解析。

但是我遇到了障礙,因爲我一直無法弄清楚如何生成Yelp需要的RestKit的OAuth參數。我通過​​3210上的Ray Wenderlich RestKit教程工作,但它使用客戶端ID和客戶端密鑰(按照Foursquare的要求)。

Yelp請求需要擁有消費者密鑰,令牌,簽名方法,簽名,時間戳和隨機數。我一直無法找到可以生成這組特定OAuth參數的RestKit附加組件。

我現在使用Matt Thompson開發的AFOAuth1Client生成我的RestKit GET請求。現在,當我發送請求時,Yelp API正在返回無效簽名錯誤。

我很困惑,因爲我檢查了HTTP授權標題中的字段,它們看起來正確。該錯誤似乎表明,Yelp需要URL中的oauth參數,但API文檔聲明可以將它們發送到授權標頭中。

這裏是無效簽名錯誤我發現了:

2013年8月26日15:34:54.806 RestKitYelpGroupon [2157:400B]Èrestkit.network:RKObjectRequestOperation.m:575對象請求失敗:標的HTTP請求操作失敗,出現錯誤:錯誤域= org.restkit.RestKit.ErrorDomain代碼= -1011「(200-299)中的預期狀態代碼,得到400」UserInfo = 0xa876190 {NSLocalizedRecoverySuggestion = {「error」:{「text」 :「Signature was invalid」,「id」:「INVALID_SIGNATURE」,「description」:「無效簽名。預期簽名基礎字符串:GET \ u0026http%3A%2F%2Fapi.yelp.com%2Fv2%2Fsearch \ u0026ll%3D32。 893282%252C-117.195083%26oauth_consumer_key%3D(MY CONSUMER KEY)%26oauth_nonce%3DC0F25D91-B473-4059-B5F6-2D850A144A1D%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D137 7556409%26oauth_token%3D(MY OAUTH TOKEN)%26oauth_version%3D1.0%26term%3Dsushi「}},AFNetworkingOperationFailingURLRequestErrorKey = http://api.yelp.com/v2/search?ll = 32.893282%2C-117.195083 & term =在(200-299),得到400,AFNetworkingOperationFailingURLResponseErrorKey =}

這裏是我使用以生成請求的代碼壽司>,NSErrorFailingURLKey = http://api.yelp.com/v2/search?ll=32.893282%2C-117.195083&term=sushi,NSLocalizedDescription =預期狀態碼:

NSURL *baseURL = [NSURL URLWithString:@"http://api.yelp.com/v2"]; 
AFOAuth1Client *oauth1Client = [[AFOAuth1Client alloc] initWithBaseURL:baseURL key:consumerKey secret:consumerSecret]; 
oauth1Client.accessToken = [[AFOAuth1Token alloc] initWithKey:tokenKey 
               secret:tokenSecret 
               session:nil 
              expiration:[NSDate distantFuture] 
              renewable:NO]; 

[oauth1Client registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

// Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1 
[oauth1Client setDefaultHeader:@"Accept" value:@"application/json"]; 

RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:oauth1Client]; 

RKObjectMapping *couponMapping = [RKObjectMapping mappingForClass:[Coupon class]]; 
[couponMapping addAttributeMappingsFromDictionary:@{@"id" : @"id"}]; 

RKObjectMapping *businessMapping = [RKObjectMapping mappingForClass:[Business class]]; 
[businessMapping addAttributeMappingsFromDictionary:@{@"name" : @"name"}]; 
[businessMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"deals" toKeyPath:@"location" withMapping:couponMapping]]; 

RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor  
    responseDescriptorWithMapping:businessMapping 
    method:RKRequestMethodGET 
    pathPattern:nil 
    keyPath:@"response.venues" 
    statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:responseDescriptor]; 
[objectManager getObjectsAtPath:@"http://api.yelp.com/v2/search" 
        parameters:queryParams 
         success:^(RKObjectRequestOperation * operaton, RKMappingResult *mappingResult) 

任何進一步的非常感謝幫助!

回答

0

看看使用AFOAuth2Client並將其設置爲客戶端,當您init您的RKObjectManager

+0

Yelp的API使用OAuth 1.0a,所以我嘗試使用AFOAuth1Client來生成我的請求。 HTTP授權標頭中的值看起來正確,但Yelp API正在返回無效簽名錯誤。我將用我正在使用的代碼和錯誤文本更新我的問題。 –

相關問題