2017-04-05 181 views
0

有一個公開的Google日曆,我只想從「今天」到n(或最大)事件獲取事件。我一直在試圖弄清楚它的圈子裏跑來跑去,這是要麼消極的信息,或者soutions似乎不起作用。一個很好的解決方案是使用PHP來生成具有css善良和javascript數組的事件的初始列表,以便在用戶點擊事件時更新細節DIV。Google Calendar API v3 PHP和JSON

使用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日曆時進行實時更新。

因爲我只是想讀取數據,我嘗試了這裏的建議。但是,我得到了Forbidden Error 403錯誤,所以它被否定了?

仍然不明白爲什麼他們使得它變得複雜......我明白要經歷所有oauth的東西,如果你想與你的網站或應用程序上的日曆交互,但只是閱讀公共日曆上的數據它警告你公開所有人都可以看到它)?

謝謝

回答

1

終於找到了解決辦法。在這裏發帖,如果我得到任何空閒時間,可能會在以後完成一個完整的教程:)。希望它可以幫助別人。

https://console.developers.google.com/iam-admin/projects 創建這應該帶你到控制檯創建後一個項目......如果不是在這裏是在圖書館部分啓用「谷歌日曆API」控制檯鏈接https://console.developers.google.com/

。搜索Google Calendar API,選擇它並使用頂部顯示的啓用按鈕。

轉到憑據部分並添加服務帳戶密鑰。新的服務帳戶(任何你想要的名字)。

羅爾斯:

項目>瀏覽器

的App Engine> App Engine的瀏覽器

存儲>對象查看器

你可能並不需要所有這些,但似乎是combonation是爲我工作。確保選擇了JSON,然後創建它將下載一個.json文件。它只下載一次,無法重新下載,因此請確保您下載並將其保存在安全的地方。

在此處下載PHP的最新API https://developers.google.com/google-apps/calendar/downloads並將其上傳到您網站的任何位置。相當大的支持文件可能需要一段時間才能上傳。

那麼這是PHP代碼爲我工作:)

CALENDARID是你的日曆... 從您的谷歌日曆的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>'; 
?>