Google Calendar Events

▼魔方 西西 提交于 2019-12-25 03:33:02

问题


I am having some trouble adding events to Google Calendar. I can list events but when I try to add an event I am getting a 403 Forbidden Error. I am able to add events to primary, but when I try another one, in this case the one I've mnetion, I run into the 403 Forbidden Error. Here is the code I have:

require_once 'vendor/autoload.php';
define('APPLICATION_NAME', 'Calendar');
define('CREDENTIALS_PATH', 'credentials/calendar.json');
define('SECRET_PATH', 'secret.json');
define('SCOPES', implode(' ', array(Google_Service_Calendar::CALENDAR)));

function getClient() {
    $client = new Google_Client();
    $client->setApplicationName(APPLICATION_NAME);
    $client->setScopes(SCOPES);
    $client->setAuthConfigFile(SECRET_PATH);
    $client->setAccessType('offline');

    $credentials_path = CREDENTIALS_PATH;

    if (file_exists($credentials_path)) {
        $access_token = file_get_contents($credentials_path);
    } else {
        // $auth_url = $client->createAuthUrl();
        // printf("Open the following link in your browser:\n%s\n", $auth_url);

        // print 'Enter verification code: ';

        // $auth_code = trim(fgets(STDIN));

        // $access_token = $client->authenticate($auth_code);

        // if (!file_exists(dirname($credentials_path))) {
            // mkdir(dirname($credentials_path), 0700, true);
        // }

        // file_put_contents($credentials_path, $access_token);
        // printf("Credentials saved to %s\n", $credentials_path);
}

   $client->setAccessToken($access_token);

   if ($client->isAccessTokenExpired()) {
       $client->refreshToken($client->getRefreshToken());
       file_put_contents($credentials_path, $client->getAccessToken());
   }

   return $client; 

 }



   $client = getClient();

   $service = new Google_Service_Calendar($client);


   $event = new Google_Service_Calendar_Event();
   $event->setSummary('Appointment');
   $event->setLocation('Somewhere');
   $start = new Google_Service_Calendar_EventDateTime();
   $start->setDateTime('2015-04-14T10:00:00.000-07:00');
   $event->setStart($start);
   $end = new Google_Service_Calendar_EventDateTime();
   $end->setDateTime('2015-04-15T10:25:00.000-07:00');
   $event->setEnd($end);
   $attendee1 = new Google_Service_Calendar_EventAttendee();
   $attendee1->setEmail('leah@leahdawn.com');

   $attendees = array($attendee1);
   $event->attendees = $attendees;
   $createdEvent = $service->events->insert('leah@leahdawn.com', $event);

   echo $createdEvent->getId();

Specifically, the error is 'Error calling POST https://www.googleapis.com/calendar/v3/calendars/leah%40leahdawn.com/events: (403) Forbidden.

Any help would be appreciated!


回答1:


The first parameter of Events: insert is a calendar id, while 'leah@leahdawn.com' could be a valid calendar id. You may even be able to see this calendar if the owner has shared it with you. This doesn't mean that the owner of said calendar has given you permission to add events to there calendar.

I suggest you run a CalendarList: get

 $calendarListEntry = $service->calendarList->get('calendarId');
 echo $calendarListEntry->getSummary();

This will give you back the information about this calendar if you have access.

  {

 "kind": "calendar#calendarListEntry",
 "etag": "\"1412244000929000\"",
 "id": "xxxxx@gmail.com",
 "summary": "xxxxx@gmail.com",
 "timeZone": "Europe/Copenhagen",
 "colorId": "15",
 "backgroundColor": "#9fc6e7",
 "foregroundColor": "#000000",
 "selected": true,
 "accessRole": "reader",
 "defaultReminders": [
 ]
}

The thing to look for here is "accessRole": "reader", if you don't have access to do more then read the calendar you wont be allowed to add events.

Update: CalendarList : List

try going to the Calendar list page at the bottom run try me. It will also show you what calendars you have access to.



来源:https://stackoverflow.com/questions/29638328/google-calendar-events

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!