访问vimeo高级API时出错

时间:2013-07-23 06:21:25

标签: iphone objective-c vimeo

我在获取vsono高级搜索api时以json格式收到此错误这是错误

{"code":"401","expl":"The oauth_token passed has not been authorized by the user.","msg":"Invalid token"}}

这是我在vimeo上进行身份验证的代码。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    consumer = [[OAConsumer alloc] initWithKey:@"xxxxxxxxxxxx"
                                                    secret:@"xxxxxxxxxxxx"];

    NSURL *url = [NSURL URLWithString:@"https://vimeo.com/oauth/request_token"];

    OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url
                                                                   consumer:consumer
                                                                      token:nil   // we don't have a Token yet
                                                                      realm:nil   // our service provider doesn't specify a realm
                                                          signatureProvider:nil]; // use the default method, HMAC-SHA1

    [request setParameters: [NSArray arrayWithObjects: [[OARequestParameter alloc] initWithName: @"oauth_callback" value: @"http://iosdevelopertips.com/networking/iphone-json-flickr-tutorial-part-1.html"] ,nil]];

    [request setHTTPMethod:@"GET"];

    OADataFetcher *fetcher = [[OADataFetcher alloc] init];

    [fetcher fetchDataWithRequest:request
                         delegate:self
                didFinishSelector:@selector(requestTokenTicket:didFinishWithData:)
                  didFailSelector:@selector(requestTokenTicket:didFailWithError:)];

}

- (void)requestTokenTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
    NSLog(@"ticket value %@",ticket);
    if (ticket.didSucceed) {
        NSString *responseBody = [[NSString alloc] initWithData:data
                                                       encoding:NSUTF8StringEncoding];
        requestToken = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
    }
    NSString *urlString = [NSString stringWithFormat:@"https://vimeo.com/oauth/authorize?auth_token=%@", requestToken.key];
    NSURL *urlAuth = [NSURL URLWithString:urlString];
    [[UIApplication sharedApplication] openURL:urlAuth];

    NSURL *url = [NSURL URLWithString:@"http://vimeo.com/api/rest/v2?method=vimeo.videos.search"];
    OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url
                                                                   consumer:consumer
                                                                      token:requestToken
                                                                      realm:nil
                                                          signatureProvider:[[OAHMAC_SHA1SignatureProvider alloc] init]];

    OARequestParameter *nameParam = [[OARequestParameter alloc] initWithName:@"format"
                                                                       value:@"json"];
    OARequestParameter *descParam = [[OARequestParameter alloc] initWithName:@"query"
                                                                       value:@"amir khan"];
    NSArray *params = [NSArray arrayWithObjects:nameParam, descParam, nil];
    [request setParameters:params];

    OADataFetcher *fetcher = [[OADataFetcher alloc] init];
    [fetcher fetchDataWithRequest:request
                         delegate:self
                didFinishSelector:@selector(requestTokenTicket2:didFinishWithData:)
                  didFailSelector:@selector(requestTokenTicket2:didFinishWithData:)];
}

- (void)requestTokenTicket2:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data
{
    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"data string %@",dataString);
}

1 个答案:

答案 0 :(得分:0)

错误消息“传递的oauth_token未经用户授权”表示您正在使用请求令牌,而不是访问令牌。

请求令牌是您在使用应用程序进行身份验证之前获得的令牌。 此令牌用于构建您向用户发送的网址。

用户在vimeo.com上批准了您的应用后,系统会将其重定向到您的应用。此时,您应该将请求令牌交换为访问令牌。