Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google日历API v3 PHP和JSON_Php_Json_Calendar - Fatal编程技术网

Google日历API v3 PHP和JSON

Google日历API v3 PHP和JSON,php,json,calendar,Php,Json,Calendar,有一个公共的谷歌日历,我想做的就是从“今天”到n(或最多)个事件获取事件。我一直在兜圈子,想弄明白,要么是被贬损的信息,要么是那些声音似乎不起作用。一个好的解决方案是使用PHP生成带有css和javascript数组的初始事件列表,这样当用户单击事件时,我就可以更新details DIV 使用PHP并将最新的API上传到服务器,创建一个带有只读帐户、OAuth 2.0客户端ID和API密钥的日历项目。虽然有一些教程,但遇到了一个问题,因为您需要通过命令行生成的“./credentials/cal

有一个公共的谷歌日历,我想做的就是从“今天”到n(或最多)个事件获取事件。我一直在兜圈子,想弄明白,要么是被贬损的信息,要么是那些声音似乎不起作用。一个好的解决方案是使用PHP生成带有css和javascript数组的初始事件列表,这样当用户单击事件时,我就可以更新details DIV

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

通过此页面上的信息也激活了密钥,但出现“无效授权”错误。我尝试了搜索过程中出现的一切,但似乎没有任何效果。是否有准确的最新教程(2016-2017)指导您将谷歌日历数据导入您的网站?从设置项目到oauth2和令牌生成。我一定是把事情搞砸了,因为似乎什么都不管用

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

因为我只是想看看数据,我在这里尝试了这个建议。但是我得到了禁止的错误403错误,所以它被否决了

仍然不明白他们为什么把它弄得这么复杂……如果你想在你的网站或应用程序上与日历进行交互,而只是为了读取公共日历上的数据(这会警告你公开,每个人都可以看到它),我理解所有的oauth内容


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

创建一个项目,该项目在创建后应将您带到控制台…如果没有,这里是控制台链接

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

转到凭据部分并添加服务帐户密钥。新服务帐户(您想要的任何名称)

卷:

项目>查看器

应用引擎>应用引擎查看器

存储>存储对象查看器

你可能不需要所有这些,但这似乎是为我工作的国家。确保选择了JSON,然后在创建时它将下载一个.JSON文件。它只下载一次,无法重新下载,所以请确保下载并保存在安全的地方

在这里下载最新的PHP API,并将其上传到网站上的任何位置。相当大,有很多支持文件,所以上传可能需要一些时间

这就是为我工作的PHP代码:)

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

“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>';
?>