当前位置: 首页 > 知识库问答 >
问题:

如何让服务器访问Google日历API?

杨晟
2023-03-14

我正在尝试构建一个web应用程序,它可以访问用户的Google日历API,而不需要用户真正在那里。所以基本上是在后台从我的服务器(PHP脚本)添加或修改Google日历中的事件。

我已经是Google Calendar的oauth2了,我为他们准备了一个刷新令牌,这样他们就不必每次都重新登录了。他们只需登录oauth一次,就很好了。但是我怎样才能使服务器能够在后台进行更改呢?

共有2个答案

终祯
2023-03-14

如果您习惯于制作“普通”网页,那么执行异步工作通常会破坏工作流,因为任何异步活动都超出了通常的请求生命周期。

您需要将异步任务委托给专用程序、进程或线程。这意味着使用一种排队系统并拥有一个单独的进程,其工作是在排队系统中运行任务并更新状态。

如果你正在学习,我建议你自己动手——最小排队系统是一个很好的学习项目;您可以使用常规数据库管理系统将其推出。您必须注意竞争条件(提示:使用行锁)。

如果您正在进行生产,我建议您使用ZeroMQ之类的东西——我知道PHP有很好的绑定。

除了让您的网站更新并从排队系统中读取之外,您还需要任务运行程序——最简单的形式是计划的作业;您可以执行一个简单的php脚本,生活在while循环中,睡眠一段时间(取决于您正在构建的软件的流量),检查作业队列中是否有内容,并在需要时进行更新。

您可能需要学习如何在计算机每次启动时运行进程,否则简单的系统重新启动会破坏您的设置。

最后,工作流程会有点像这样:

  • 网站有一个检查队列的工具(我排队的事情还没有完成吗?我排队的事情已经完成了吗?我让用户知道作业已经完成了吗?等等。)
  • 网站具有将作业插入队列的功能
  • 一个独立于网站的进程可以不时检查队列,并用事务的结果更新它
景恩
2023-03-14

我想出来了。因此,我所做的是将访问令牌存储在数据库中,并检查访问令牌是否过期。如果是,我将使用数据库中的刷新令牌来生成新的访问令牌。因此,每次服务器访问用户帐户时,都会使用数据库中的访问令牌。此外,请确保将访问类型设置为脱机,如下所示:

$client->setAccessType('offline');
 类似资料:
  • 我正在尝试使用谷歌API的v3从客户的公共日历中获取事件列表。我在API Explorer中输入了日历ID,得到了一个肯定的结果: 为了创建 API 密钥,我在 Google 开发者控制台中创建了一个项目,并创建了一个公共 API 访问密钥 (API 我看到的所有回复都表明,您需要确保Google Calendar API已打开,而且它确实已打开(默认情况下也是打开的)。我在这里错过了什么?

  • 我试图使用VBScript和Oauth脱机访问谷歌日历API。我设法获得了一个刷新令牌和一个访问令牌,现在我想进入实际使用API的步骤,使用以下代码: 我得到的回应是: 即使访问令牌是有效的--如果我将sURL更改为https://www.googleapis.com/oauth2/v1/tokeninfo并运行该脚本,我将得到以下响应,显示一个有效的令牌: 如果我粘贴URL https://ww

  • 我们正在尝试创建一个与谷歌管理SDK的集成,以便能够检索,更新和创建帐户在我们的领域。但是,我们不断收到一个403错误,表明我们没有被授权访问Resource/API。 我们正在使用从一个服务帐户获得的凭据,该帐户启用了域范围的授权,并且具有以下两个作用域:https://www.googleapis.com/auth/admin.directory.user.readonly,https://w

  • 我试图从Laravel项目、DBeaver和Artisan访问我的PostgreSQL数据库。从Laravel project或Artisan()访问它总是会导致: 无法连接到服务器:连接被拒绝 服务器是否在主机“127.0.0.1”上运行,并在端口5432上接受TCP/IP连接 因为我不依赖我的Laradock设置,而且我对Laravel也不太熟悉,所以我确实用默认设置重新下载了Laradock

  • 我们正在尝试使用EWS管理的应用编程接口集成办公365。我们使用办公365管理中心创建了一个具有模拟角色的服务号。现在,我们如何使用该服务号访问应用程序中其他用户的数据(如邮件、联系人、日历)?谢谢,罗希特

  • 我有一个Google Apps脚本,可以从我的Google日历中检索事件并处理它们。大约3-4小时前它运行良好,但在某个时候它只是停止工作。 错误发生在第行: 错误显示“脚本没有执行此操作的权限。必需的权限(https://www.googleapis.com/auth/calendar || https://www.googleapis.com/auth/calendar.readonly ||