如何让服务器访问Google Calendar API?

时间:2018-10-01 18:21:01

标签: php oauth-2.0 google-api google-calendar-api google-oauth

我正在尝试构建一个Web应用程序,该应用程序将访问用户的Google Calendar API,而实际上他们并不在那里。因此,基本上是在后台从我的服务器(PHP脚本)在其Google日历中添加或修改事件。

我已经是Google日历中的oauth2了,我为他们准备了刷新令牌,因此他们不必每次都重新登录。他们只需登录一次oauth就可以了。但是,如何使服务器可以在后台进行更改?

2 个答案:

答案 0 :(得分:1)

我知道了。因此,我要做的就是将access_token存储在数据库中,并检查访问令牌是否已过期。如果是这样,我将使用数据库中的refresh_token来生成一个新的访问令牌。因此,服务器每次访问用户帐户时,都会使用数据库中的访问令牌。另外,请确保将访问类型设置为offline,如下所示:

$client->setAccessType('offline');

答案 1 :(得分:0)

如果您习惯制作“普通”网页,那么进行异步工作通常会中断工作流程,因为任何异步活动都位于通常的请求生命周期之外。

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

如果您正在学习中,我建议您自己开发-最小排队系统是一个很好的学习项目;您可以使用常规数据库管理系统进行部署。您必须注意竞争条件(提示:使用行锁)。

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

除了要更新网站并从排队系统中读取信息外,您还需要任务运行器-最简单的形式是计划作业;您可以在while循环中创建一个简单的php脚本,休眠一段时间(取决于您所构建的软件的流量),检查作业队列中是否有内容,并在需要时进行更新

您可能需要学习如何使每次启动计算机时都运行的进程来执行此操作,否则简单的系统重启将使您的设置变得混乱。

最后,工作流程将如下所示:

  • 该网站具有检查队列的功能(我是否已将尚未完成的事情排队?我已排队的事情已经完成?我是否让用户知道作业已完成?等)
  • 网站具有将作业插入队列的功能
  • 与网站分开的进程 可以不时检查队列,并根据交易结果对其进行更新