【问题标题】:Impossible to insert event in specific calendar using google-api-php-client无法使用 google-api-php-client 在特定日历中插入事件
【发布时间】:2015-01-05 09:58:06
【问题描述】:

我尝试在特定日历中插入带有 google-api-php-client 的事件。 如果我将日历 ID 设置为“主要”,则它正在工作,但我在主日历中看不到该事件。

我尝试指定一个日历 ID,例如 co-xxxxx.ch_lhr1ojekr990m475kv6nilueqs@group.calendar.google.com,我有以下错误:

致命错误:在 /var/www/clients/client1/web347/web/google-api-php/src/Google 中出现未捕获的异常“Google_Service_Exception”和消息“调用 POST https://www.googleapis.com/calendar/v3/calendars/xxxxx8egm4tng6rlj8usmavdu8%40google.com/events: (404) 未找到” /Http/REST.php:111 堆栈跟踪:#0 /var/www/clients/client1/web347/web/google-api-php/src/Google/Http/REST.php(63): Google_Http_REST::

这是我的代码。身份验证确实有效

    $cal_id = 'primary';  // IT WORKS, BUT I DON'T SEE THE EVENT IN MAIN CALENDAR
    $cal_id = 'xxxxx38egm4tng6rlj8usmavdu8@google.com'; // IT CAUSES THE ERROR

    //Set the Event data
    $event = new Google_Service_Calendar_Event();
    $event->setSummary($title);
    $event->setDescription($desc);

    $ev_date = '2015-01-05T08:00:00+01:00';

    $start = new Google_Service_Calendar_EventDateTime();
    $start->setTimeZone('Europe/London');
    $start->setDateTime('2015-01-01T19:15:00');
    $event->setStart($start);

    $end = new Google_Service_Calendar_EventDateTime();
    $end->setTimeZone('Europe/London');
    $end->setDateTime('2015-01-05T20:15:00');
    $event->setEnd($end);

    $createdEvent = $calendarService->events->insert( $cal_id, $event);
    $event = $calendarService->events->get($cal_id, $createdEvent->getId());
    //
    if ($event != null) {
        echo "Inserted:";
        echo "EventID=".$event->getId();
        echo "Summary=".$event->getSummary();
        echo "Status=".$event->getStatus();
     }

$createdEvent 使用“主”日历返回此代码

Google_Service_Calendar_Event Object
(
[collection_key:protected] => recurrence
[internal_gapi_mappings:protected] => Array
    (
    )

[anyoneCanAddSelf] => 
[attendeesType:protected] => Google_Service_Calendar_EventAttendee
[attendeesDataType:protected] => array
[attendeesOmitted] => 
[colorId] => 
[created] => 2015-01-05T11:21:03.000Z
[creatorType:protected] => Google_Service_Calendar_EventCreator
[creatorDataType:protected] => 
[description] => test
[endType:protected] => Google_Service_Calendar_EventDateTime
[endDataType:protected] => 
[endTimeUnspecified] => 
[etag] => "2840913726324000"
[extendedPropertiesType:protected] => Google_Service_Calendar_EventExtendedProperties
[extendedPropertiesDataType:protected] => 
[gadgetType:protected] => Google_Service_Calendar_EventGadget
[gadgetDataType:protected] => 
[guestsCanInviteOthers] => 
[guestsCanModify] => 
[guestsCanSeeOtherGuests] => 
[hangoutLink] => 
[htmlLink] => https://www.google.com/calendar/event?eid=M2p2ZXY1cmZpY2Y3dTk5MjQ0ZmNsYW9xNTggMTAwNjUzNTQ3ODk1My1laTI5a2M4cGQxZHE3cDUycGhtdmRlMWs3dXZkZjIzb0BkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbQ
[iCalUID] => 3jvev5rficf7u99244fclaoq58@google.com
[id] => 3jvev5rficf7u99244fclaoq58
[kind] => calendar#event
[location] => 
[locked] => 
[organizerType:protected] => Google_Service_Calendar_EventOrganizer
[organizerDataType:protected] => 
[originalStartTimeType:protected] => Google_Service_Calendar_EventDateTime
[originalStartTimeDataType:protected] => 
[privateCopy] => 
[recurrence] => 
[recurringEventId] => 
[remindersType:protected] => Google_Service_Calendar_EventReminders
[remindersDataType:protected] => 
[sequence] => 0
[sourceType:protected] => Google_Service_Calendar_EventSource
[sourceDataType:protected] => 
[startType:protected] => Google_Service_Calendar_EventDateTime
[startDataType:protected] => 
[status] => confirmed
[summary] => test
[transparency] => 
[updated] => 2015-01-05T11:21:03.162Z
[visibility] => 
[modelData:protected] => Array
    (
        [creator] => Array
            (
                [email] => 1006535478953-ei29kc8pd1dq7p52phmvde1k7uvdf23o@developer.gserviceaccount.com
                [self] => 1
            )

        [organizer] => Array
            (
                [email] => 1006535478953-ei29kc8pd1dq7p52phmvde1k7uvdf23o@developer.gserviceaccount.com
                [self] => 1
            )

        [start] => Array
            (
                [dateTime] => 2015-01-01T19:15:00Z
                [timeZone] => Europe/London
            )

        [end] => Array
            (
                [dateTime] => 2015-01-05T20:15:00Z
                [timeZone] => Europe/London
            )

        [reminders] => Array
            (
                [useDefault] => 1
            )

    )

[processed:protected] => Array
    (
    )

)

