Я чувствую себя действительно глупо, что нигде не могу найти этот ответ.Может кто-нибудь направить меня туда или сообщить, каковы ограничения YouTube в отношении ключевых слов?Я обнаружил, что ограничение было однажды 120 символов, но потом Я слышал, что в марте 2010 года оно изменилось на 500 символов, поэтому для меня это не должно быть проблемой, если это правда.Возможно, у меня есть еще одна проблема на руках.Может быть, кто-то мог бы помочь мне с этим ...
Я использую YouTube API для Java , используя прямую загрузку из клиентского приложения.У меня есть тонны видео, которые я пытаюсь загрузить на несколько разных аккаунтов одновременно (на разных языках).Так что я использую темы для этого.Я ограничиваю количество одновременных загрузок до 10, чтобы попытаться обезопасить себя.Ни одно из описаний не будет намного длиннее, чем 500 символов, и из-за этой ошибки, я получил ключевые слова автоматически ограничить себя до 120 символов (я даже пытался ограничить его до 70 символов, и у меня была та же проблема).Так что я совсем не уверен, почему это происходит.Ошибка, которую я получаю от Google:
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 , поэтому я не знаю, поможет ли это.Я предполагаю, что есть кое-что фундаментальное, что я упускаю.
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 (), я предполагаю, что в методе insert () на youTubeService существует новый поток, запущенный для загрузки.Это немного раздражает, потому что я никогда не уверен, в какой момент видео завершит загрузку, и если я остановлю программу до того, как она закончится, то видео остановится.
В любом случае!Спасибо за чтение всего этого!Я надеюсь, что кто-то может мне помочь!