zaupita / laravel-google-calendar
利用 Google Client API 的 Laravel Google Calendar API 包装器。
Requires
- php: >=7.0
- google/apiclient: ^2.2
- laravel/framework: ~6.20.27
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 上提出问题。