正在尝试通过Youtube API直接上载并获取无效请求(NSURLErrorDomain错误400.)



我正在尝试通过Youtube API将视频直接上传到Youtube。我不知道问题出在哪里…是我的请求URL语法吗?我将视频文件添加到身体的方式有问题吗?(我使用MKNetworkkit作为我的请求引擎。)

这是我的代码:

    //*********************************************************
    //* Setup the request URL and params
    //*********************************************************
    NSString *baseUrl = @"http://uploads.gdata.youtube.com/feeds/api/users/default/uploads";
    NSString *_accessToken = // the google API access token
    NSString *xml = 
    @"<?xml version='1.0'>"
    "<entry xmlns='http://www.w3.org/2005/Atom'"
    "xmlns:media='http://search.yahoo.com/mrss/'"
    "xmlns:yt='http://gdata.youtube.com/schemas/2007'/>"
      "<media:group>"
        "<media:title type='plain'>My Video Title</media:title>"
        "<media:description type='plain'>"
        "This is a test video. Hopefully it'll upload to Youtube succesfully."
        "</media:description>"
        "<media:category"
        "scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>People"
        "</media:category>"
        "<media:keywords>test, video</media:keywords>"
      "</media:group>"
    "</entry>";
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   _accessToken, @"access_token",
                                   myYouTubeDeveloperKey, @"DEVELOPER_KEY",
                                   @"vid1.mp4", @"VIDEO_FILENAME",
                                   xml, @"API_XML_Request",
                                   nil];
    //*********************************************************
    //* Configure the request
    //*********************************************************
    MKNetworkOperation *op = [globalMKNetworkEngine operationWithURLString:baseUrl params:params httpMethod:@"POST"];
    [op addFile:[[self getVideoFileURL] absoluteString] forKey:@"Binary File Data"];
    [op onUploadProgressChanged:^(double progress) {
        NSLog(@"progress: %@", progress);
        [uploadProgressBar setProgress:progress animated:YES];
    }];
    [op onCompletion:^(MKNetworkOperation *operation) {
        //*********************************************************
        //* On success, do this
        //*********************************************************
        dispatch_async(dispatch_get_main_queue(), ^{
           NSLog(@"Success!");
        });

    } onError:^(NSError *error) {
        DLog(@"%@", [error localizedDescription]);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Uh oh..." message:@"There was a network error. Please try again later." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }];
    [globalMKNetworkEngine enqueueOperation:op];

以下是MKNetworkKit报告的响应:

 Danceplanet[16449:707] -[MKNetworkOperation     operationFailedWithError:]
Request
-------
curl -X POST "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads" 
-F     "VIDEO_FILENAME=vid1" -F "DEVELOPER_KEY=(the developer key is here)" 
-F "access_token=(an access token)" -F "API_XML_Request=<?xml version='1.0'>
<entry xmlns='http://www.w3.org/2005/Atom'xmlns:media='http://search.yahoo.com/mrss/'xmlns:yt='http://gdata.youtube.com/schemas/2007'/>
<media:group>
<media:title type='plain'>My Video Title</media:title>
<media:description type='plain'>This is a test video. Hopefully it'll upload to Youtube succesfully.</media:description>
<media:categoryscheme='http://gdata.youtube.com/schemas/2007/categories.cat'>People</media:category>
<media:keywords>test, video</media:keywords>
</media:group>
</entry>" 
-F "Binary File Data=@file://localhost/var/mobile/Applications/BBD79FFD-01D5-402C-995A-D9F9CE61F312/Documents/savedVideos/vid1.mp4;type=application/octet-stream"
--------
Response
--------
Invalid Request
, [The operation couldn’t be completed. (NSURLErrorDomain error 400.)]
 Danceplanet[16449:707] __block_global_3 [Line 167] The operation     couldn’t be completed. (NSURLErrorDomain error 400.)
 Danceplanet[16449:707] -[MKNetworkOperation operationFailedWithError:]     [Line 1283] State: 0`

我认为问题可能是NSString

NSString * xmlEx =@"<?xml version="1.0" encoding="utf-8"?>" 
                                "<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">"
                                "<MediaFile>"
                                "<FileName>%@</FileName>"
                                "<Folder>%@</Folder>"
                                "</MediaFile>"
                                "</Data>"

这就是我在发布之前将xml写入字符串的方式。问题可能出在特殊字符上。强制XML版本字符。

我已经放弃了这种方法,现在使用Google obj-c客户端库。

最新更新