Hi Tom.

I managed to solve this time-out issue - there was a mistake in my
code and not Google.

I wasn't resetting the data structure (batchLink and batchUrl in the
code below) after each batch was sent.  Below is an extract of the
working code.

I've just uploaded 570 products in just in 6 minutes with no time-
outs!

        < build batch, send batch and handle reply>

        /* . . . . . . . . . . . . . . . . . . . . . . . . . */

        /*
         * Reset sent data structure.
         */

        feed = service.getFeed(url);
        batchLink = feed.getLink(Link.Rel.FEED_BATCH, Link.Type.ATOM);
        batchUrl = new URL(batchLink.getHref());

        /* . . . . . . . . . . . . . . . . . . . . . . . . . */

john

On Jan 12, 9:05 pm, Tom Wilson <[email protected]> wrote:
> Can you give examples of what exactly your sending ?
>
> Also the outline isn't really much help could you post actual code
> used ?
>
> Tom Wilson
> Freelance Google Base Developer and Consultantwww.tomthedeveloper.com
>
> Google Base Tools -http://dev.tomthedeveloper.com/googlebase
> Featured Project 
> :http://google-code-featured.blogspot.com/2008/02/google-base-competit...
>
> On Jan 11, 10:14 am, strachjs <[email protected]> wrote:
>
>
>
> > Hi.  I wonder if anyone can help or has tips on how to diagnose this
> > problem?...
>
> > I have written a Java program to upload products to Google Base using
> > the data API in batch mode.  The program determines what products are
> > to be amended and then builds and sends the appropriate batch
> > requests, e.g. inserts, updates or deletes.  Each batch contains 10
> > entries.  For example, if we have 21 inserts and 5 deletes then 3
> > insert batches would be sent and 1 delete batch.  To reduce the load
> > on Google, there is a 2 second sleep after each batch.
>
> > The program works fine when there are less than about 30 products.
> > However, if more than this then after a couple of batches have been
> > sent then Google stops responding and a time-out exception is thrown -
> > Error: Read timed out (I've set the timeout to 10 minutes).
>
> > Any ideas why Google should stop responding when so little data has
> > been transferred?
>
> > This is an outline of the code:
>
> >         /* Set-up Google service. */
> >         GoogleBaseService service =
> >                 new GoogleBaseService(APPLICATION_NAME, 
> > googleFeedDeveloperKey);
> >         service.setUserCredentials(googleFeedEmail, googleFeedPassword);
> >         service.setReadTimeout(GOOGLE_BASE_SERVICE_TIMEOUT /*10 mins*/);
> >         service.setConnectTimeout(GOOGLE_BASE_SERVICE_TIMEOUT /*10 mins*/);
> > .
> > For inserts (it is a similar for deletes and updates):
> > .
> >         URL url = new URL("http://www.google.com/base/feeds/items";);
> >         GoogleBaseFeed feed = service.getFeed(url);
>
> >         Link batchLink = feed.getLink(Link.Rel.FEED_BATCH, Link.Type.ATOM);
> >         URL batchUrl = new URL(batchLink.getHref());
>
> >         < loop for all products >
>
> >                 < loop for just 10 products (i.e. each batch contains 10 
> > entries) >
>
> >                         < read productRec from database >
>
> >                         GoogleBaseEntry entry = new GoogleBaseEntry();
> >                         feed.addEntry(entry);
>
> >                         
> > entry.setTitle(TextConstruct.create(TextConstruct.Type.TEXT,
> > productRec.Title, null));
> >                         
> > entry.setContent(TextConstruct.create(TextConstruct.Type.TEXT,
> > productRec.Description, null));
> >                         entry.addHtmlLink(productRec.URL, null, null);
> >                         
> > entry.getGoogleBaseAttributes().setItemType("Products");
> >                         
> > entry.getGoogleBaseAttributes().addTextAttribute("id",
> > productRec.ID);
> >                         
> > entry.getGoogleBaseAttributes().addImageLink(productRec.ImageURL);
> >                         
> > entry.getGoogleBaseAttributes().addTextAttribute("currency",
> > "GBP");
> >                         
> > entry.getGoogleBaseAttributes().addFloatAttribute("price",
> > productRec.Price);
> >                         
> > entry.getGoogleBaseAttributes().addIntAttribute("quantity",
> > productRec.Quantity);
> >                         
> > entry.getGoogleBaseAttributes().addTextAttribute("condition",
> > productRec.ProductCondition);
> >                         
> > entry.getGoogleBaseAttributes().addTextAttribute("item_language",
> > "en");
> >                         
> > entry.getGoogleBaseAttributes().addTextAttribute("target_country",
> > "GB");
>
> >                         /* Calculate expire date. */
> >                         Calendar cal = Calendar.getInstance();
> >                         cal.add(Calendar.DATE, REFRESHDAYS);
> >                         
> > entry.getGoogleBaseAttributes().setExpirationDate(new DateTime
> > (cal.getTime()));
>
> >                         /* Mark for INSERT. */
> >                         BatchUtils.setBatchOperationType(entry,
> > BatchOperationType.INSERT);
>
> >                         /* Assign a unique ID for tracking. */
> >                         BatchUtils.setBatchId(entry, ""+googleTrackerID);
>
> >                 < end inner loop >
>
> >                 /* Send batch of 10 entries. */
> >                 GoogleBaseFeed result = service.batch(batchUrl, feed);
>
> >                 *** GOOGLE STOPS RESPONDING AFTER ABOUT 2 BATCHES HAVE BEEN 
> > SENT.
> > ***
>
> >                 < handle response >
>
> >                 /* Batch sent - Reset data structure. */
> >                 feed = service.getFeed(url);
>
> >                 <snooze for 2 seconds>
>
> >         < end outer loop >
>
> > Thanks,
> > john
-- 
You received this message because you are subscribed to the Google Groups 
"Google Base Data API" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-base-data-api?hl=en.


Reply via email to