使用 Google developers 存取 G Suite for Education

2018/03/21 14:48 Chieh-cheng Tsao API C#

前置作業

1. 先申請、啟用 G Suite  並設定好DNS相對應的參數。

2.  能以管理者身份進入https://admin.google.com/  來管理。

 

至 Google APIs 進行註冊(表明要以程式來進行存取控制),並且取得憑證

1. 連線到 https://console.developers.google.com/flows/enableapi?apiid=admin  進行註冊
   p.s. 登入具有 G Suite管理權限的帳號

2. 建立api 專案 (如果有專案 就選已有的專案) 啟用 API (Admin SDK)

3. 請先點選"取消"

4.OAuth 同意畫面 設定

5.建立憑證

6. 下載JSON (擋名可能是 client_secret_123123123123-561dsd54qd65qw4e56qw454d.apps.googleusercontent.com.json,  建議改檔名成 client_secret.json)

7. 將該 json檔放入程式可以讀取的位置

 

撰寫相對應的 Visual Studio C# .net 程式

1. 在專案中 使用 NuGet 載入  「Google.Apis.Admin.Directory.directory_v1」官方套件

2. 插入程式碼

(以下其中 clientSecretPath  就是上面取得 client_secret.json 的檔案位置)

 using Google.Apis.Auth.OAuth2;
 using Google.Apis.Admin.Directory.directory_v1;
 using Google.Apis.Admin.Directory.directory_v1.Data;
 using Google.Apis.Services;
 using Google.Apis.Util.Store;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 namespace Googleapi
 {
     class Program
     {
         // If modifying these scopes, delete your previously saved credentials
         static string[] Scopes = { DirectoryService.Scope.AdminDirectoryUserReadonly };
         static string ApplicationName = "Directory API .NET Quickstart";
         static void Main(string[] args)
         {
             UserCredential credential;
             string clientSecretPath= "C://apitest//client_secret.json";
             string userEmail= "xxxx@3study.com";
             //  開啟從 Google OAuth 得到的ID跟私鑰
             using (var stream =  new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))  
             {
                 //官方建議位置 因為執行完 會產生一個檔案 存到該位置
                 //抓取使用者目錄 C:\Users\your_username\Documents\
                 //string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
                 //credPath = Path.Combine(credPath, ".credentials/admin-directory_v1-dotnet-quickstart.json"); 合併路徑名稱
                 string credPath = Path.GetDirectoryName(clientSecretPath);  // 取得該檔案的目錄
                 credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                                         GoogleClientSecrets.Load(stream).Secrets,   
                                         Scopes,   
                                         userEmail,
                                         CancellationToken.None,   
                                         new FileDataStore(credPath, true)
                                     ).Result;      // 會將 access_token 相關資訊寫到此檔案中
                 Console.WriteLine("Credential file saved to: " + credPath);   
             }

            // 通過憑證驗證後,以 Directory Service 來存取使用者相關資訊
             // Create Directory API service.
             var service = new DirectoryService(new BaseClientService.Initializer()
             {
                 HttpClientInitializer = credential,
                 ApplicationName = ApplicationName,
             });
             //  定義要抓取的內容
             // Define parameters of request.
             UsersResource.ListRequest request = service.Users.List();
             request.Customer = "my_customer";
             request.MaxResults = 20;                  // 抓取筆數
             request.OrderBy = UsersResource.ListRequest.OrderByEnum.Email;     // 以 email 作為排序
             // List users.
             IList<User> users = request.Execute().UsersValue;     // 執行抓取 google 上的使用者資訊
             Console.WriteLine("Users:");
             if (users != null && users.Count > 0)    // 判斷是否為空值、NULL
             {
                 foreach (var userItem in users)      // 印出 email 及 FullName
                 {
                     Console.WriteLine("{0} ({1})", userItem.PrimaryEmail,
                         userItem.Name.FullName);
                 }
             }
             else   //  空值時顯示錯誤訊息
             {
                 Console.WriteLine("No users found.");
             }
             Console.Read();             //  等待任一鍵結束程式
 
         }    // EOF Main
     }        // EOF Class Program
 }            // EOF Namespace
 

 
 

3. 第一次執行程式  以下視窗

4.如果順利的話  畫面上將會出現結果

5. 最後 就會發現 在指定的目錄上 建立了 取得到的 Credential file

 

參考:

發表評論

此篇評論

暫無討論