使用Google API Java客户端解析公开共享的日历RSS源

时间:2012-01-10 18:27:40

标签: android rss google-calendar-api google-api-java-client

我正在尝试构建一个Android应用程序,该应用程序在公共日历RSS源的列表中显示Google日历条目。日历源是公共的,但不会与任何特定用户共享。

我在iOS上通过使用Google的gdata库(与公共日历RSS结合)来解析和显示公共日历源。

不幸的是,gdata与Android不兼容。 Google有新的google-api-java-client库,但所有示例代码都与设备上的Google帐户一起使用,然后通过OAuth进行身份验证。

有没有办法使用这些新库来获取和解析公共提要,而无需在设备上存储身份验证信息?甚至可以进行身份​​验证?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。使用Google Api Java客户端示例中的当前YouTube示例可以看到一个很好的例子。

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

这个难题的缺失部分是:

  1. 扩展GoogleUrl类(我使用CalendarUrl)
  2. 创建与jsonc输出匹配的对象 feed(你可以通过附加& alt = jsonc来获取jsonc输出 Feed网址的结尾)
  3. 注释(@Key(“NameOfField”))来自步骤2的对象以匹配jsonc名称
  4. 完成上述操作后,将构建以下代码并获取您需要的所有内容:

    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);