0

我想在我的 Android 应用程序中使用 Gdata API。更具体地说,我想让用户能够搜索关键字,使用 Gdata api 在 googleproducts 中搜索这些关键字的产品并解析我返回的 xml。

我知道如何通过 org.xml.sax.helpers.DefaultHandler 解析 xml 文件,但我想我不应该使用这样的处理程序,而是依靠 Gdata api 为我解析 xml。

我的问题是我不知道如何将 api 集成到我的应用程序中。stackoverflow ( hier )中有一个类似的主题,但我对他们给出的答案一点也不满意。仅仅向某人提供信息以“查看我们最近发布的支持 Android 的 GData Java 库的 2.1.0-alpha 版本”并不能完全帮助我将 gdata 集成到我的应用程序中。

如果有人能提供一步一步的指南,我将非常感激如何将 gdata api 集成到我的应用程序中,包括发出搜索请求和解析来自谷歌产品的结果的代码示例。

4

1 回答 1

3

经过几天的研究,我终于找到了解决方案:

Google 介绍了如何访问保存在 Google Base ( hier ) 上的项目。令人惊讶的是,您不需要实现任何 Google 数据库 API 或任何东西来访问 Google 产品,您可以通过纯 URL 轻松查询它们。

您可以通过 URL http://www.google.com/base/feeds/snippets访问 Google Base 和 Google 产品中的公共项目 。您可以在此 URL 上附加特定查询,例如:搜索数码相机的 ?bq=digital+camera 或搜索实际 EAN 代码的 ?bq=5030932067876。

您将返回一个包含该查询结果的 XML 文档。例如,网址http://www.google.com/base/feeds/snippets?bq=5030932067876会返回以下 XML 文档:

<?xml version='1.0' encoding='UTF-8'?>
  <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gm='http://base.google.com/ns-metadata/1.0' xmlns:g='http://base.google.com/ns/1.0' xmlns:batch='http://schemas.google.com/gdata/batch'>
    <id>http://www.google.com/base/feeds/snippets</id>
    <updated>2010-07-27T15:52:29.459Z</updated>
    <title type='text'>Items matching query: 5030932067876</title>
    <link rel='alternate' type='text/html' href='http://base.google.com'/>
    <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets'/>
    <link rel='http://schemas.google.com/g/2005#batch' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets/batch'/>
    <link rel='self' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets?start-index=1&amp;max-results=25&amp;bq=5030932067876'/>
    <author>
      <name>Google Inc.</name>
      <email>base@google.com</email>
    </author>
    <generator version='1.0' uri='http://base.google.com'>GoogleBase</generator>
    <openSearch:totalResults>20</openSearch:totalResults>
    <openSearch:startIndex>1</openSearch:startIndex>
    <openSearch:itemsPerPage>25</openSearch:itemsPerPage>
    <entry>
      <id>http://www.google.com/base/feeds/snippets/6567855098786723080</id>
      <published>2009-06-17T19:10:11.000Z</published>
      <updated>2010-07-26T19:36:16.000Z</updated>
      <category scheme='http://base.google.com/categories/itemtypes' term='Produkte'/>
      <title type='text'>Xb360 Fifa 09 Electronic Arts EAD07606316 5030932067876</title>
      <content type='html'>FIFA 09 Die brandneue Fußballsimulation! Geh in FIFA 09 auf den Platz und spiel professionellen Fußball, so wie du ihn dir vorstellst. Erlebe die authentischste Fußballsimulation, die EA SPORTS? je veröffentlicht hat, lebe deinen Traum vom  ...</content>
      <link rel='alternate' type='text/html' href='http://www.mercateo.com/p/615IT-R78802/Xb360_Fifa_09.html?PageID=FG-615IT-R78802'/>
      <link rel='self' type='application/atom+xml' href='http://www.google.com/base/feeds/snippets/6567855098786723080'/>
      <author>
        <name>Mercateo.com</name>
      </author>
      <g:zustand type='text'>neu</g:zustand>
      <g:mpn type='text'>EAD07606316</g:mpn>
      <g:image_link type='url'>http://images.mercateo.com/images/products/voelkner/906692_bb_00_fb.eps.jpg</g:image_link>
      <g:item_language type='text'>DE</g:item_language>
      <g:ean type='text'>5030932067876</g:ean>
      <g:id type='text'>615IT-R78802</g:id>
      <g:shipping type='shipping'>
        <g:price>4.76 eur</g:price>
      </g:shipping>
      <g:target_country type='text'>DE</g:target_country>
      <g:preis type='floatUnit'>34.14 eur</g:preis>
      <g:expiration_date type='dateTime'>2010-08-25T19:36:16Z</g:expiration_date>
      <g:marke type='text'>Electronic Arts</g:marke>
      <g:customer_id type='int'>114950</g:customer_id>
      <g:item_type type='text'>Produkte</g:item_type>
    </entry>

(......更多条目来......)

您只需执行以下操作即可解析此文档: 子类化 org.xml.sax.helpers.DefaultHandler。并使用以下代码初始化 myHandler(导入 javax.xml.parsers.SAXParser 和 javax.xml.parsers.SAXParserFactory 使其工作):

MyHandler myHandler = new MyHandler();
String urlString = "http://www.google.com/base/feeds/snippets?bq=5030932067876";
URL link = new URL(urlString);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(myHandler);
InputStream stream = link.openStream();
InputSource inputSource = new InputSource(stream);
inputSource.setEncoding("ISO-8859-1");
xr.parse(inputSource);

根据您对 MyHandler 进行子类化的方式,Object myHandler 应该具有您刚刚解析的所有值。

希望它可以帮助某人!

于 2010-07-27T15:58:04.620 回答