Youtube API 认证 - Iphone

Posted

技术标签:

【中文标题】Youtube API 认证 - Iphone【英文标题】:Youtube API Authentication - Iphone 【发布时间】:2012-06-14 18:04:02 【问题描述】:

我正在尝试使用 youtube api 的示例代码上传视频。 当我按下上传按钮时,进度条完成它的过程,但是当它到达终点时我得到错误。错误描述如下:

YouTubeTest[2149:f803] 错误 - 错误 Domain=com.google.GDataServiceDomain Code=400 "操作失败 完成。 (com.google.GDataServiceDomain 错误 400。)” 用户信息=0x69d5bd0

这是按下上传按钮的代码

- (IBAction)uploadPressed:(id)sender 
    [self.view resignFirstResponder];
    NSString *devKey = [mDeveloperKeyField text];

    GDataServiceGoogleYouTube *service = [self youTubeService];
    [service setYouTubeDeveloperKey:devKey];

    NSString *username = [mUsernameField text];
    NSString *clientID = [mClientIDField text];

    NSURL *url = [GDataServiceGoogleYouTube youTubeUploadURLForUserID:username
                                                             clientID:clientID];

    // load the file data
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouTubeTest" ofType:@"m4v"]; 
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSString *filename = [path lastPathComponent];

    // gather all the metadata needed for the mediaGroup
    NSString *titleStr = [mTitleField text];
    GDataMediaTitle *title = [GDataMediaTitle textConstructWithString:titleStr];

    NSString *categoryStr = [mCategoryField text];
    GDataMediaCategory *category = [GDataMediaCategory mediaCategoryWithString:categoryStr];
    [category setScheme:kGDataSchemeYouTubeCategory];

    NSString *descStr = [mDescriptionField text];
    GDataMediaDescription *desc = [GDataMediaDescription textConstructWithString:descStr];

    NSString *keywordsStr = [mKeywordsField text];
    GDataMediaKeywords *keywords = [GDataMediaKeywords keywordsWithString:keywordsStr];

    BOOL isPrivate = mIsPrivate;

    GDataYouTubeMediaGroup *mediaGroup = [GDataYouTubeMediaGroup mediaGroup];
    [mediaGroup setMediaTitle:title];
    [mediaGroup setMediaDescription:desc];
    [mediaGroup addMediaCategory:category];
    [mediaGroup setMediaKeywords:keywords];
    [mediaGroup setIsPrivate:isPrivate];

    NSString *mimeType = [GDataUtilities MIMETypeForFileAtPath:path
                                               defaultMIMEType:@"video/mp4"];

    // create the upload entry with the mediaGroup and the file data
    GDataEntryYouTubeUpload *entry;
    entry = [GDataEntryYouTubeUpload uploadEntryWithMediaGroup:mediaGroup
                                                          data:data
                                                      MIMEType:mimeType
                                                          slug:filename];

    SEL progressSel = @selector(ticket:hasDeliveredByteCount:ofTotalByteCount:);
    [service setServiceUploadProgressSelector:progressSel];

    GDataServiceTicket *ticket;
    ticket = [service fetchEntryByInsertingEntry:entry
                                      forFeedURL:url
                                        delegate:self
                               didFinishSelector:@selector(uploadTicket:finishedWithEntry:error:)];

    [self setUploadTicket:ticket];


我已经从 API Dashboard 正确设置了开发者密钥和客户端密钥。

我在模拟器上运行它。是不是模拟器不能上传视频?

请指导我哪里出错了?

【问题讨论】:

400 错误通常意味着错误的请求。我会检查您的所有代码、登录身份验证,如果可能的话,在设备上进行测试以排除模拟器可能导致的任何问题。 @Luke 我也在设备上检查过。它也不在那里工作..给出同样的错误:( 你有任何示例代码或链接,然后请分享。我有 MAC OS X 的示例,但 ios 的机器人。 【参考方案1】:

错误已解决... 使用谷歌账号上传视频到 YouTube 时,GData 的部分功能 Objective-C 需要 Gmail 帐户作为参数,有些需要 YouTube 关联帐户作为参数。

当你调用 '- (void)setUserCredentialsWithUsername:(NSString *) 用户名密码:(NSString *)密码;'在 GDataServiceBase 中, 用户名应该是 Gmail 帐户,例如 'x...@gmail.com' 和密码应该是密码 Gmail 帐户。

但是当你调用 '+ (NSURL *)youTubeUploadURLForUserID:(NSString *) 用户ID clientID:(NSString *)clientID;'在 GDataServiceGoogleYouTube 中, userID 参数应该是 YouTube 关联帐户和 密码 Gmail 帐户的密码。

我使用 email_id@gmail.com 登录,现在我只使用 email_id 登录。多么愚蠢的错误!.. 但是花了我整整 2 天的时间来解决.. Duhhh..!!

【讨论】:

以上是关于Youtube API 认证 - Iphone的主要内容,如果未能解决你的问题,请参考以下文章

如何使用YouTube Api下载YouTube视频[关闭]

YouTube 直播 API 限制

如何使用 youtube 的 API 下载 youtube 视频?

YouTube 数据 API 某些视频不返回频道

如何使用 Youtube API 获取 Youtube 频道横幅?

使用 Youtube 数据 API 的响应负载不正确