Search code examples
androidpicasagoogle-api-java-client

How to access a fixed user's data via Picasa API in android


I am writing an android application, which will access a user (functional account)'s photos. If possible even hard coding the functional account id& password would be fine. No end-user interaction is required.

Not able to use the google data api as android don't support So the closest thing I found is this Single-user "installed" client authentication in Gdata API doc, To use ClientLogin (also called "Authentication for Installed Applications"), create a PicasawebService object, then invoke the setUserCredentials method to set the user ID and password

PicasawebService myService = new PicasawebService("exampleCo-exampleApp-1"); 
myService.setUserCredentials("[email protected]", "mypassword");

Picasa Service is Not available in the API console.

Meanwhile, when I try to use the OAuth 2.0 it is not availalbe

I wonder Picasa should be quite popular, what is the best way to do such simple access?

official picasa-atom-oauth sample

This is the official picasa-atom-oauth sample I found. There is a customized call-back server class, however seems it is making use of the browser to get the token. Is it possible to hard code the password in it?

I read this similar question, and seems there is also issue on the token. Did anyone succeed to use "oauth2:https://picasaweb.google.com/data/" as suggested?


Solution

  • Finally after googling more examples, the old client login is the way to go.

    I used google api client 1.10.1-beta

      private static String getTokenByAuthenticatingWithClientLogin(HttpTransport transport) throws IOException {
        ClientLogin authenticator = new ClientLogin();
        authenticator.authTokenType = "lh2";
        authenticator.username = "username";
        authenticator.password = "password";
        authenticator.transport = transport;
        return authenticator.authenticate().getAuthorizationHeaderValue();
      }
    

    set the token in headers

    GoogleHeaders headers = new GoogleHeaders();
    headers.setApplicationName("APOD/1.0");
    headers.setGDataVersion("2");
      String token = getTokenByAuthenticatingWithClientLogin(transport);
      headers.setAuthorization(token);
    

    Then use com.google.api.client.http.HttpRequestFactory to construct the request.