java用のyoutube gdata apiを使用して検索しようとしていますが、エラーが発生しています。
私は最大を設定しました。結果が20になり、テスト検索を開始しましたが、時々結果が返されません。
次に、1つずつ検索を開始しましたが、いくつかの単一の検索結果に問題があり、最大を設定したときに気付きました. 結果が 20 に戻った場合、1 つの結果でも問題がある結果は返されません。
スタック トレースは次のとおりです。
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 のソースをコピーし、以下のような制限付きの型を追加することです。次に、クラスパスの上位に追加します。public static enum State {
/**
* 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 を確認しましたが、列挙型 State には 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;
}
誰かがそれを修正する方法または代替手段を知っていますか? (結果を1つずつ取得し、壊れた結果をサーバー上で自分で排除することを考えましたが、通信オーバーヘッドが非常に大きくなります。)