使用dart中的googleapis库更新日历并将其显示在网页上

时间:2014-12-01 19:07:08

标签: calendar google-api dart

我是dart的新手,我一直试图弄清楚如何使用googleapis库更新日历事件,然后在网页上显示日历/事件。

到目前为止,我有这个代码,我希望只将#text id的文本更改为所选日历ID中的事件列表:

    
import 'dart:html';
import 'package:googleapis/calendar/v3.dart';
import 'package:googleapis_auth/auth_io.dart';

final _credentials = new ServiceAccountCredentials.fromJson(r'''
{
  "private_key_id": "myprivatekeyid",
  "private_key": "myprivatekey",
  "client_email": "myclientemail",
  "client_id": "myclientid",
  "type": "service_account"
}
''');

const _SCOPES = const [CalendarApi.CalendarScope];

void main() {
  clientViaServiceAccount(_credentials, _SCOPES).then((http_client) {
    var calendar = new CalendarApi(http_client);

    String adminPanelCalendarId = 'mycalendarID';

    var event = calendar.events;

    var events = event.list(adminPanelCalendarId);

    events.then((showEvents) {
      querySelector("#text2").text = showEvents.toString();
    });

  });
}

但网页上没有显示任何内容。我想我误解了如何在飞镖中使用客户端和服务器端代码...我是否将文件分解为多个文件?我如何更新日历并在带有dart的网页上显示?

我熟悉browser包,但这是我第一次用服务器端库编写任何内容(googleapis使用dart:io所以我认为它是服务器端?我无法在dartium中运行代码。

如果有人能指出我正确的方向,或提供一个如何实现这一目标的例子,我将非常感激!

2 个答案:

答案 0 :(得分:2)

您可能正在寻找的是hybrid flow。这会产生两个项目

  • 访问凭据(用于客户端API访问)
  • 授权代码(使用用户凭据进行服务器端API访问)

来自文档:

使用案例:Web应用程序可能希望获得代表用户访问数据的同意。客户端部分是一个动态的webapp,它想要打开一个弹出窗口,要求用户同意。 webapp可能希望使用凭据进行API调用,但服务器也可能希望对用户数据进行脱机访问。

页面Google+ Sign-In for server-side apps描述了此流程的工作原理。

答案 1 :(得分:1)

使用以下代码,您可以显示与记录的帐户关联的日历的事件。在此示例中,我使用 createImplicitBrowserFlow (请参阅https://pub.dartlang.org/packages/googleapis_auth中的文档),其中包含来自Google Cloud Console Project的ID和密钥。

    
import 'dart:html';
import 'package:googleapis/calendar/v3.dart';
import 'package:googleapis_auth/auth_browser.dart' as auth;

var id = new auth.ClientId("<yourID>", "<yourKey>");
var scopes = [CalendarApi.CalendarScope];

  void main() {

  auth.createImplicitBrowserFlow(id, scopes).then((auth.BrowserOAuth2Flow flow) {
        flow.clientViaUserConsent().then((auth.AuthClient client) {

          var calendar = new CalendarApi(client);

              String adminPanelCalendarId = 'primary';

              var event = calendar.events;

              var events = event.list(adminPanelCalendarId);

              events.then((showEvents) {
                showEvents.items.forEach((Event ev) { print(ev.summary); });
                querySelector("#text2").text = showEvents.toString();
              });      


          client.close();
          flow.close();
        });
      });

}