Quickstarts نحوه راهاندازی و اجرای برنامهای را توضیح میدهد که Google Workspace API را فراخوانی میکند.
راهاندازیهای سریع Google Workspace از کتابخانههای سرویس گیرنده API برای رسیدگی به برخی از جزئیات جریان احراز هویت و مجوز استفاده میکنند. توصیه می کنیم از کتابخانه های سرویس گیرنده برای برنامه های خود استفاده کنید. این شروع سریع از یک رویکرد احراز هویت ساده استفاده می کند که برای یک محیط آزمایشی مناسب است. برای یک محیط تولید، توصیه میکنیم قبل از انتخاب اعتبارنامههای دسترسی مناسب برای برنامهتان، درباره احراز هویت و مجوز یاد بگیرید.
یک برنامه خط فرمان Go ایجاد کنید که درخواستهایی را به Google Drive Activity API ارسال میکند.
اهداف
- محیط خود را تنظیم کنید.
- نمونه را تنظیم کنید
- نمونه را اجرا کنید.
پیش نیازها
محیط خود را تنظیم کنید
برای تکمیل این شروع سریع، محیط خود را تنظیم کنید.
API را فعال کنید
قبل از استفاده از Google API، باید آنها را در پروژه Google Cloud روشن کنید. میتوانید یک یا چند API را در یک پروژه Google Cloud روشن کنید.
اگر از یک پروژه جدید Google Cloud برای تکمیل این شروع سریع استفاده میکنید، صفحه رضایت OAuth را پیکربندی کنید و خود را به عنوان کاربر آزمایشی اضافه کنید. اگر قبلاً این مرحله را برای پروژه Cloud خود انجام داده اید، به بخش بعدی بروید.
- در کنسول Google Cloud، به menu منو > APIs & Services > صفحه رضایت OAuth بروید.
به صفحه رضایت OAuth بروید
- برای نوع User Internal را انتخاب کنید، سپس روی Create کلیک کنید.
- فرم ثبت نام برنامه را تکمیل کنید، سپس روی ذخیره و ادامه کلیک کنید.
در حال حاضر، میتوانید از افزودن دامنهها صرفنظر کنید و روی ذخیره و ادامه کلیک کنید. در آینده، وقتی برنامهای را برای استفاده خارج از سازمان Google Workspace خود ایجاد میکنید، باید نوع کاربر را به خارجی تغییر دهید و سپس محدودههای مجوز مورد نیاز برنامه خود را اضافه کنید.
- خلاصه ثبت برنامه خود را مرور کنید. برای ایجاد تغییرات، روی ویرایش کلیک کنید. اگر ثبت برنامه خوب به نظر می رسد، روی بازگشت به داشبورد کلیک کنید.
مجوز اعتبار برای یک برنامه دسکتاپ
برای احراز هویت کاربران نهایی و دسترسی به داده های کاربر در برنامه خود، باید یک یا چند شناسه مشتری OAuth 2.0 ایجاد کنید. شناسه مشتری برای شناسایی یک برنامه واحد در سرورهای OAuth Google استفاده می شود. اگر برنامه شما روی چندین پلتفرم اجرا می شود، باید برای هر پلتفرم یک شناسه مشتری جداگانه ایجاد کنید.
- در کنسول Google Cloud، به menu منو > APIs & Services > Credentials بروید.
به Credentials بروید
- روی ایجاد اعتبارنامه > شناسه مشتری OAuth کلیک کنید.
- روی نوع برنامه > برنامه دسکتاپ کلیک کنید.
- در قسمت نام ، نامی را برای اعتبارنامه تایپ کنید. این نام فقط در کنسول Google Cloud نشان داده می شود.
- روی ایجاد کلیک کنید. صفحه ایجاد شده توسط سرویس گیرنده OAuth ظاهر می شود که شناسه مشتری و راز مشتری جدید شما را نشان می دهد.
- روی OK کلیک کنید. اعتبار جدید ایجاد شده در شناسه های مشتری OAuth 2.0 ظاهر می شود.
- فایل JSON دانلود شده را به عنوان
credentials.json
ذخیره کنید و فایل را به دایرکتوری کاری خود منتقل کنید.
فضای کار را آماده کنید
یک پوشه کاری ایجاد کنید:
mkdir quickstart
تغییر به دایرکتوری کاری:
cd quickstart
ماژول جدید را راه اندازی کنید:
go mod init quickstart
کتابخانه سرویس گیرنده Google Drive Activity API Go و بسته OAuth2.0 را دریافت کنید:
go get google.golang.org/api/driveactivity/v2
go get golang.org/x/oauth2/google
نمونه را تنظیم کنید
در پوشه کاری خود، یک فایل به نام quickstart.go
ایجاد کنید.
در فایل، کد زیر را قرار دهید:
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"reflect"
"strings"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/driveactivity/v2"
"google.golang.org/api/option"
)
// Retrieve a token, saves the token, then returns the generated client.
func getClient(config *oauth2.Config) *http.Client {
// The file token.json stores the user's access and refresh tokens, and is
// created automatically when the authorization flow completes for the first
// time.
tokFile := "token.json"
tok, err := tokenFromFile(tokFile)
if err != nil {
tok = getTokenFromWeb(config)
saveToken(tokFile, tok)
}
return config.Client(context.Background(), tok)
}
// Request a token from the web, then returns the retrieved token.
func getTokenFromWeb(config *oauth2.Config) *oauth2.Token {
authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline)
fmt.Printf("Go to the following link in your browser then type the "+
"authorization code: \n%v\n", authURL)
var authCode string
if _, err := fmt.Scan(&authCode); err != nil {
log.Fatalf("Unable to read authorization code: %v", err)
}
tok, err := config.Exchange(context.TODO(), authCode)
if err != nil {
log.Fatalf("Unable to retrieve token from web: %v", err)
}
return tok
}
// Retrieves a token from a local file.
func tokenFromFile(file string) (*oauth2.Token, error) {
f, err := os.Open(file)
if err != nil {
return nil, err
}
defer f.Close()
tok := &oauth2.Token{}
err = json.NewDecoder(f).Decode(tok)
return tok, err
}
// Saves a token to a file path.
func saveToken(path string, token *oauth2.Token) {
fmt.Printf("Saving credential file to: %s\n", path)
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Unable to cache oauth token: %v", err)
}
defer f.Close()
json.NewEncoder(f).Encode(token)
}
// Returns a string representation of the first elements in a list.
func truncated(array []string) string {
return truncatedTo(array, 2)
}
// Returns a string representation of the first elements in a list.
func truncatedTo(array []string, limit int) string {
var contents string
var more string
if len(array) <= limit {
contents = strings.Join(array, ", ")
more = ""
} else {
contents = strings.Join(array[0:limit], ", ")
more = ", ..."
}
return fmt.Sprintf("[%s%s]", contents, more)
}
// Returns the name of a set property in an object, or else "unknown".
func getOneOf(m interface{}) string {
v := reflect.ValueOf(m)
for i := 0; i < v.NumField(); i++ {
if !v.Field(i).IsNil() {
return v.Type().Field(i).Name
}
}
return "unknown"
}
// Returns a time associated with an activity.
func getTimeInfo(activity *driveactivity.DriveActivity) string {
if activity.Timestamp != "" {
return activity.Timestamp
}
if activity.TimeRange != nil {
return activity.TimeRange.EndTime
}
return "unknown"
}
// Returns the type of action.
func getActionInfo(action *driveactivity.ActionDetail) string {
return getOneOf(*action)
}
// Returns user information, or the type of user if not a known user.
func getUserInfo(user *driveactivity.User) string {
if user.KnownUser != nil {
if user.KnownUser.IsCurrentUser {
return "people/me"
}
return user.KnownUser.PersonName
}
return getOneOf(*user)
}
// Returns actor information, or the type of actor if not a user.
func getActorInfo(actor *driveactivity.Actor) string {
if actor.User != nil {
return getUserInfo(actor.User)
}
return getOneOf(*actor)
}
// Returns information for a list of actors.
func getActorsInfo(actors []*driveactivity.Actor) []string {
actorsInfo := make([]string, len(actors))
for i := range actors {
actorsInfo[i] = getActorInfo(actors[i])
}
return actorsInfo
}
// Returns the type of a target and an associated title.
func getTargetInfo(target *driveactivity.Target) string {
if target.DriveItem != nil {
return fmt.Sprintf("driveItem:\"%s\"", target.DriveItem.Title)
}
if target.Drive != nil {
return fmt.Sprintf("drive:\"%s\"", target.Drive.Title)
}
if target.FileComment != nil {
parent := target.FileComment.Parent
if parent != nil {
return fmt.Sprintf("fileComment:\"%s\"", parent.Title)
}
return "fileComment:unknown"
}
return getOneOf(*target)
}
// Returns information for a list of targets.
func getTargetsInfo(targets []*driveactivity.Target) []string {
targetsInfo := make([]string, len(targets))
for i := range targets {
targetsInfo[i] = getTargetInfo(targets[i])
}
return targetsInfo
}
func main() {
ctx := context.Background()
b, err := os.ReadFile("credentials.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v", err)
}
// If modifying these scopes, delete your previously saved token.json.
config, err := google.ConfigFromJSON(b, driveactivity.DriveActivityReadonlyScope)
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
client := getClient(config)
srv, err := driveactivity.NewService(ctx, option.WithHTTPClient(client))
if err != nil {
log.Fatalf("Unable to retrieve driveactivity Client %v", err)
}
q := driveactivity.QueryDriveActivityRequest{PageSize: 10}
r, err := srv.Activity.Query(&q).Do()
if err != nil {
log.Fatalf("Unable to retrieve list of activities. %v", err)
}
fmt.Println("Recent Activity:")
if len(r.Activities) > 0 {
for _, a := range r.Activities {
time := getTimeInfo(a)
action := getActionInfo(a.PrimaryActionDetail)
actors := getActorsInfo(a.Actors)
targets := getTargetsInfo(a.Targets)
fmt.Printf("%s: %s, %s, %s\n", time, truncated(actors), action, truncated(targets))
}
} else {
fmt.Print("No activity.")
}
}
نمونه را اجرا کنید
در پوشه کاری خود، نمونه را بسازید و اجرا کنید:
go run quickstart.go
- اولین باری که نمونه را اجرا میکنید، از شما میخواهد دسترسی را مجاز کنید:
- اگر قبلاً وارد حساب Google خود نشده اید، هنگامی که از شما خواسته شد وارد شوید. اگر به چندین حساب وارد شده اید، یک حساب را برای استفاده از مجوز انتخاب کنید.
- روی Accept کلیک کنید.
برنامه Go شما اجرا می شود و Google Drive Activity API را فرا می خواند.
اطلاعات مجوز در سیستم فایل ذخیره می شود، بنابراین دفعه بعد که کد نمونه را اجرا می کنید، از شما درخواست مجوز نمی شود.
مراحل بعدی