用于 dotnet 的 Google API v3;使用带有 API 密钥的日历

2023-12-06

我正在尝试使用 v3 API (http://code.google.com/p/google-api-dotnet-client/) 读取我自己的 Google 日历。我最终想要的是通过自定义控件在我的网站上显示来自 Google 日历的我自己的日历(稍后让人们进行自定义约会)。我正在阅读的每个示例都基于这样的前提:我应该手动授予对数据的访问权限。仍然在 Google API 控制台中,我使用 API 密钥创建了一个应用程序。我正在尝试为我的代码创建有效的 IAuthentication。尽管如此,我还是不知道我必须使用哪种身份验证。下面是一个悲惨的尝试,谁能帮我解决这个问题?

  public void TestMethod1()
    {
        // http://code.google.com/p/google-api-dotnet-client/wiki/OAuth2
        NativeApplicationClient provider = NativeApplicationClient(GoogleAuthenticationServer.Description);
        NativeApplicationClient(GoogleAuthenticationServer.Description);

        provider.ClientIdentifier = "x";
        provider.ClientSecret = "x";

        var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);


        Google.Apis.Calendar.v3.CalendarService service = new Google.Apis.Calendar.v3.CalendarService(auth);
        var result = service.Events.List("primary").Fetch();

        Assert.IsTrue(result.Items.Count > 0);
    }

    private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
    {
        IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.GetStringValue() });

        return arg.ProcessUserAuthorization("", state);
    }

你好,对我来说这有效:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.Apis.Calendar;
using Google.Apis.Calendar.v3;
using Google.Apis.Authentication;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using DotNetOpenAuth.OAuth2;
using System.Diagnostics;
using Google.Apis.Calendar.v3.Data;

namespace consoleGoogleResearch
{
    class Program
    {
        public static void Main(string[] args)
        {            
            // Register the authenticator. The Client ID and secret have to be copied from the API Access
            // tab on the Google APIs Console.
            var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description);
            provider.ClientIdentifier = "fill_in_yours";
            provider.ClientSecret = "fill_in_yours";           
            // Create the service. This will automatically call the authenticator.
            var service = new CalendarService(new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthentication));

            Google.Apis.Calendar.v3.CalendarListResource.ListRequest clrq = service.CalendarList.List();
            var result = clrq.Fetch();

            if (result.Error != null)
            {
                Console.WriteLine(result.Error.Message);
                Console.ReadKey();
                return;
            }

