Hi,
I am new to google Api's . I want to post ad on google base. I am
trying to run the following code (example shared on google code) :


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.StringTokenizer;

/**
 *  Add a new item to Google Base using the Google Base data API
server.
 */
public class InsertExample {


  /**
   * The data item we are going to insert, in XML/Atom format.
   */
  private static final String DATA_ITEM =
        "<?xml version=\'1.0\'?>\n" +
        "<entry xmlns=\'http://www.w3.org/2005/Atom\' xmlns:g=\'http://
base.google.com/ns/1.0\'>\n" +
        "  <category scheme=\'http://base.google.com/categories/
itemtypes\' term=\'Products\'/>\n" +
        "  <g:item_type type=\'text\'>Products</g:item_type>\n" +
        "  <title type=\'text\'>My cool car is for sale</title>\n" +
        "  <content type=\'xhtml\'>Light pink, yellow seats.</content>
\n" +
        "</entry>";

  /**
   * URL used for authenticating and obtaining an authentication
token.
   * More details about how it works:
   * <code>http://code.google.com/apis/accounts/
AuthForInstalledApps.html<code>
   */
  private static final String AUTHENTICATION_URL = "https://
www.google.com/accounts/ClientLogin";

  /**
   * Fill in your Google Account email here.
   */
  private static final String EMAIL = "";

  /**
   * Fill in your Google Account password here.
   */
  private static final String PASSWORD = "";


  /**
   * URL of the authenticated customer feed.
   */
  private static final String ITEMS_FEED = "http://base.google.com/
base/feeds/items";

  /**
   * Insert here the developer key obtained for an "installed
application" at
   * http://code.google.com/apis/base/signup.html
   */
  private static final String DEVELOPER_KEY = "";

  /**
   * The main method constructs a <code>InsertExample</code> instance,
obtains an
   * authorization token and posts a new item to Google Base.
   */
  public static void main(String[] args) throws MalformedURLException,
IOException {
    InsertExample insertExample = new InsertExample();
    String token = insertExample.authenticate();
    System.out.println("Obtained authorization token: " + token);
    insertExample.postItem(token);
  }

  /**
   * Inserts <code>DATA_ITEM</code> by making a POST request to
   * <code>ITEMS_URL<code>.
   * @param token authentication token obtained using
<code>authenticate</code>
   * @throws IOException if an I/O exception occurs while creating/
writing/
   *         reading the request
   */
  public void postItem(String token) throws IOException {
    HttpURLConnection connection = (HttpURLConnection)(new URL
(ITEMS_FEED)).openConnection();

    connection.setDoInput(true);
    connection.setDoOutput(true);

    // Set the properties of the connection: the Http method, the
content type
    // of the POST request, the authorization header and the developer
key
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/atom
+xml");
    connection.setRequestProperty("Authorization", "GoogleLogin auth="
+ token);
    connection.setRequestProperty("X-Google-Key", "key=" +
DEVELOPER_KEY);

    // Post the data item
    OutputStream outputStream = connection.getOutputStream();
    outputStream.write(DATA_ITEM.getBytes());
    outputStream.close();

    // Retrieve the output
    int responseCode = connection.getResponseCode();
    InputStream inputStream;
    if (responseCode == HttpURLConnection.HTTP_CREATED) {
      inputStream = connection.getInputStream();
    } else {
      inputStream = connection.getErrorStream();
    }

    // write the output to the console
    System.out.println(toString(inputStream));
  }

  /**
   * Retrieves the authentication token for the provided set of
credentials.
   * @return the authorization token that can be used to access
authenticated
   *         Google Base data API feeds
   */
  public String authenticate() {
    // create the login request
    String postOutput = null;
    try {
      URL url = new URL(AUTHENTICATION_URL);
      postOutput = makeLoginRequest(url);
    } catch (IOException e) {
      System.out.println("Could not connect to authentication server:
"
          + e.toString());
      System.exit(1);
    }

    // Parse the result of the login request. If everything went fine,
the
    // response will look like
    //      HTTP/1.0 200 OK
    //      Server: GFE/1.3
    //      Content-Type: text/plain
    //      SID=DQAAAGgA...7Zg8CTN
    //      LSID=DQAAAGsA...lk8BBbG
    //      Auth=DQAAAGgA...dk3fA5N
    // so all we need to do is look for "Auth" and get the token that
comes after it

    StringTokenizer tokenizer = new StringTokenizer(postOutput, "=\n
");
    String token = null;

    while (tokenizer.hasMoreElements()) {
      if (tokenizer.nextToken().equals("Auth")) {
        if (tokenizer.hasMoreElements()) {
          token = tokenizer.nextToken();
        }
        break;
      }
    }
    if (token == null) {
      System.out.println("Authentication error. Response from server:
\n" + postOutput);
      System.exit(1);
    }
    return token;
  }

  /**
   * Makes a HTTP POST request to the provided {...@code url} given the
provided
   * {...@code parameters}. It returns the output from the POST handler
as a
   * String object.
   *
   * @param url the URL to post the request
   * @return the output from the handler
   * @throws IOException if an I/O exception occurs while
   *           creating/writing/reading the request
   */
  private String makeLoginRequest(URL url)
      throws IOException {
    // Create a login request. A login request is a POST request that
looks like
    // POST /accounts/ClientLogin HTTP/1.0
    // Content-type: application/x-www-form-urlencoded
    //
[email protected]&Passwd=north23AZ&service=gbase&source=Insert
Example

    // Open connection
    HttpURLConnection urlConnection = (HttpURLConnection)
url.openConnection();


    // Set properties of the connection
    urlConnection.setRequestMethod("POST");
    urlConnection.setDoInput(true);
    urlConnection.setDoOutput(true);
    urlConnection.setUseCaches(false);
    urlConnection.setRequestProperty("Content-Type",
                                     "application/x-www-form-
urlencoded");

    // Form the POST parameters
    StringBuilder content = new StringBuilder();
    content.append("Email=").append(URLEncoder.encode(EMAIL,
"UTF-8"));
    content.append("&Passwd=").append(URLEncoder.encode(PASSWORD,
"UTF-8"));
    content.append("&source=").append(URLEncoder.encode("Google Base
data API example", "UTF-8"));
    content.append("&service=").append(URLEncoder.encode("gbase",
"UTF-8"));

    OutputStream outputStream = urlConnection.getOutputStream();
    outputStream.write(content.toString().getBytes("UTF-8"));
    outputStream.close();

    // Retrieve the output
    int responseCode = urlConnection.getResponseCode();
    InputStream inputStream;
    if (responseCode == HttpURLConnection.HTTP_OK) {
      inputStream = urlConnection.getInputStream();
    } else {
      inputStream = urlConnection.getErrorStream();
    }

    return toString(inputStream);
  }

  /**
   * Writes the content of the input stream to a <code>String<code>.
   */
  private String toString(InputStream inputStream) throws IOException
{
    String string;
    StringBuilder outputBuilder = new StringBuilder();
    if (inputStream != null) {
      BufferedReader reader =
          new BufferedReader(new InputStreamReader(inputStream));
      while (null != (string = reader.readLine())) {
        outputBuilder.append(string).append('\n');
      }
    }
    return outputBuilder.toString();
  }
}

But when I try to run the code, I get exception as :

Could not connect to authentication server: java.net.SocketException:
Operation timed out: connect:could be due to invalid address
at statement : OutputStream outputStream =
urlConnection.getOutputStream();

Please help!
--~--~---------~--~----~------------~-------~--~----~
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