1

お気に入りリストに動画を追加するために、YouTubeに投稿リクエストを送信しようとしています。APIドキュメントはこちら

これが私のソースコードです:

- (void) addVideoToFavoriteWithID:(NSString *)strVideoID{
    NSString* strConnection = [NSString stringWithFormat:@"%@%@",CONNECTION_YOUTUBE, CONNECTION_ADD_VIDEO_TO_FAVORITE];
    AppDelegate* delegate =    (AppDelegate*)[[UIApplication sharedApplication] delegate];
    ASIFormDataRequest *formData = [[ASIFormDataRequest alloc]initWithURL:[NSURL URLWithString:strConnection]];
    [formData setRequestMethod:@"POST"];
    [formData setPostValue:@"2" forKey:@"GData-Version"];
    [formData setPostValue:@"application/atom+xml" forKey:@"Content-Type"];
    [formData setPostValue:YOUTUBE_DEVELOPER_KEY    forKey:@"X-GData-Key"];
    [formData setPostValue:[[delegate userInfo   ]accessTokenYoutube]  forKey:@"Authorization"];

    NSString *body = [NSString stringWithFormat:@"<?xml version='1.0' encoding='UTF-8'?><entry xmlns='http://www.w3.org/2005/Atom'><id>%@</id></entry>",strVideoID];
    [formData setPostValue:body forKey:@"body"  ];

    [formData setDelegate:self];
    [formData setDidFinishSelector:@selector(didAddVideoToFavoriteFinish:)];
    [formData setDidFailSelector:@selector(didAddVideoToFavoriteFail:)];\
    [formData setDidReceiveDataSelector:@selector(didAddVideoToFavoriteSelect:)];
    [formData startAsynchronous];

    [formData release];
}

メソッドdidAddVideoToFavoriteFinishでは、次のメッセージを受け取ります。

HTTP /1.1415サポートされていないメディアタイプ

ここでの私の間違いは何ですか?私はObjectiveCを初めて使用しますが、これには本当に混乱しています。

4

2 に答える 2

2

POST リクエストはフォーム データ リクエストであり、通常は HTML フォームのデータを投稿するために使用されます。データに特別なエンコーディングを使用します。これは、YouTube API が期待するものではありません。XML ドキュメントを含む単純な POST 要求が必要です。

クラスの代わりに、ASIFormDataRequestクラスを使用する必要がありますASIHTTPRequest。コードは多かれ少なかれ次のようになります。

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:strConnection]];
[request setRequestMethod:@"POST"];
[request setPostValue:@"2" forKey:@"GData-Version"];
[request setPostValue:@"application/atom+xml" forKey:@"Content-Type"];
[request setPostValue:YOUTUBE_DEVELOPER_KEY    forKey:@"X-GData-Key"];
[request setPostValue:[[delegate userInfo   ]accessTokenYoutube]  forKey:@"Authorization"];

NSString *body = [NSString stringWithFormat:@"<?xml version='1.0' encoding='UTF-8'?><entry xmlns='http://www.w3.org/2005/Atom'><id>%@</id></entry>",strVideoID];
[request appendPostData:[body dataUsingEncoding:NSUTF8StringEncoding]];

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

[request release];
于 2012-12-25T10:02:34.987 に答える
0

Google が提供するこの Objective-C API セットについて確認できるかもしれません。REST のすべてを書くのは面倒かもしれません。

于 2012-12-25T09:32:59.597 に答える