2

我正在尝试使用 youtube gdata api for java 进行一些搜索,但我遇到了一些错误。

我设置了最大值。结果到 20 并开始进行测试搜索,偶尔没有结果返回。

然后我开始一一搜索,我注意到一些单一的搜索结果有问题,当我设置最大值时。结果到了20个,连一个结果有问题都没有结果。

堆栈跟踪是:

Haz 29, 2012 2:45:40 PM com.wattalist.gdata.youtube.GdataYoutube Search
SEVERE: null
com.google.gdata.util.ParseException: [Line 1, Column 101152, element yt:state] Invalid value for attribute : 'name'
at com.google.gdata.util.XmlParser.throwParseException(XmlParser.java:739)
at com.google.gdata.util.XmlParser.parse(XmlParser.java:702)
at com.google.gdata.util.XmlParser.parse(XmlParser.java:585)
at com.google.gdata.data.BaseFeed.parseAtom(BaseFeed.java:867)
at com.google.gdata.wireformats.input.AtomDataParser.parse(AtomDataParser.java:68)
at com.google.gdata.wireformats.input.AtomDataParser.parse(AtomDataParser.java:39)
at com.google.gdata.wireformats.input.CharacterParser.parse(CharacterParser.java:100)
at com.google.gdata.wireformats.input.XmlInputParser.parse(XmlInputParser.java:52)
at com.google.gdata.wireformats.input.AtomDualParser.parse(AtomDualParser.java:66)
at com.google.gdata.wireformats.input.AtomDualParser.parse(AtomDualParser.java:34)
at com.google.gdata.client.Service.parseResponseData(Service.java:2165)
at com.google.gdata.client.Service.parseResponseData(Service.java:2098)
at com.google.gdata.client.Service.getFeed(Service.java:1136)
at com.google.gdata.client.Service.getFeed(Service.java:1077)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:676)
at com.google.gdata.client.Service.query(Service.java:1237)
at com.google.gdata.client.Service.query(Service.java:1178)
at com.wattalist.gdata.youtube.GdataYoutube.Search(GdataYoutube.java:47)
at com.wattalist.servlets.PlayerAjaxServlet.writeSearchResults(PlayerAjaxServlet.java:137)
at com.wattalist.servlets.PlayerAjaxServlet.doPost(PlayerAjaxServlet.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: com.google.gdata.util.ParseException: Invalid value for attribute : 'name'
at com.google.gdata.data.AttributeHelper.consumeEnum(AttributeHelper.java:592)
at com.google.gdata.data.youtube.YtPublicationState.consumeAttributes(YtPublicationState.java:184)
at com.google.gdata.data.AbstractExtension$AttributesHandler.processEndElement(AbstractExtension.java:263)
at com.google.gdata.util.XmlParser.endElement(XmlParser.java:1013)
at org.xml.sax.helpers.ParserAdapter.endElement(ParserAdapter.java:650)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:598)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1741)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2898)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at org.xml.sax.helpers.ParserAdapter.parse(ParserAdapter.java:429)
at com.google.gdata.util.XmlParser.parse(XmlParser.java:694)
... 39 more

我对此进行了一些研究,我注意到在旧版本的 gdata youtbe api 中存在此问题,但可以通过以下解决方法解决:

临时解决方法是复制 com.google.gdata.data.youtube.YtPublicationState 的源并添加如下所示的受限类型。然后在类路径中将其添加到更高的位置。公共静态枚举状态{

/**
 * The video has not been completely defined yet, but it's been stored
 * already.
 * Either the video data or the description is missing.
 */
INCOMPLETE,

/** The video has just been uploaded and is not yet publicly available. */
PROCESSING,

/** The video has been rejected. */
REJECTED,

/** The video was not successfully processed. */
FAILED,

/** Video was removed by the owner. */
DELETED,

RESTRICTED,
;

}

但我使用的是最新版本的 gdata-src.java-1.47.1 版本。我有罐子:

gdata-core-1.0.jar

gdata-youtube-2.0.jar

gdata-youtube-meta-2.0.jar

gdata-client-1.0.jar

gdata-client-meta-1.0.jar

gdata-media-1.0.jar

番石榴-11.0.2.jar jsr305.jar

邮件.jar

我检查了源代码中的 YtPublicationState 并且枚举状态具有 RESTRICTED 元素。

但我仍然得到例外。

我得到异常的源代码是:

public VideoFeed Search(String criteria, int maxResults, int startIndex)
{
    try
    {
        YouTubeQuery youtubeQuery = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));

        youtubeQuery.setFullTextQuery(criteria);
        youtubeQuery.setMaxResults(_maxResults);
        youtubeQuery.setStartIndex(_startIndex);

        VideoFeed videoFeed = _youtubeService.query(youtubeQuery, VideoFeed.class);

        return videoFeed;
    } catch (IOException ex)
    {
        Logger.getLogger(GdataYoutube.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ServiceException ex)
    {
        Logger.getLogger(GdataYoutube.class.getName()).log(Level.SEVERE, null, ex);
    }

    return null;
}

任何人都知道如何修复它或任何替代方法?(我想一一获得结果并在服务器上自行消除损坏的结果,但它会产生很多通信开销。)

4

0 回答 0