【问题讨论】:

  • 你从哪里得到这个 cal_id?您是否尝试过创建日历列表​​来获取日历列表并查看 ID 是什么?
  • $createdEvent 打印什么?
  • $createdEvent 打印这个:
  • iCalUID 是日历 ID。您从哪里获得日历 ID“co-xxxx.ch_lhr1ojekr990m475kv6nilueqs@group.calendar.google.com”??
  • “日历 ID”旁边的字符串

标签: php google-calendar-api google-api-php-client gcal


【解决方案1】:

首先您使用

获取日历列表
print_r($calendarList = $calendarService->calendarList->listCalendarList()); 

然后获取您的特定日历的ID,您可以设置

$createdEvent = $calendarService->events->insert('NEW_ID', $event);

【讨论】:

    【解决方案2】:
        <?php
        error_reporting(1);
        require_once 'src/Google_Client.php';
        require_once 'src/contrib/Google_CalendarService.php';
    
        $client = new Google_Client();
        // Get your credentials from the console
        $client->setClientId('XXXXXXXXXX');
        $client->setClientSecret('XXXXXXXXX');
        $client->setRedirectUri('XXXXXXXXXX');
    
        $client->setScopes(array('https://www.googleapis.com/auth/calendar')); //Calender Scope 
    
       $cal=new Google_CalendarService($client);
    
       $authUrl = $client->createAuthUrl();
    
       $authCode = trim(fgets(STDIN));
    
      if(!file_exists("token.json") || filesize("token.json")==0) 
      {
            // Save token for future use
    
            $accessToken = $client->authenticate($authCode);      
            $client->setAccessToken($accessToken);
            if ($client->getAccessToken()) {
                $token = $client->getAccessToken();
                $authObj = json_decode($token);
                $refreshToken = $authObj->refresh_token;
            }
            file_put_contents("token.json",$refreshToken);  
        }
        else 
        {
            $accessToken = file_get_contents("token.json");
            //echo "hi:";
            $client->refreshToken($accessToken);
            $client->getAccessToken();
        }
        //Create Calender Event
            $event = new Google_Event();
            $event->setSummary('Appointment');
            $event->setLocation('Rajkot');
            //$event->sendNotifications('TRUE');
            $start = new Google_EventDateTime();
            $start->setDateTime('2014-12-24T11:20:00.000+05:30');
            $event->setStart($start);
            $end = new Google_EventDateTime();
            $end->setDateTime('2014-12-24T11:30:00.000+05:30');
            $event->setEnd($end);
            $event->setHangoutLink(null);
    
                $reminderI = new Google_EventReminder();
                $reminderI->setMethod('popup');
                $reminderI->setMinutes('5');
    
                $reminderII = new Google_EventReminder();
                $reminderII->setMethod('email');
                $reminderII->setMinutes('10');
    
            $reminder = new Google_EventReminders();
            $reminder->setUseDefault('false');
            $reminder->setOverrides(array($reminderI,$reminderII));
            $event->setReminders($reminder);
    
            $createdEvent = $cal->events->insert('primary', $event);
    
            print_r($createdEvent);
        ?>
    

    【讨论】:

    • 谢谢,但您是否尝试在特定日历 ID(非主要)中插入事件?
    • 首先您使用print_r($calendarList = $cal-&gt;calendarList-&gt;listCalendarList());获取日历列表,然后获取您的特定日历的ID,您可以通过$createdEvent = $cal-&gt;events-&gt;insert('NEW_ID', $event);进行设置
    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多