使用Google Calendar API .NET v3的C#桌面应用程序 - Howto?

时间:2013-03-01 16:06:13

标签: c# google-api-dotnet-client

可能不是唯一一个问这个的人,但我发现什么都行不通......它就像一个丛林;)

我有一个C#桌面应用程序(5-10用户),我想连接到我的Google日历。我想添加,移动,删除,更新日历中的事件。我下载了最后安装的.Net api v.3。

根据我的阅读,困难的部分是验证/连接程序。我想我们需要使用OAuth 2.0身份验证吗?我希望我的用户进行一次身份验证,而不是每次他们想要进行操作(添加,移动,删除,更新)。在某些示例中,我得到的是我们必须将令牌从网页剪切并粘贴到控制台中...不是真的用户友好。以及如何只验证1次(或者只是将令牌直接放在代码中以便不进行身份验证?)?

现在,我可以在C#中使用一个好的工作示例代码吗?

非常感谢你的帮助!!

3 个答案:

答案 0 :(得分:1)

我使用了与示例here类似的内容。我最初做的是使用示例逻辑创建一个简单的Web应用程序来设置Google要求的初始身份验证。我走了过来,从状态中获得了Refresh Token。然后我将其保存在应用程序设置中,以后我可以在将来的GetAuthorization请求中使用它。至少对于我正在做的事情,这种方法运作良好,只要app保持连接,用户就不需要授权。

private IAuthorizationState GetAuthorization(WebServerClient client)
    {
        IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.GetStringValue() });
        string refreshToken = LoadRefreshToken();//this where I wrote code to load it from the app settings
        if (!string.IsNullOrEmpty(refreshToken))
        {
            state.RefreshToken = refreshToken;
            try
            {
                if (client.RefreshToken(state))
                    return state;
            }
            catch (ProtocolException)
            {
                return null;
            }
        }

        return null;
    }

答案 1 :(得分:0)

Here is a link帮助下载.NET的Calendar Client API库。该库使OAuth和访问日历更容易。请参阅OAuth详细信息的链接,但我很确定这是您想要的 - 用户只需登录一次即可进行授权。

在同一页面上有使用VB.NET和MVC中的客户端API的示例应用程序。

答案 2 :(得分:0)

我今天遇到了同样的问题,现在找到了解决方案

  1. 准备Api访问https://console.developers.google.com/apis/dashboard

    1. 按下按钮"启用Apis和服务"
    2. 搜索"日历"并选择" Google Calendar API"
    3. 按下按钮"创建项目"
    4. 创建项目
    5. 按"启用"
    6. 按下按钮"创建凭据"
    7. 选择"您将从哪里调用API?" - >其他用户界面
    8. 选择"您将访问哪些数据?" - >申请数据
    9. 创建服务帐户
    10. 选择角色项目 - >编辑
    11. 选择密钥类型JSON
    12. 按下按钮"继续"
    13. 将文件重命名为" credential.json"并将其保存在visual studio项目中
    14. 将Visual Studio中的更改复制到输出目录 - > "复制如果更新"
  2. 更改Google日历的分享配置(分享此日历)

    1. 从json文件添加电子邮件地址" client_email"在谷歌日历配置"与特定人员共享"
  3. 示例代码

    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Calendar.v3;
    using Google.Apis.Calendar.v3.Data;
    using Google.Apis.Services;
    using System.IO;
    
    namespace Test.GoogleCalendar
    {
        class Program
        {
            static void Main(string[] args)
            {
                GoogleCredential credential;
                using (var stream = new FileStream("credential.json", FileMode.Open, FileAccess.Read))
                {
                    credential = GoogleCredential.FromStream(stream).CreateScoped(CalendarService.Scope.Calendar);
                }
    
                // Create Google Calendar API service.
                var service = new CalendarService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Test Calendar Reader",
                });
    
                var calendars = service.CalendarList.List().Execute().Items;
                foreach (CalendarListEntry calendar in calendars)
                {
                    var events = service.Events.List(calendar.Id).Execute();
                }          
            }
        }
    }