創建服務帳戶及其憑據
您需要創建一個服務帳戶和憑據。在此過程中,您需要收集三個項目,這些項目稍後將用於Google Apps域名範圍的權限授權,並在您的代碼中使用您的服務帳戶進行授權。這三個項目是您的服務帳戶:
•客戶端ID。
•私人密鑰文件。
•電子郵件地址。
爲了做到這一點,您首先需要一個運行Google APIs Console項目並啓用Google Calendar API。請執行以下步驟:
- 轉到Google API控制檯。
- 打開您的現有項目或創建一個新項目。
- 轉到服務部分。
- 啓用日曆API(以及可能需要訪問的其他API)。
您現在可以創建服務帳戶及其憑據。請按照下列步驟:
轉至API訪問部分。
通過點擊創建一個OAuth 2.0客戶端ID創建客戶端ID ...
輸入產品名稱,指定一個可選的標誌,然後單擊下一步。
詢問您的應用程序類型時選擇服務帳戶,然後單擊創建客戶端ID。
在這一點上,你會看到一個對話框,允許你下載私鑰文件提交(見下圖)。請務必安全地下載並保存該文件,因爲無法從API控制檯再次下載。
下載文件並關閉對話框後,您將能夠獲取服務帳戶的電子郵件地址和客戶端ID。
您現在應該收集您的服務帳戶的私鑰文件,客戶端ID和電子郵件地址。您已準備好將域範圍的權限委託給您的服務帳戶。
代表域範圍內的權力,您的服務帳戶
,你現在需要創建的服務帳戶被授予訪問您要訪問的谷歌Apps域的用戶數據。以下任務必須由谷歌Apps域的管理員來執行:
轉到您的谷歌Apps域的控制面板。該URL應如下所示:www.google.com/a/cpanel/mydomain.com
轉至高級工具...>管理第三方OAuth客戶端訪問。
在客戶端名稱字段中輸入服務帳戶的客戶端ID。
在一個或多個API範圍字段中,輸入您的應用程序應被授予訪問權限的範圍列表(請參見下圖)。例如,如果您需要在全域範圍內訪問Google Calendar API,請輸入:www.googleapis.com/auth/calendar.readonly
單擊授權按鈕。
您的服務帳戶現在有域範圍內的訪問谷歌日曆API爲您的域的所有用戶,並有可能你在上面的例子中列出的其他API。
下面是使用服務帳戶來訪問PHP日曆數據的描述
的服務帳戶訪問用戶日曆的一般過程是如下:
•創建的谷歌客戶端
•設置客戶端應用程序名稱
•如果您已經有Access令牌,請檢查它是否已過期
•如果訪問令牌到期,則設置JWT斷言憑證,並得到一個新的令牌
•設置客戶端ID
•創建基於谷歌客戶端上的一個新的日曆服務對象
•檢索日曆事件
注意:您必須保存Access令牌並僅在即將到期時刷新它,否則您將收到一個錯誤,指出您已超出一段時間內訪問令牌的數量限制爲用戶。的谷歌PHP客戶端庫函數
說明使用:
客戶端對象可以訪問很多參數和方法都通過客戶端對象進行訪問以下內容:
創建一個新的客戶端對象:
$client = new Google_Client();
設置客戶端應用程序名稱:
$client->setApplicationName(「My Calendar App」);
設置客戶端訪問令牌,如果你已經有一個保存:
$client->setAccessToken($myAccessToken);
檢查,看是否訪問令牌已過期,有30秒的緩衝,所以如果令牌被設置爲過期,這將返回true在30秒以內。 Access令牌的有效期爲一個小時。 Access令牌實際上是一個JSON對象,它包含創建時間,它的壽命以秒爲單位,以及令牌本身。因此,Google不會向Google撥打電話,因爲該令牌具有本地所有信息以確定其何時到期。
$client->isAccessTokenExpired();
如果令牌已過期或你從來沒有檢索到的令牌,那麼你將需要設置斷言憑據才能獲得訪問令牌:
$客戶 - > setAssertionCredentials(新Google_AssertionCredentials(SERVICE_ACCOUNT_NAME ,數組(CALENDAR_SCOPE),$ key,'notasecret','http://oauth.net/grant_type/jwt/1.0/bearer',$ email_add));
Where:
SERVICE_ACCOUNT_NAME是之前設置的服務帳戶電子郵件地址。
For example:’[email protected]’
CALENDAR_SCOPE是Google管理界面中的範圍設置。
For example: ‘https://www.googleapis.com/auth/calendar.readonly’
$ key是在Google應用程序控制臺中創建項目時下載的密鑰文件的內容。 $ email_add是要檢索日曆數據的用戶的Google電子郵件地址。
設置客戶端ID: $ client-setClientId(SERVICE_CLIENT_ID); 其中: SERVICE_CLIENT_ID是之前設置的服務帳戶客戶端ID。 例如:'abcd123456780.apps.googleusercontent.com'
創建新的日曆服務對象: $ cal = new Google_CalendarService($ client);
可以爲日曆檢索設置幾個選項我在下面的代碼中設置了一些選項,它們在api文檔中定義。 $ optEvents = array('timeMax'=> $ TimeMax,'timeMin'=> $ TimeMin,'orderBy'=>'startTime','singleEvents'=>'True');
獲取日曆事件的列表,並通過上述選項的號召:通過返回的事件列表
$calEvents = $cal->events->listEvents('primary', $optEvents);
循環,列表分頁,所以我們需要獲取頁面直到列表耗盡:
foreach ($calEvents->getItems() as $event) {
// get event data
$Summary = $event->getSummary();
$description = $event->getDescription();
$pageToken = $calEvents->getNextPageToken();
if ($pageToken) { // if we got a token the fetch the next page of events.
$optParams = array('pageToken' => $pageToken);
$calEvents = $cal->events->listEvents('primary', $optParams);
} else {
break;
}
}
獲得訪問令牌:
$ myAccessToken = $ client-> getAccessToken();
將訪問令牌下次保存到永久存儲區。
你設法解決它?我在這裏拉我的頭髮做類似的事情,但與谷歌驅動器! – wachichornia 2013-12-05 22:39:53
不幸的是我沒有。我努力在他們的文檔中堅持Google的建議/規則,但最終將配置成Web服務器應用程序。作爲服務帳戶太痛苦了。它已經跑了至少8個月,我沒有問題。 – djibouti33 2013-12-06 00:16:19
我解決了它,我的答案在這裏: http://stackoverflow.com/questions/27609138/how-to-insert-video-youtube-api-v3-through-service-account-with-ruby/27620954#27620954 享受! – dangalg 2014-12-23 13:13:45