我正在寫一個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)
任何進一步的非常感謝幫助!
Yelp的API使用OAuth 1.0a,所以我嘗試使用AFOAuth1Client來生成我的請求。 HTTP授權標頭中的值看起來正確,但Yelp API正在返回無效簽名錯誤。我將用我正在使用的代碼和錯誤文本更新我的問題。 –