zaupita/laravel-google-calendar

利用 Google Client API 的 Laravel Google Calendar API 包装器。

v1.7 2021-07-19 22:09 UTC

This package is auto-updated.

Last update: 2024-09-20 04:39:04 UTC


README

Laravel Google Calendar API 包装器(与其他解决方案不同),它使用 Google Client API 而不是 Google 服务帐户。与 FullCalendar.io 无缝集成。

安装

此包可用于 Laravel 5.4 或更高版本。

您可以通过 composer 安装此包

composer require zaupita/laravel-google-calendar

在 Laravel 5.5+ 中,服务提供者和别名将自动注册,您可以直接跳过此步骤。在框架的较旧版本中,只需在 config/app.php 文件中添加服务提供者和别名即可

'providers' => [
    // ...
    zaupita\GoogleCalendar\GoogleCalendarServiceProvider::class,
];

// ...

'aliases' => [
    // ...
    'GoogleCalendar' => zaupita\GoogleCalendar\Facades\GoogleCalendar::class,
];

现在您可以通过以下命令发布迁移和配置文件,并将更新迁移到用户表中:

php artisan vendor:publish --provider="zaupita\GoogleCalendar\GoogleCalendarServiceProvider" && php artisan migrate

注意:如果您使用的是不使用 JSON 字段类型的数据库(例如,较旧的 MariaDB 版本),则在尝试运行迁移时可能会遇到数据库错误。在这种情况下,您需要将 'update_users_table.php' 迁移文件(由上述命令发布)中的 'google_access_token' 列更改为 'LONGTEXT'。然后,使用 php artisan migrate 重新运行您的迁移。

成功! laravel-google-calendar 已成功安装!

配置

配置 laravel-google-calendar 的第一步是获取 Google API 凭据。您可以在 https://console.developers.google.com/apis/credentials/oauthclient/ 获取这些凭据。

将 Google API 凭据复制并粘贴到您的 .env 文件中。例如

GOOGLE_CLIENT_ID=C13n71D_7166xlnk4q4fd24hdeteq.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=s3cr37sMnYiOk4i8fr2rX

使用

可以使用易于记忆的 Facade “GoogleCalendar” 访问 GoogleCalendar。

可用方法

getAuthUrl()

获取中间 Google 客户端 API 认证 URL。

可选 $redirect:传递一个相对 URL(例如,'/dashboard'),在用户通过 Google 认证后进行重定向。默认为网站根目录(即 '/')。

isAuthed()

检查当前登录用户是否已通过 Google 客户端 API 认证。

listCalendars()

列出当前登录用户可用的日历。

可选 $accessToken:在需要手动设置用户的访问令牌时很有用(例如,使用 API 认证而不是 Web)。默认为 users 表中的 'google_access_token' 列。

listEvents()

列出当前登录用户的事件。

可选 $calendarId:手动设置日历 ID。默认为 'primary' 日历。

可选 $accessToken:在需要手动设置用户的访问令牌时很有用(例如,使用 API 认证而不是 Web)。默认为 users 表中的 'google_access_token' 列。

可选 $start:默认为当前月份的开始。

可选 $end:默认为当前月份的结束。

可选 $timezone:默认为 null。

updateEvent($request)

必需 $request:请求对象应包含 'calendarId'、'eventId'、'summary'、'location'、'description'、'allDay'、'start' 和 'end' 的值。'timezone' 和 'attendees' 是可选的。'timezone' 应根据 IANA TZDB 中的相应条目进行格式化。'attendees' 应为以逗号分隔的电子邮件列表。

可选 $accessToken:在需要手动设置用户的访问令牌时很有用(例如,使用 API 认证而不是 Web)。默认为 users 表中的 'google_access_token' 列。

createEvent($request)

必填 $request:请求对象应包含 'calendarId'、'summary'、'location'、'description'、'allDay'、'start' 和 'end' 等值。'timezone' 和 'attendees' 为可选。'timezone' 应按照 IANA TZDB 中的相应条目进行格式化。'attendees' 应为以逗号分隔的电子邮件列表。

可选 $accessToken:在需要手动设置用户的访问令牌时很有用(例如,使用 API 认证而不是 Web)。默认为 users 表中的 'google_access_token' 列。

deleteEvent($request)

必填 $request:请求对象应包含 'calendarId' 和 'eventId' 的值。

可选 $accessToken:在需要手动设置用户的访问令牌时很有用(例如,使用 API 认证而不是 Web)。默认为 users 表中的 'google_access_token' 列。

暴露 API

此包附带一个控制器,可以用于(或您也可以创建自己的)以将上述方法公开给 API。以下是实现此目的的示例路由定义

// Google Calendar API routes
Route::group([ 'prefix'=>'api/google' ], function () {
	Route::get('calendars', '\zaupita\GoogleCalendar\Controllers\GoogleCalendarController@listCalendars');
	Route::get('events', '\zaupita\GoogleCalendar\Controllers\GoogleCalendarController@listEvents');
	Route::put('events/{id}', '\zaupita\GoogleCalendar\Controllers\GoogleCalendarController@updateEvent');
	Route::post('events', '\zaupita\GoogleCalendar\Controllers\GoogleCalendarController@createEvent');
	Route::delete('events/{id}', '\zaupita\GoogleCalendar\Controllers\GoogleCalendarController@deleteEvent');

});

这些路由定义将在 'api/google/calendars' 和 'api/google/events' 处公开 API 功能,您可以通过前端 AJAX 调用来使用这些功能。

FullCalendar.io 集成

您可以将此包配置为以 FullCalendar.io 可以理解的数据格式输入和输出数据。要这样做,您可以修改 google_calendar.php 配置文件中的 'format' 属性,如下所示

return [
	//....
	
	'format' => 'fullcalendar',
	
	//....
];

然后,当您初始化 FullCalendar.io 时,您可以通过按照上面公开 API部分中的步骤进行,如下所示

$('#calendar').fullCalendar({

  eventSources: [

    // your event source
    {
      url: 'api/google/events',
      type: 'GET',
      data: {
		calendar: 'primary', // define your google calendar id here
      },
      error: function() {
		alert('there was an error while fetching events!');
      }
    }

    // any other sources...

  ]

});

最后

贡献

如果您想贡献,请随意创建一个分支并提交拉取请求。

错误报告

如果您发现有什么问题,请在 GitHub 上提出问题。