0

私はYouTube APIで作業しようとしています。お気に入りリストを取得し、指定したビデオをそのリストに追加するには、2 つの方法があります。どちらの方法も機能しません。以下のようなエラーを受け取りました: HTTP/1.1 401 Unknown authorization headererror. これが私のコードです:

#define CONNECTION_YOUTUBE                  @"https://gdata.youtube.com/feeds/api/"
#define CONNECTION_ADD_FAVORITE_VIDEO @"users/default/favorites"
#define CONNECTION_GET_FAVORITE_LIST @"https://gdata.youtube.com/feeds/api/users/default/favorites"

- (void) getFavoriteList{
    NSURL *url = [NSURL URLWithString:CONNECTION_GET_FAVORITE_LIST];
    ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];
    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    [request addRequestHeader:@"Authorization" value:[@" Bearer "  stringByAppendingString:[appDelegate userInfo].accessTokenYoutube ]];
    [request addRequestHeader:@"X-GData-Key" value:[NSString stringWithFormat:@"key=%@",YOUTUBE_DEVELOPER_KEY]];

    [request startAsynchronous];
    [request setCompletionBlock:^{
        NSString* respondMessage = [request responseStatusMessage];
        NSLog(@"Respond compelet with message: %@",respondMessage);
    }];
    [request setFailedBlock:^{
        NSString* respondMessage = [request responseStatusMessage];
        NSLog(@"Respond failed with message: %@",respondMessage);
    }];
    [request release];
}
- (void) addToFavoriteTheVideoWithID:(NSString *)strVideoID{

    //prepare url
    NSString *rawUrl = [NSString stringWithFormat:@"%@%@", CONNECTION_YOUTUBE, CONNECTION_ADD_FAVORITE_VIDEO    ];
    NSURL *url = [[NSURL URLWithString:rawUrl] autorelease];

    ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];

    //prepare form body
    NSString *rawXML = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?> <entry xmlns=\"http://www.w3.org/2005/Atom\"><yt:videoid>xxxx%@</yt:videoid></entry>",strVideoID];
    NSMutableData *soapData = [[[NSMutableData alloc]initWithData:[rawXML dataUsingEncoding:NSUTF8StringEncoding ]]autorelease] ;
    [request setPostBody:soapData];

    //prepare request header
    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    [request setRequestMethod:@"POST"];
    [request addRequestHeader:@"SOAPAction" value:@""];
    [request addRequestHeader:@"Content-Type" value:@"application/atom+xml"];
    [request addRequestHeader:@"Content-Length" value:[NSString stringWithFormat:@"%d",soapData.length]];
    [request addRequestHeader:@"Authorization" value:[@" Bearer "  stringByAppendingString:[appDelegate userInfo].accessTokenYoutube ]];
   // NSString* token = [@" Bearer "  stringByAppendingString:[appDelegate userInfo].accessTokenYoutube ];
    [request addRequestHeader:@"GData-Version" value:@"2"];
    [request addRequestHeader:@"X-GData-Key" value:[NSString stringWithFormat:@"key=%@",YOUTUBE_DEVELOPER_KEY]];

    [request startAsynchronous];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(didAddVideoToFavoriteFinish: )];
    [request setDidFailSelector:@selector(didAddVideoToFavoriteFail:)];

}

助けてください。本当にありがとう。

4

1 に答える 1

0

手動でリクエストを作成する (そしてさまざまな潜在的な問題に直面する) のではなく、GData Objective-C クライアント ライブラリを使用することを強くお勧めします ( YouTube Data API の v2を使用する場合) 。 Google APIのObjective-C クライアント ライブラリ ( YouTube Data APIの新しい v3 を使用する場合)。

これらのライブラリのいずれかにより、承認とリクエストのプロセスが簡素化されます。

于 2012-12-28T17:32:52.183 に答える