androidgoogle-product-search

Android: Accessing the Google Products Search within your Android-Application


I wanna use the Gdata Apis within my Android Application. Being more specific I wanna give the user the ability to search for keywords, use the Gdata api to search for products within googleproducts for these keywords and parse the xml that I get back.

I know how to parse xml files via an org.xml.sax.helpers.DefaultHandler but I guess that I am not suppose to use such a Handler but rather rely on the Gdata api to parse the xml for me.

My Problem is that I dont know how to integrate the api in my App. There is a similiar topic within stackoverflow (hier) but I am not at all satisfied with the answer they gave. Just giving someone the information to "look at our recently announced version 2.1.0-alpha of the GData Java library which supports Android" doesnt quite help me to integrate gdata in my app.

I would very appreciate if someone could give a step-by-step guide how to integrate the gdata api within my app, including code examples to make a search-request and parsing back the results from google products.


Solution

  • After some days of research I finally found a solution:

    Google gives an introduction on how to access the items saved on Google Base (hier).Surprisingly you don't need to Implement any Google Data Base APIs or anything to access the Google Product, you can easily query them via plain URL.

    You can access the public items within Google Base and Google Products via the URL http://www.google.com/base/feeds/snippets . You can append specific queries on this URL, for example: ?bq=digital+camera which searches for a digital camera or ?bq=5030932067876 which searches for the actual EAN code.

    You get back an XML-Document that holds the result of that query. For example the url http://www.google.com/base/feeds/snippets?bq=5030932067876 gives you back the following XML-Document:

    <?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>
    

    (... more entrys to come...)

    You can parse this Document by just doing the following: Subclass the org.xml.sax.helpers.DefaultHandler. And initialize myHandler with the following code (import javax.xml.parsers.SAXParser and javax.xml.parsers.SAXParserFactory to make it work):

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

    Depending on how you subclassed MyHandler, the Object myHandler should have all the values that you just parsed in.

    Hope it helps someone!