こんにちは、xcode で google-api ライブラリを使用して YouTube API からチャンネル オブジェクトをフェッチしようとしています。これは私が使用しているコードです:
//youtubeService type is GTLServiceYouTube
youtubeService = [[GTLServiceYouTube alloc] init];
youtubeService.shouldFetchNextPages = YES;
//auth is the object from the authentication callback
youtubeService.authorizer = auth;
videoQuery = [GTLQueryYouTube
queryForChannelsListWithPart:@"RayWilliamJohnson"];
videoQuery.maxResults = 20;
youtubeTicket = [youtubeService executeQuery:videoQuery completionHandler:
^(GTLServiceTicket *ticket, id channel, NSError *error) {
NSLog(@" %@ ", error.description);
NSLog(@"WIN! : %@ ", channel);
}];
これまでのところ、このエラーが発生しています:
エラー Domain=com.google.GTLJSONRPCErrorDomain Code=-32602 「操作を完了できませんでした。(RayWilliamJohnson)」 UserInfo=0x7532c40 {error=RayWilliamJohnson、GTLStructuredError=GTLErrorObject 0x7533d30: {メッセージ:"RayWilliamJohnson" コード:-32602 データ: [1]}、NSLocalizedFailureReason=(RayWilliamJohnson)}
何がこのエラーをスローしているのか分かりますか?
助けてくれてありがとう!
編集:単に「存在しない」クラスのドキュメントを読みました:P。同じアプローチに従う他の例も確認しました。
Edit2 :わかりました、次の変更を試しましたが、どれも機能しませんでした:(、クエリエクスプローラーで同じ例を使用して機能しました。
videoQuery.maxResults = 20;
videoQuery.q = @"RayWilliamJohnson";
videoQuery.type = @"channel";
/*tried setting the part without calling the query
method on GTLQueryYoutube but that did not work videoQuery.part = @"id";*/
videoQuery = [GTLQueryYouTube queryForChannelsListWithPart:@"id"];
//fetching only 20 items.
youtubeTicket = [youtubeService executeQuery:videoQuery completionHandler:
^(GTLServiceTicket *ticket, id channel, NSError *error) {
NSLog(@" %@ ", error.description);
NSLog(@"WIN! : %@ ", channel);
}];
エラーは少し異なります。フィルターを指定したにもかかわらず指定していないということです。
Error Domain=com.google.GTLJSONRPCErrorDomain Code=-32602 "The operation couldn’t be completed. (No filter selected.)" UserInfo=0x8870250 {error=No filter selected., GTLStructuredError=GTLErrorObject 0x88707f0: {message:"No filter selected." code:-32602 data:[1]}, NSLocalizedFailureReason=(No filter selected.)}
Edit3 :わかりましたいくつか変更しました。最初に、単にそれらを削除するパラメーターを設定した後にクエリを初期化していたという愚かな間違いを犯していました。コードは次のようになります。
youtubeService.authorizer = auth;
videoQuery = [GTLQueryYouTube queryForChannelsListWithPart:@"id"];
videoQuery.maxResults = 1;
videoQuery.q = @"RayWilliamJohnson";
videoQuery.type = @"channel";
youtubeTicket = [youtubeService executeQuery:videoQuery
completionHandler:^(GTLServiceTicket *ticket, GTLYouTubeChannel *channel,
NSError *error) {
NSLog(@" %@ ", error.description);
NSLog(@"WIN! : %@ ", channel.description);
}];
しかし、「フィルターが指定されていません」というエラーがまだ表示されます。これは、変数がどちらの方法でも設定されていないことを意味します...
Edit4:これを行うことができた非常に多くの金髪の瞬間の後、わかりました。それは私が初期化していたクエリオブジェクトでした。機能したコードは次のようになります。
youtubeService.authorizer = auth;
videoQuery = [GTLQueryYouTube queryForSearchListWithPart:@"id"];
videoQuery.maxResults = 1;
videoQuery.q = @"RayWilliamJohnson";
youtubeTicket = [youtubeService executeQuery:videoQuery
completionHandler:^(GTLServiceTicket *ticket, GTLYouTubeChannel *channel,
NSError *error) {
NSLog(@" %@ ", error.description);
NSLog(@"WIN! : %@ ", channel.description);
}];
そしてこの結果を提供しました:
2012-12-12 00:17:21.315 テスト[13099:c07] (ヌル) 2012-12-12 00:17:21.316 テスト[13099:c07] 勝つ! : GTLYouTubeSearchListResponse 0x727f6d0: {pageInfo:{totalResults,resultsPerPage} etag:""bm4JOKyioI0quSqrxEnI8H7snE4/A2tE7ag9HxUC5HxeD2vDlGNg5iM"" nextPageToken:"CAEQAA" kind:"youtube#searchListResponse" items:[1]}
助けてくれてありがとうジェフ