views:

201

answers:

2

To read Google Buzz activities, an authorization token is required. A web application would redirect to Googles login page, where the user logs in and a token is returned back to the web application.

But I have a local Java application without a UI (like a script). This application knows username and password. How to get an authorization token, using this username and password, without presenting the Google login page?

+1  A: 

It's probably a bad idea, but you could use an HTTP library like HttpClient to make the same requests the user would. You will need to use a header-watching utility to figure out what URLs you need to hit and what headers you need to use, but it's possible to automate this. If google ever changes their page layout, ids, classes, or overall page structure, your parsing code will break.

Furthermore, you will also need to be able to capture the return response from the server, which would involve receiving the response at a certain web endpoint. This could be addressed with solution 2, outlined below.

In summary.

Solution 1 - Authenticating

  1. HttpClient GET against authentication URL.
  2. TagSoup to parse page response, store any data (if any) that's required from the page.
  3. XOM xml parser to work with the response from [1.2], if needed.
  4. HttpClient requests against authorization URLs

Solution 2 - Receiving response from google

  1. Launch a Jetty server.
  2. Set your response URL to localhost:****/whatever when authenticating.
  3. Accept response in Jetty. Retrieve response in command line application.

Disclaimer:

This is all untested and highly theoretical. There may be a better way to do this, but it's a lot of work to avoid just opening a web browser and letting the user login.

Stefan Kendall
Is this a desktop application? I am trying to access the API as well and the documentation on this and oAuth is mind boggling for a newbie.
vbNewbie
Check this out:http://googlecodesamples.com/oauth_playground/I was just proposing a possible way to avoid needing the user to manually login to google. If you're writing a web-application, this is all quite straightforward through use of various oauth libraries, such as oauth-signpost.
Stefan Kendall
Please don't do this. And yes, it's a bad idea.
Bob Aman
+2  A: 

The short answer is that you can't. You absolutely would not want to try scraping the Google login page or anything similar.

Your best bet is to do something like a lightweight embedded Jetty server that you use to receive the callback from the Google OAuth flow. This is exactly what was done for OACurl, our OAuth aware curl wrapper. The code for that is in LoginCallbackServer.java.

Will Norris