2012-03-14 16 views
0

我在YouTube上有一个我上传的视频,我希望更改yt:accessControls(尤其是评论调节)。我查看了YouTube API参考号herehere,但似乎无法正确更新它。这里是我的代码:如何在YouTube-API中正确应用yt:accessControl Java

//Strings declared beforehand: appName, developerId, username, password, and vidId. 
YouTubeService service = new YouTubeService(appName, developerId); 
service.setUserCredentials(username, password); 

String videoEntryUrl = "http://gdata.youtube.com/feeds/api/users/default/uploads/" + vidId; 
VideoEntry createdEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class); 

String originalXMLBlob = createdEntry.getXmlBlob().getBlob(); 

String atomXml = "<?xml version='1.0'?><entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' gd:fields='yt:accessControl' xmlns:yt='http://gdata.youtube.com/schemas/2007'><yt:accessControl action='comment' permission='moderated'/></entry>"; 

GDataRequest request = service.createPatchRequest(new URL(createdEntry.getEditLink().getHref())); 
request.getRequestStream().write(atomXml.getBytes("UTF-8")); 
request.execute(); 
createdEntry = service.parseResponseData(request, VideoEntry.class); 

String newXMLBlob = createdEntry.getXmlBlob().getBlob().substring(49); 
//The substring(49) is because after you do a service.parseResponseData... it attaches a timestamp to the xmlBlob. To properly compare whether these are the same in the printlns I substring it. 

System.out.println(newXMLBlob.equals(originalXMLBlob)); 
System.out.println(originalXMLBlob); 
System.out.println(newXMLBlob); 
createdEntry.update(); 
createdEntry.update(); 

newXMLBlob = createdEntry.getXmlBlob().getBlob().substring(49); 
System.out.println(newXMLBlob.equals(originalXMLBlob)); 
System.out.println(originalXMLBlob); 
System.out.println(newXMLBlob); 
System.out.println("Done"); 

输出是:

false 
<yt:accessControl permission='allowed' action='comment'/><yt:accessControl permission='allowed' action='commentVote'/><yt:accessControl permission='moderated' action='videoRespond'/><yt:accessControl permission='allowed' action='rate'/><yt:accessControl permission='allowed' action='embed'/><yt:accessControl permission='allowed' action='list'/><yt:accessControl permission='allowed' action='autoPlay'/><yt:accessControl permission='allowed' action='syndicate'/> 
<yt:accessControl permission='moderated' action='comment'/><yt:accessControl permission='allowed' action='commentVote'/><yt:accessControl permission='moderated' action='videoRespond'/><yt:accessControl permission='allowed' action='rate'/><yt:accessControl permission='allowed' action='embed'/><yt:accessControl permission='allowed' action='list'/><yt:accessControl permission='allowed' action='autoPlay'/><yt:accessControl permission='allowed' action='syndicate'/> 
false 
<yt:accessControl permission='allowed' action='comment'/><yt:accessControl permission='allowed' action='commentVote'/><yt:accessControl permission='moderated' action='videoRespond'/><yt:accessControl permission='allowed' action='rate'/><yt:accessControl permission='allowed' action='embed'/><yt:accessControl permission='allowed' action='list'/><yt:accessControl permission='allowed' action='autoPlay'/><yt:accessControl permission='allowed' action='syndicate'/> 
<yt:accessControl permission='moderated' action='comment'/><yt:accessControl permission='allowed' action='commentVote'/><yt:accessControl permission='moderated' action='videoRespond'/><yt:accessControl permission='allowed' action='rate'/><yt:accessControl permission='allowed' action='embed'/><yt:accessControl permission='allowed' action='list'/><yt:accessControl permission='allowed' action='autoPlay'/><yt:accessControl permission='allowed' action='syndicate'/> 
Done 

重要的是,从开始改变到结束没有。你可以看到我甚至试图做createdEntry.update();,但这也不起作用。任何帮助将不胜感激!谢谢!

哦,还有最后一件事。我希望我的atomXml能够将访问控制设置为多种事物(视频响应,评分等)。我猜你只需添加更多yt:accessControl标签,但在回答时,如果您有任何关于此的提示,我将不胜感激。再次感谢。

编辑:删除xml中的URL中的空间。这导致了产量变化(也进行了更新),这更有意义,但这不是理想的解决方案。

+0

问题解决了,我只有34个声望点,所以我稍后会发布答案。 – kentcdodds 2012-03-14 17:14:35

回答

2

如果我没有在xml中创建空间问题,我不会发布这个问题。事实证明,您无法在上传视频后立即更新yt:accessControl。所以,相反,我保存的ID和我上传他们,然后当他们完成我要更新他们每个人的yt:accessControl。希望这有助于后来者。

哦,顺便说一句,我敢肯定你可以一次提交几个yt:accessControls。快乐的编码!