【问题标题】:Unable to delete events in Google Calendar using php api无法使用 php api 删除 Google 日历中的事件
【发布时间】:2014-02-19 18:20:43
【问题描述】:

我正在开发 Google 日历的 PHP API,我之前使用过 Zend 库,我正在升级到 API V3,我下载了 Git Hub 客户端库 v1.0。 我已完成 oAuth 2,并将刷新令牌存储在数据库中。我可以将事件连接到 Google 日历并将其写入,这主要归功于 StackOverflow 的贡献者。谢谢

我的问题是我无法删除事件。我正在连接 oAuth 2 并检索事件 ID

    $service->events->delete('primary', $event->getId());

这会生成致命错误:在 C:\wamp\www\new-roster-decoder\src\Google\IO\Stream.php 中带有消息“HTTP 错误:无法连接:'0'”的未捕获异常“Google_IO_Exception”在第 128 行

我到处寻找,但无法找到解决方案。请帮忙谢谢

已解决 由于艾米丽的好建议,这已经解决了 由于GZIP的问题已经解决,解决方案从GitHub下载了最新的API。 出于兴趣,我最初在 congig.php 中注释掉了 GZIP 并修复了它,但随后我失去了性能优势,然后新库对其进行了排序。 得到教训。 Stackoverflow 的用户非常乐于奉献自己的时间,并且总是尝试最新的软件 编辑结束

   <?php
    /// This works

    session_start();

    set_include_path("src/" . PATH_SEPARATOR . get_include_path());
    require_once 'Google/Client.php';
    require_once 'Google/Service/Calendar.php';
    require_once 'account/dbc.php';



    $client_id = 'XXXXXXXXXX.apps.googleusercontent.com';
    $client_secret = 'XXXXXXXXXXX';
    $redirect_uri = 'http://localhost:80/new-roster-decoder/account/GoogleoAuth.php';


    $client = new Google_Client();
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setRedirectUri($redirect_uri);
    $client->addScope("https://www.googleapis.com/auth/calendar");
    $client->setAccessType('offline');


    $users_rs_settings = mysqli_query($link,"select * from users WHERE id = 118");
    $users_array = mysqli_fetch_array($users_rs_settings);

    $refresh_token = $users_array['refresh_token'];  //2010-04-06
    $client->refreshToken($refresh_token);

    $service = new Google_Service_Calendar($client);

    $event = new Google_Service_Calendar_Event();  
    $event->setSummary('Positioning TX');
    $event->setLocation('BRS-LGW');

    $start = new Google_Service_Calendar_EventDateTime();
    $start->setDateTime('2014-02-19T14:00:00.000-00:00');
    $start->setTimeZone('Europe/London');
    $event->setStart($start);
    $end = new Google_Service_Calendar_EventDateTime();
    $end->setDateTime('2014-02-19T17:25:00.000-00:00');
    $end->setTimeZone('Europe/London');
    $event->setEnd($end);
     // insert ext properties
    $rdname = "RosterDecoderID";
    $rdvalue = 1;

    $extendedProperties = New Google_Service_Calendar_EventExtendedProperties();
    $extendedProperties->setPrivate(array($rdname=>$rdvalue));
    $event->setExtendedProperties($extendedProperties); 

    // end of insert ext properties

    $createdEvent = $service->events->insert('primary', $event);   
    echo $createdEvent->getId()."\n\n"; 

    $_SESSION['access_token'] = $client->getAccessToken();
    var_dump($_SESSION['access_token']);
    var_dump($event);

    $minCheck = date(DATE_ATOM, mktime(0, 0, 0, date("m"), date("d"), date("Y") ));
    $maxCheck = date(DATE_ATOM, mktime(0, 0, 0, date("m"), (date("d")+1), date("Y") ));

    $optParams = array( 'privateExtendedProperty' => 'RosterDecoderID=1','timeMin' => $minCheck, 'timeMax' => $maxCheck);
    $events = $service->events->listEvents('primary', $optParams);





   while(true) {
       foreach ($events->getItems() as $event) {
        $eventID = $event->getId();

    //////////////////////////////////////////////////////////
    //This bit throws an error
        $service->events->delete('primary', $event->getId());
    /////////////////////////////////////////////////////////
    // The error is
    // Fatal error: Uncaught exception 'Google_IO_Exception' with message 'HTTP Error: Unable to connect: '0'' in C:\wamp\www\new-roster-decoder\src\Google\IO\Stream.php on line 128


         echo $event->getSummary();
         echo $event->getId()."\n\n"; 
      } 
    }

    ?>

【问题讨论】:

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


【解决方案1】:

我可以从谷歌日历中删除活动..

使用从开发者控制台获取的私钥文件。

更多信息请查看此链接

What is the Google API password for the OAuth PKCS p12 private key?

how-where-to-obtain-a-p12-key-file-from-the-google-developers-console

下面是代码,请检查

const KEY_FILE = '<<some location on server>>/xxx-65454f656a-xxx-560265d-privatekey.p12';
// this is my private key file location, make sure it accessible 


try {
            $key = file_get_contents(KEY_FILE);     
            $auth = new \Google_Auth_AssertionCredentials(
                    SERVICE_ACCOUNT_NAME,
                    array('https://www.googleapis.com/auth/calendar'),
                    $key);
            $auth->sub = $calendarId;
            $client = new \Google_Client();
            $client->setAssertionCredentials($auth);
            $client->setApplicationName("Parabola V2");
            $client->setClientId(CLIENT_ID);
            $service = new \Google_Service_Calendar($client);
            $service->events->delete($calendarId, $eventId);            
        } catch (\Exception $e) {
            echo "Exception while deleting event :- ".$e->getMessage();
            return null;
        }

【讨论】:

    【解决方案2】:
    $service->events->delete('primary', $event->getId());
    

    'primary' 必须是日历 ID

    “myname@gmail.com”或“mhggf54gfh5@group.calendar.google.com”

    这对我来说是这样的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 2015-03-30
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多