繁体   English   中英

Google Calendar API v3 PHP和JSON

[英]Google Calendar API v3 PHP and JSON

有一个公开的Google日历,我要做的就是将事件从“今天”获取到最多n(或最多)个事件。 我一直在兜圈子,试图找出答案,这要么是已弃用的信息,要么是似乎无法使用。 一个好的解决方案是使用PHP生成具有CSS优势和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硬编码的凭据,但出现“ invalid_grant”错误。 我已经尝试了搜索中出现的所有内容,但似乎没有任何效果。 是否有准确的最新教程(2016-2017年)指导您完成如何将Google日历数据导入您的网站? 从设置项目到oauth2和令牌生成。 我必须弄乱一些东西,因为似乎什么也没用。

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

因为我只是想读取数据,所以我在这里尝试了建议从公共Google日历获取JSON 但是我收到了禁止错误403错误,因此已弃用?

仍然不明白为什么他们要使它变得如此复杂...如果您想与网站或应用程序上的日历进行交互,而只是阅读公共日历上的数据(这会警告您,每个人都可以看到的公开)?

谢谢

终于找到了解决方案。 在这里发布,如果我有空的话,以后可能会做一个完整的教程:)。 希望它可以帮助其他人。

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 ...从您的Google日历中,使用弹出菜单并选择“日历设置”。 然后,在“日历地址:”部分的底部,记下日历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>';
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM