我觉得无法在任何地方找到这个答案真的很傻。有人可以指示我到某个地方或告诉我YouTube关键字的限制是什么吗? 我发现限制一次是120个字符,但是在2010年3月的I heard it changed到500个字符,所以如果这是真的那对我来说应该不是问题。我可能手上还有另一个问题。也许有人可以帮助我... ...
我在基于客户端的应用程序中使用YouTube API for Java direct upload。我有很多视频我试图一次上传到几个不同的帐户(每个都用不同的语言)。所以我使用线程来实现这一目标。我将并发上传的数量限制为10只是为了尝试安全地播放它。没有任何描述会超过500个字符,因为我得到的这个错误,我有关键字自动限制为120个字符(我甚至试图将其限制为70个字符,并有同样的问题)。所以,我不确定为什么会发生这种情况。我从谷歌那里得到的错误是:
SEVERE: null
com.google.gdata.util.InvalidEntryException: Bad Request
<?xml version='1.0' encoding='UTF-8'?>
<errors>
<error>
<domain>yt:validation</domain>
<code>too_long</code>
<location type='xpath'>media:group/media:keywords/text()</location>
</error>
</errors>
我也将InvalidEntryException作为错误代码,但我稍后会处理(我认为它与我的身份验证超时有关)。
无论如何,我没有在每个视频上收到此错误。事实上,大多数视频都很好。我还没有测试过发现哪些视频丢失了错误(当我完成这篇文章时我会这样做),但是为什么我会收到这个错误。我会在这里发布我的代码,但它几乎就是api documentation上的代码,所以我不知道它是否会有很多帮助。我猜我有一些基本的东西。
uploadToYouTube():
private void uploadToYouTube() throws IOException, ServiceException {
TalkContent talkContent = transfer.getTalkContent();
YouTubeService youTubeService = talkContent.getLanguage().getYouTubeService(); //see code for this below...
String title = talkContent.getTitle();
String category = talkContent.getCategory();
String description = talkContent.getDescription();
List<String> tags = talkContent.getTags();
boolean privateVid = true;
VideoEntry newEntry = new VideoEntry();
YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup();
//Title
mg.setTitle(new MediaTitle());
mg.getTitle().setPlainTextContent(title);
//Description
mg.setDescription(new MediaDescription());
mg.getDescription().setPlainTextContent(description);
//Categories and developer tags
mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, category));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "kentcdodds"));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "moregoodfoundation"));
//Keywords
mg.setKeywords(new MediaKeywords());
int tagLimit = 70; // characters
int totalTags = 0; //characters
for (String tag : tags) {
if ((totalTags + tag.length()) < tagLimit) {
mg.getKeywords().addKeyword(tag);
totalTags += tag.length();
}
}
//Visible status
mg.setPrivate(privateVid);
//GEO coordinantes
newEntry.setGeoCoordinates(new GeoRssWhere(40.772555, -111.892480));
MediaFileSource ms = new MediaFileSource(new File(transfer.getOutputFile()), transfer.getYouTubeFileType());
newEntry.setMediaSource(ms);
String uploadUrl = "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads";
VideoEntry createdEntry = youTubeService.insert(new URL(uploadUrl), newEntry);
status = Transfer.FINISHEDUP;
}
getYouTubeService():
public YouTubeService getYouTubeService() {
if (youTubeService == null) {
try {
authenticateYouTube();
} catch (AuthenticationException ex) {
JOptionPane.showMessageDialog(null, "There was an authentication error!" + StaticClass.newline + ex, "Authentication Error", JOptionPane.ERROR_MESSAGE);
Logger.getLogger(Language.class.getName()).log(Level.SEVERE, null, ex);
}
}
return youTubeService;
}
authenticateYouTube():
public void authenticateYouTube() throws AuthenticationException {
if (youTubeService == null) {
System.out.println("Authenticating YouTube Service");
youTubeService = new YouTubeService("THENAMEOFMYPROGRAM", "THEDEVELOPERIDHERE");
youTubeService.setUserCredentials(youTubeUsername, youTubePassword);
System.out.println("Authentication of YouTube Service succeeded");
}
}
对此的任何帮助都会很棒!此外,在我调用uploadToYouTube()方法之前,我打印出视频正在上传到YouTube,并在方法调用后打印出它已完成。有人可以解释为什么那些是在彼此的瞬间打印出来的吗?我没有为uploadToYouTube()方法启动一个新线程,我猜测在youTubeService上的insert()方法中有一个为上传启动的新线程。这有点令人讨厌,因为我从来都不确定视频在什么时候完成上传,如果我在程序结束前停止播放,那么视频就会停止上传。
反正!感谢阅读所有这些!我希望有人可以帮助我!
答案 0 :(得分:3)
解决方案非常简单!问题是即使我没有超过500个字符的总标签限制,但有时我超过每个标签30个字符的限制!我刚刚将标记添加行更改为以下代码:
//Keywords
mg.setKeywords(new MediaKeywords());
int totalTagsLimit = 500; // characters
int singleTagLimit = 30; // characters
int totalTags = 0; //characters
for (String tag : tags) {
if ((totalTags + tag.length()) < totalTagsLimit && tag.length() < singleTagLimit) {
mg.getKeywords().addKeyword(tag);
totalTags += tag.length();
}
}