2012-01-10 4 views
1

Je tente de créer une application Android affichant les entrées de calendrier Google dans une liste provenant d'un flux RSS public de calendrier. Le flux du calendrier est public, mais n'est pas partagé avec un utilisateur spécifique.Utilisation du client API Java de Google pour analyser publiquement les flux RSS de calendrier partagés

Je l'ai fait sur le côté iOS en utilisant la bibliothèque gdata de Google (en combinaison avec le calendrier RSS public) pour analyser et afficher le flux du calendrier public.

Malheureusement, gdata n'est pas compatible avec Android. Google a les nouvelles bibliothèques google-api-java-client, mais tout l'exemple de code est utilisé en tandem avec un compte google vivant sur l'appareil qui s'authentifie ensuite via OAuth.

Est-il possible de saisir et d'analyser des flux publics avec ces nouvelles bibliothèques sans avoir à stocker les informations d'authentification sur le périphérique? Ou même authentifier du tout?

Répondre

1

J'ai trouvé la solution. Un bon exemple de ceci peut être vu avec l'exemple YouTube actuel sur l'exemple de client Google Api Java.

http://code.google.com/p/google-api-java-client/wiki/SampleProgram

La partie manquante du casse-tête était d'avoir à:

  1. étendre la classe GoogleUrl (je CalendarUrl)
  2. créer des objets qui correspondent à la sortie jsonc de l'alimentation (vous peut obtenir la sortie jsonc en ajoutant & alt = jsonc à l'adresse fin de l'URL de flux)
  3. Annoter (@Key ("NameOfField")) les objets de étape 2 pour faire correspondre les noms jsonc

Une fois que vous avez fait cela, le code suivant va construire et obtenir tout ce dont vous avez besoin:

HttpTransport transport = new NetHttpTransport(); 
final JsonFactory jsonFactory = new JacksonFactory(); 
HttpRequestFactory factory = transport.createRequestFactory(new HttpRequestInitializer() { 
     @Override 
     public void initialize(HttpRequest request) { 
      // set the parser 
      JsonCParser parser = new JsonCParser(jsonFactory); 
      request.addParser(parser); 
      // set up the Google headers 
      GoogleHeaders headers = new GoogleHeaders(); 
      headers.setApplicationName("Google-CalendarSample/1.0"); 
      headers.gdataVersion = "2"; 
      request.setHeaders(headers); 
     } 
}); 

CalendarUrl url = new CalendarUrl(YOUR_FEED_URL); 

HttpRequest request = factory.buildGetRequest(url); 
CalendarFeed feed = request.execute().parseAs(CalendarFeed.class); 
Questions connexes