2

我正在尝试通过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`
4

2 回答 2

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 版本的字符。

于 2012-07-18T10:56:42.773 回答
0

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

于 2012-07-18T12:08:58.643 回答