            Console.WriteLine("Calendars: ");           
            foreach (CalendarListEntry calendar in result.Items)
            {
                Console.WriteLine("{0}", calendar.Id);
                Console.WriteLine("\tAppointments:");
                Google.Apis.Calendar.v3.EventsResource.ListRequest elr = service.Events.List(calendar.Id);
                var events = elr.Fetch();
                foreach (Event e in events.Items)
                {
                    Console.WriteLine("\t From: {0} To: {1} Description: {2}, Location: {3}", e.Start, e.End, e.Description, e.Location);
                }
            }            
            Console.ReadKey();
        }        

        private static IAuthorizationState GetAuthentication(NativeApplicationClient arg)
        {            
            // Get the auth URL:
            //IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.ToString() });
            IAuthorizationState state = new AuthorizationState(new[] { "https://www.google.com/calendar/feeds" });
            state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
            Uri authUri = arg.RequestUserAuthorization(state);

            // Request authorization from the user (by opening a browser window):
            Process.Start(authUri.ToString());
            Console.Write("  Authorization Code: ");
            string authCode = Console.ReadLine();

            // Retrieve the access token by using the authorization code:
            return arg.ProcessUserAuthorization(authCode, state);
         }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于 dotnet 的 Google API v3;使用带有 API 密钥的日历 的相关文章

  • 将列添加到新的数据行

    是否可以创建一个新的 DataRow 对象并在运行时向其中添加列 How can I specify column names for this data row object DataRow row new DataRow 不 DataR
  • 如何使用 NHibernate 和 Fluent NHibernate 存储未截断的 varchar(max) 字符串

    我的数据库模式有一个 varchar max 字符串 我读过另一本问题 https stackoverflow com questions 2343105 override for fluent nhibernate for long te
  • 将 GUID 转换为整数并返回

    所以我有一个必须与之交互的第三方应用程序 该应用程序需要我的用户表中的用户ID 问题是我将我的 userID 存储为 GUID 而第 3 方应用程序仅接受整数 所以我想 如果有一种方法可以将 GUID 转换为整数 然后能够将其转换回来 当我
  • 如何解决 MVC 中的“访问令牌已过期,但我们无法刷新它”

    我目前正在研究谷歌API其目的是获取登录者的圈子 我已经有了访问令牌但问题是每当我尝试运行我的代码时它都会返回此异常 访问令牌已过期 但我们无法刷新它 我该如何解决这个问题 var claimsforUser await UserManag
  • 是否可以获取.NET调用堆栈中每个帧的参数值

    我说的是托管 NET 代码 如果我们运行任何程序并将 VS 附加到它 我们可以看到调用堆栈中每个方法的参数值 我想创建一个日志记录解决方案 它将记录调用堆栈中每个方法的所有参数值 实际上我需要这些信息以防发生异常 我知道通过分析 API 可
  • 在 .NET C# 项目中使用 PHP

    有谁知道是否可以 以及是否有任何复杂性 在 NET C 项目中使用 PHP 语言 我知道 VB 和 C 现在可以混合在解决方案中 所以我想知道 由于 IIS 现在能够运行 PHP 您是否可以将它们组合成一个单一的运行时 显然 提出这个问题的
  • 了解多个 configureawait(false) 在单个异步方法中执行的操作

    考虑这段代码 public async Task SomeMethodAsync 1 code here executes on the original context for simplicity sake this doesn t c
  • Interlocked 类可以安全地与 lock() 混合吗?

    当您将互锁操作与 lock 和其他更高级别的锁 混合使用时 是否可以保证原子读取 我对混合这样的锁定机制时的一般行为以及 Int32 和 Int64 之间的任何差异感兴趣 private Int64 count private object
  • 运行命令行进程并在该进程仍在运行时获取输出?

    如何运行命令行进程并在该进程仍在运行时获取输出 我的意思是使用自己的进度条运行 CLI 进程 可执行文件本身需要很长时间才能完成操作 所以我想从自己的进程中获取进度信息来显示我的应用程序中的进度 否则我不这样做在进程完成之前没有任何信息来显
  • C# 从整数反序列化枚举

    是否可以从 C 中的 int 反序列化枚举 例如如果我有以下课程 class Employee public string Name get set public int EmployeeTypeID get set 我可以轻松地从 XML
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 将 Web 场迁移到 ASP.NET 运行时版本 4,同时保持会话

    我们已将 Web 应用程序从 net 运行时 2 v 3 5 迁移到 net 运行时 4 v 4 5 我有一个部署问题 我们的 sessionstate 服务器是一个 stateserver 并在单独的服务器上运行框架 2 中的 aspne
  • 为什么我应该更喜欢单个“await Task.WhenAll”而不是多个等待?

    如果我不关心任务完成的顺序 只需要它们全部完成 我是否仍然应该使用await Task WhenAll而不是多个await 例如 是DoWork2下面是一个首选方法DoWork1 为什么 using System using System
  • 无法使用 Visual Studio 2013 中的 F5 进行调试,模块窗口为空

    我正在尝试使用调试程序启动外部程序在 Visual Studio 2013 中 所有项目文件都是 NET 3 5 顺便说一句 自从更新到VS2013 大约两周 以来我就这样调试过 但今天突然停止工作了 当我运行该程序时 它会启动 但是调试
  • 尝试使用 angularJS 和 c# webapi 从服务器下载文件

    将文件上传到服务器时效果很好 没有损坏的文件 但是 当我下载文件时 除了纯txt 它们起作用 它们的规模不断扩大并变得腐败 经过大量调查后 我不知道可能出了什么问题 我只是写文件 作为响应流并下载 blob 欢迎任何想法 严重依赖此线程来解
  • 链接 C++ 和 C++/CLI 项目 (.NET Core) 时导入错误 (E0337)

    我目前正在尝试建立一个 NET 项目 我有一个现有的 C 后台项目 我想将其显示在 Web 界面上 为此 我尝试通过以下方式将我的 C 链接到 NET 平台 CLR 类库 NET Core 并最终将其链接到ASP NET 网络界面但这是下一
  • 自动修补程序(高效自动更新程序)

    我想要一个自动更新程序 可以检测修改的文件 通过比较客户端和服务器上的文件 并仅下载修改的文件 我还希望它能够给我生动的状态 在进程栏或其他东西上显示它 该场景是网络中有大约一千个客户端 它们使用相同的应用程序 如果应用程序有新版本可用 他
  • .NET Windows 服务中调用 C# 的 wait 的 I/O 回调是否可以不阻塞?

    我知道在 ASP NET 中 当使用 wait 时工作线程会返回到池中 而 I O 发生在后台 这对于可扩展性非常有用 我的 Windows 服务是一个套接字服务器 它使用 Begin End 样式的异步套接字 I O 混合我的魔法 我知道
  • 从 .Net 将简单数据插入 Excel 文件的最简单方法

    我有一个 Excel 文件 大约有 10 列和 1 20 行 我需要插入 1 20 行包含各种数据元素 我想知道是否有一种方法可以将一些标签放入 Excel 文件中 以便可以找到并替换它们 将列标记为 名称 的东西 这样我就可以在代码中说
  • 可选参数“必须是编译时常量”

    我有一个类分为两个部分文件 如下所示 public partial class PersonRepository BaseRepository

