deshack/laravel-google-calendar

此包已被弃用且不再维护。没有建议的替代包。

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

dev-master 2019-08-09 14:13 UTC

This package is auto-updated.

Last update: 2023-08-09 23:49:08 UTC


README

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

安装

此包可在Laravel 5.4或更高版本中使用。

您可以通过composer安装此包

composer require hackeresq/laravel-google-calendar

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

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

// ...

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

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

php artisan vendor:publish --provider="hackerESQ\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 Client API认证URL。

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

isAuthed()

检查当前登录用户是否已通过Google Client 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', '\hackerESQ\GoogleCalendar\Controllers\GoogleCalendarController@listCalendars');
	Route::get('events', '\hackerESQ\GoogleCalendar\Controllers\GoogleCalendarController@listEvents');
	Route::put('events/{id}', '\hackerESQ\GoogleCalendar\Controllers\GoogleCalendarController@updateEvent');
	Route::post('events', '\hackerESQ\GoogleCalendar\Controllers\GoogleCalendarController@createEvent');
	Route::delete('events/{id}', '\hackerESQ\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部分的说明来使用以下方式消耗暴露的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上提出问题。