YouTube API短关键字too_long错误代码



我觉得在任何地方都找不到这个答案真的很傻。有人能指引我去一个地方吗?或者告诉我YouTube对关键词的限制是什么?我发现这个限制曾经是120个字符,但后来我听说在2010年3月改为500个字符,所以如果这是真的,对我来说应该不是问题。我可能还有其他问题。也许有人可以帮我。。。

我正在使用YouTube API for Java,直接从基于客户端的应用程序上传。我有很多视频试图同时上传到几个不同的账户(每个账户都用不同的语言)。所以我使用线程来实现这一点。我将同时上传的次数限制在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文档中的内容完全一样,所以我不知道它是否会有多大帮助。我猜我遗漏了一些基本的东西。

上传到YouTuber():

  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;
  }

authenticateYouTuber():

  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,在方法调用之后,我打印出它已经完成。有人能解释一下为什么它们会在一瞬间打印出来吗?我并没有为uploadToYouTuber()方法启动一个新线程,我猜在youTubeService上的insert()方法中,有一个新的线程为上传启动。不过这有点烦人,因为我从来都不太确定视频在什么时候完成上传,如果我在程序完成之前停止,那么视频就会停止上传。

不管怎样!感谢阅读所有这些!我希望有人能帮我!

解决方案真的很简单!问题是,尽管我的标签总数没有超过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();
  }
}

相关内容

  • 没有找到相关文章

最新更新