Google API 1: Google日历api操作 (PHP)

来源:互联网 发布:多核优化好的网游 编辑:程序博客网 时间:2024/05/17 21:44

本文写于2014/ 10/22,文中所有的连接和文档的状态都是以这个时间点为准。截止到这个时间点,google developer中的文档还是老版的,和新版代码是冲突的。

    google api php代码地址 (Beta 版本) :https://github.com/google/google-api-php-client

   google calendar api文档地址(文档还没有更新): https://developers.google.com/google-apps/calendar/


1. 首先了解一下google api

   google api是一套公共的访问接口,通过这套接口,我们能够访问google的一些数据。通常情况下我们需要首先注册一个Google developer的账户。这里将忽略注册的部分。

  想要访问api,主要有两种方法:通过REST接口,通过client library (针对每一种语言,google提供的一套类库),在这篇文章中我们将要讲解的是php语言的client library方式。

2. google api的验证

   想要通过google api的获取一些数据。我们首先需要通过google的验证,google提供了两种authentication的方式:

   1. 通过一个developer key 来访问。这种方式简单的说就是在访问一些google的公共接口的时候(例如google book 里面查找一个作者的所有书籍),我们通过给google 提供我们的developer key,google 就能够允许我们访问这套api。

      虽然这种方法很简单,但是我们不能访问用户的信息。比如你想访问自己的google日历里面的内容,这种方式就不可以了。

   2. 通过OAuth2.0来进行用户验证

      OAuth 2.0是现在比较好的验证框架,这里不做赘述。通过OAuth2.0验证我们通常情况下会遇到两种情况:client-to-server 和 server-to-server

      a. client-to-server

         这种情况是用户通过页面来授权,是的程序能够访问某个人的信息。比如,我们想做一个通过第三方登陆,我们就可以按照这种方式来完成。这种方式要求每次用户都要授权给程序,程序才能访问某个用户的信息。

    b. server-to-server

       但是对于一些客户端程序,我们不可能通过上一种方式,每次都给授权,所以这有了server-to-server这种验证的方式。本文的代码主要是这种方式,通过这种方式来访问某一个用户google日历:

       b.1: 创建一个service account, 得到 client_id , Email_address, key_file

       b.2:  将用户的日历share给之前创建的那个service account,并且拿到这个日历的 calendar_id

       b.3:  通过代码来获取这个calendar的信息

<?phpsession_start ();require_once 'google-api-php-client/src/Google/Client.php';require_once 'google-api-php-client/src/Google/Service/Calendar.php';$client_id = '1039242859127-jvdeilpms8kp84lpsfo5n5jdm9kdrr1e.apps.googleusercontent.com'; //Client ID$Email_address = '1039242859127-jvdeilpms8kp84lpsfo5n5jdm9kdrr1e@developer.gserviceaccount.com'; //Email Address$key_file_location = 'qingscal-dda622e5a217.p12';$calendar_id = 'q3794e2o24i7pg8ellu2fsg93s@group.calendar.google.com';$client = new Google_Client ();$client->setApplicationName ( "Client_Library_Examples" );$key = file_get_contents ( $key_file_location );$scope = array('https://www.googleapis.com/auth/calendar');$cred = new Google_Auth_AssertionCredentials ( $Email_address, $scope, $key );$client->setAssertionCredentials ( $cred );if ($client->getAuth ()->isAccessTokenExpired ()) {$client->getAuth ()->refreshTokenWithAssertion ( $cred );}$service = new Google_Service_Calendar($client);
// 得到所有这个service account 被share的日历$calList = $service->calendarList->listCalendarList();
print_r($service->events->listEvents());
?>

参考文档: https://groups.google.com/forum/#!searchin/google-calendar-api/service$20account$20$20calendar/google-calendar-api/W3I8E49wuCU/ksI29R6NuDsJ







   

0 0
原创粉丝点击