【问题标题】:Google Calendar API v3 PHP and JSON谷歌日历 API v3 PHP 和 JSON
【发布时间】:2017-04-25 03:26:45
【问题描述】:

拥有一个公开的 Google 日历,我想做的就是获取从“今天”到 n 个(或最多)个事件的事件。我一直在兜圈子试图弄清楚,它要么是贬值的信息,要么是解决方案似乎不起作用。一个好的解决方案是使用 PHP 生成具有 css goodness 和 javascript 数组的初始事件列表,以便在用户单击事件时更新详细信息 DIV。

使用 PHP 并将最新的 API 上传到服务器,拥有一个带有只读帐户、OAuth 2.0 客户端 ID 和 API 密钥的日历项目。完成了一些教程,但遇到了障碍,因为您需要通过命令行生成的“./credentials/calendar-api-quickstart.json”。我必须使用的服务器是共享服务器,因此没有命令行访问权限(原因很明显:))。使用了https://developers.google.com/google-apps/calendar/quickstart/php 信息。这似乎是我唯一缺少的部分?

也通过此页面上的信息Google Calendar API v3 hardcoded credentials 激活了密钥,但收到“invalid_grant”错误。我已经尝试了搜索中出现的所有内容,但似乎没有任何效果。是否有准确的最新教程(2016-2017)指导您将 Google 日历数据导入您的网站?从设置项目到 oauth2 和令牌生成。我一定是把事情搞砸了,因为似乎没有任何效果。

唯一的其他解决方案是让他们将日历导出为 .ics,但他们希望在更新 google 日历时进行实时更新。

因为我只是想阅读数据,所以我在Get JSON from a public Google Calendar 尝试了这个建议。但是我收到了 Forbidden Error 403 错误,所以它被贬低了?

仍然不明白他们为什么把它弄得这么复杂...我知道如果您想与您的网站或应用程序上的日历进行交互,但只是为了读取公共日历上的数据(其中警告您将其公开以供所有人查看)?

谢谢

【问题讨论】:

    标签: php json calendar


    【解决方案1】:

    终于找到了解决办法。在这里发帖,如果我有空闲时间,可能会在以后制作一个完整的教程:)。希望它可以帮助其他人。

    https://console.developers.google.com/iam-admin/projects 创建一个项目,它应该在创建后将您带到控制台...如果不是这里是控制台链接https://console.developers.google.com/

    在库部分启用“Google Calendar API”。搜索 Google Calendar API,选择它并使用顶部显示的启用按钮。

    转到凭据部分并添加服务帐户密钥。新的服务帐号(任意名称)。

    卷:

    项目>查看器

    App Engine > App Engine 查看器

    存储 > 存储对象查看器

    您可能不需要所有这些,但这似乎是对我有用的组合。确保选择 JSON,然后在创建时下载一个 .json 文件。它只下载一次,无法重新下载,因此请确保下载并保存在安全的地方。

    在此处https://developers.google.com/google-apps/calendar/downloads 下载最新的 PHP API 并将其上传到您网站上的任何位置。相当大,包含大量支持文件,因此可能需要一段时间才能上传。

    那么这是对我有用的 PHP 代码 :)

    CALENDARID 是您日历的 ID... 从您的谷歌日历中,使用弹出窗口并选择“日历设置”。然后在“日历地址:”部分的底部记下日历 ID。如果您通过 gSuite 工具设置,则应该是某种 google .com 电子邮件地址或您的电子邮件地址。

    "YOURJSON.json" 是您之前下载的 json 文件的名称。保持安全的建议是将其上传到您网站的根目录上方并从那里链接到它。由于它仅具有读取角色,因此不会引起任何问题,因此更加理智以防万一。

    require_once 行是您将 google API 上传到服务器的任何位置。不要忘记 /vendor/autoload.php 部分:)。

    这是对我有用的解决方案 (2017-04-24)。 PHP 代码的最后一行是一个通用的 echo 命令,因此您可以看到您获得的数组和所有可用的数据。我唯一没有看到的是事件的自定义颜色。有它的空间,但似乎没有过来。

    <?php
    $maxEvents = 100;
    $minStartDate = date('c');
    $calendarId = 'CALENDARID';
    
    //path to the google API on your server
    require_once 'inc/google-api-php-client-2.1.3_PHP54/vendor/autoload.php';
    //set environment variable to use your downloaded Service account key
    putenv("GOOGLE_APPLICATION_CREDENTIALS=YOURJSON.json");
    $scope = 'https://www.googleapis.com/auth/calendar.readonly';
    
    $client = new Google_Client();
    $client->useApplicationDefaultCredentials();
    $client->setScopes($scope);
    $service = new Google_Service_Calendar($client);
    
    //options link
    //  https://developers.google.com/google-apps/calendar/v3/reference/events/list
    $options = array(
        'maxResults' => $maxEvents,
        'orderBy' => 'startTime',
        'singleEvents' => TRUE,
        //UNIX timestamp format
        'timeMin' => $minStartDate,
        //to use a calendar other than the default uncomment and enter the calendar's ID
        //not really needed here since you're using the $calendarId but does pull another calendar and more for completeness
        //'iCalUID' => 'CAL_ID_FROM_GOOGLE_CALENDAR'
    );
    
    $results = $service->events->listEvents($calendarId, $options);
    //echo 'results<br><pre>';print_r($results); echo '</pre><br>';
    ?>
    

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多