随机推荐

  • 移动文本模式光标不起作用

    我一直致力于在我目前正在开发的操作系统中移动文本模式光标 我根本无法让它显示出来 这是我用来更新光标的代码 void update cursor unsigned char cursor loc y pos Cols x pos curso
  • 如何确定给定 wxWidgets 中当前字体的字符串的大小

    有没有办法根据 C wxWidgets中当前选择的字体确定给定字符串的显示长度 以像素为单位 例如 如果我打印出字符串 Speed 并希望在 和后面的值之间放置 10 个像素 我需要知道 Speed 字符串有多长 有没有办法确定这一点 我似
  • 带有 Spark 流的多个 writeStream

    我正在使用 Spark Streaming 在尝试实现多个写入流时遇到一些问题 下面是我的代码 DataWriter writeStreamer firstTableData parquet CheckPointConf firstChec
  • Scala 注释实际上是什么? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我不懂Java 开始学习Scala 什么是注释以及它们的用途是什么 注释是附加到类 方法
  • 将 url 参数传递给 swf (flash) 影片

    这里是Flash新手 我正在尝试在浏览器中加载 swf 文件并将 url 参数传递给 flash 影片 如何在actionscript中访问flash电影中的url参数 这是一个示例网址 我确实找到了通过嵌入 对象标签传递参数的指针 但没有
  • MockMvc WebAppConfiguration:在 web.xml 中加载 servlet 映射

    我正在使用 MockMvc 编写集成测试 我想知道是否有一种方法可以从 web xml 加载 servlet 映射 这通常不重要 我有一个习惯HandlerInteceptor与请求 URI 匹配 来自HttpServletRequest
  • Trac,如何分层组织页面?

    I use trac管理我的项目 我想以与 trac 项目相同的方式组织 wiki 页面 即按类别 子类别等 标题索引trac 网站上的页面很好地解释了我想要获得的结果 我该如何实现这一目标 首先 你可以创建分层的wiki页面 只需修改ur
  • 有没有办法改变 UIToolbar 的高度?

    我有一个UIToolbar在 Interface Builder 中 我注意到它的高度被锁定为 44px 当然 我想把它做得更大 Apple 允许调整此控件的大小吗 如果是这样 我该怎么办 当然 只需将其框架设置不同即可 myToolbar
  • python 日志记录 - 使用 JSON 日志,我可以为每个日志添加“额外”值吗?

    我正在使用蟒蛇logging模块 以及python json logger我想添加一些键 app name myapp env prod 自动查看我的所有日 志 无需执行以下操作 logger info Something happened
  • 为什么当我设置元素位置:绝对时线性渐变消失?

    我制作了一个渐变背景 我想将这个文本块居中 我的目标是创建一个位于屏幕中间中心的标题 无论视口的分辨率如何 所以我把这个 header 设置为绝对位置 并使用了我在网上找到的这种集中方法 它完美地集中 问题是 渐变背景变成白色 看起来标题位
  • 查找开放会话数

    我正在寻找一种简单 无数据库 的方法来列出网站上有多少活跃用户 我能想到的最简单的方法是计算打开会话的数量 这段代码应该管用 number of users count scandir ini get session save path 当
  • std regex_search 仅匹配当前行

    我使用各种正则表达式逐行解析 C 源文件 首先我读取字符串中文件的所有内容 ifstream file stream commented cpp ifstream binary std string txt std istreambuf i
  • 如何将参数注入 TestCafé 测试?

    设想 我使用 API 运行用代码封装的 TestCaf 我有一个想要参数化的测试 使用不同的动态值进行测试 Problem Testcaf 不支持向测试发送参数 有没有办法注入值 您可以使用进程 env将参数从运行程序脚本传递给 TestC
  • 如何从 Guava MultiMap 中获取每个条目及其关联的相应值?

    我正在读取一个巨大的 csv 文件 其中包含重复的条目 我能够将整个 csv 文件读入Multimap 我还能够获取具有重复值的键集并将它们写入文件 我想获取与每个键关联的值并将其写入文件 但无法这样做 我似乎找不到任何可能对我有帮助的选项
  • 如何在 Rails 4 中将 PDF 转换为 Excel 或 CSV

    我已经搜索了很多 除非在这里问这个问题 否则我别无选择 你们知道有一个在线转换器有 API 或 Gem s 可以将 PDF 转换为 Excel 或 CSV 文件吗 我也不确定这里是否是问这个问题的最佳地点 我的应用程序是在 Rails 4
  • 有没有办法使用命令行 cURL 跟踪重定向?

    我知道在 php 脚本中 curl setopt ch CURLOPT FOLLOWLOCATION true 将遵循重定向 有没有办法使用命令行 cURL 跟踪重定向 使用位置标头标志 curl L
  • 为什么 re.sub('.*?', '-', 'abc') 返回 '-a-b-c-' 而不是 '--------'?

    这是python2 7的结果 gt gt gt re sub abc a b c 我以为的结果should如下 gt gt gt re sub abc 但事实并非如此 为什么 据我所知 对这种行为的最好解释来自regexPyPI 包 其目的
  • JSON.Stringify 在 Scripting.Dictionary 对象上失败

    我正在开发一个 ASP 经典项目 在该项目中我实现了 JScript JSON 类here 它能够与 VBScript 和 JScript 互操作 并且几乎与以下位置提供的代码完全相同 json org 我的团队经理要求我在这个项目中使用
  • 如何交错两个数组列表?

    我正在尝试开发一个程序 通过将一副牌分成两部分然后将它们交错来洗牌 班级甲板代表一副 52 张牌 有两种方法 牌组 int n and 抽卡卡 牌组 int n 是构造函数 该参数告诉我们应该洗牌多少轮 在每轮洗牌中 整副牌首先被分成两个子
  • 用于 dotnet 的 Google API v3;使用带有 API 密钥的日历

    我正在尝试使用 v3 API http code google com p google api dotnet client 读取我自己的 Google 日历 我最终想要的是通过自定义控件在我的网站上显示来自 Google 日历的我自己的日