ดูการเริ่มต้นอย่างรวดเร็ว

สร้างแอปพลิเคชันบรรทัดคำสั่ง Go ที่ส่งคำขอไปยัง Google ปฏิทิน API

คู่มือเริ่มต้นใช้งานอธิบายวิธีตั้งค่าและเรียกใช้แอปที่เรียกใช้ Google Workspace API คู่มือเริ่มต้นใช้งานนี้ใช้วิธีการตรวจสอบสิทธิ์แบบง่ายซึ่งเหมาะกับสภาพแวดล้อมการทดสอบ สำหรับสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ เราขอแนะนำให้คุณศึกษาเกี่ยวกับ การตรวจสอบสิทธิ์และการให้สิทธิ์ ก่อน เลือกข้อมูลเข้าสู่ระบบ ที่เหมาะสมกับแอป

คู่มือเริ่มต้นใช้งานนี้ใช้ไลบรารีของไคลเอ็นต์ API ที่ Google Workspace แนะนำเพื่อจัดการรายละเอียดบางอย่างของขั้นตอนการตรวจสอบสิทธิ์และการให้สิทธิ์

วัตถุประสงค์

  • ตั้งค่าสภาพแวดล้อม
  • ตั้งค่าตัวอย่าง
  • เรียกใช้ตัวอย่าง

ข้อกำหนดเบื้องต้น

  • บัญชี Google ที่เปิดใช้ Google ปฏิทิน

ตั้งค่าสภาพแวดล้อม

ตั้งค่าสภาพแวดล้อมให้พร้อมเพื่อทำตามคู่มือเริ่มต้นใช้งานนี้

เปิดใช้ API

ก่อนใช้ Google API คุณต้องเปิด API เหล่านั้นในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google คุณสามารถเปิด API อย่างน้อย 1 รายการในโปรเจ็กต์ Google Cloud เดียวได้
  • ในคอนโซล Google Cloud ให้เปิดใช้ Google ปฏิทิน API

    เปิดใช้ API

หากใช้โปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google Cloud ใหม่เพื่อทำตามคู่มือเริ่มใช้งานฉบับย่อนี้ ให้กำหนดค่าหน้าจอขอความยินยอม OAuth หากทำขั้นตอนนี้สำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ให้ข้ามไปยังส่วนถัดไป

  1. ในคอนโซล Google API ให้ไปที่เมนู > แพลตฟอร์มการตรวจสอบสิทธิ์ของ Google > การสร้างแบรนด์

    ไปที่การสร้างแบรนด์

  2. หากกำหนดค่าแพลตฟอร์มการตรวจสอบสิทธิ์ของ Google ไว้แล้ว คุณสามารถกำหนดค่าการตั้งค่าหน้าจอขอคำยินยอม OAuth ต่อไปนี้ใน การสร้างแบรนด์, กลุ่มเป้าหมาย และ การเข้าถึงข้อมูล หากเห็นข้อความที่ระบุว่า Google Auth platform not configured yet ให้คลิก Get Started
    1. ในส่วนข้อมูลแอป ในชื่อแอป ให้ป้อนชื่อแอป
    2. ในส่วนอีเมลสนับสนุนสำหรับผู้ใช้ ให้เลือกอีเมลสนับสนุนที่ผู้ใช้จะติดต่อคุณได้หากมีคำถามเกี่ยวกับความยินยอม
    3. คลิกถัดไป
    4. ในส่วนกลุ่มเป้าหมาย ให้เลือกภายใน
    5. คลิกถัดไป
    6. ในส่วนข้อมูลติดต่อ ให้ป้อนอีเมล ที่คุณจะได้รับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงในโปรเจ็กต์
    7. คลิกถัดไป
    8. ในส่วนเสร็จสิ้น ให้อ่านนโยบายข้อมูลผู้ใช้สำหรับบริการ Google API และหากยอมรับ ให้เลือกฉันยอมรับบริการ Google API: นโยบายข้อมูลผู้ใช้
    9. คลิกต่อไป
    10. คลิกสร้าง
  3. ตอนนี้คุณสามารถข้ามการเพิ่มขอบเขตได้ ในอนาคต เมื่อสร้างแอปเพื่อใช้ภายนอกองค์กร Google Workspace คุณต้องเปลี่ยนประเภทผู้ใช้ เป็นภายนอก จากนั้น เพิ่มขอบเขตการให้สิทธิ์ที่แอปต้องใช้ ดูข้อมูลเพิ่มเติมได้ที่คู่มือฉบับเต็มเกี่ยวกับ การกำหนดค่าหน้าจอขอคำยินยอม OAuth

ให้สิทธิ์ข้อมูลเข้าสู่ระบบสำหรับแอปพลิเคชันบนเดสก์ท็อป

หากต้องการตรวจสอบสิทธิ์ผู้ใช้ปลายทางและเข้าถึงข้อมูลผู้ใช้ในแอป คุณต้องสร้างรหัสไคลเอ็นต์ OAuth 2.0 อย่างน้อย 1 รายการ รหัสไคลเอ็นต์ใช้เพื่อระบุแอปเดี่ยวไปยังเซิร์ฟเวอร์ OAuth ของ Google หากแอปทำงานบนหลายแพลตฟอร์ม คุณต้องสร้างรหัสไคลเอ็นต์แยกต่างหากสำหรับแต่ละแพลตฟอร์ม
  1. ในคอนโซล Google Cloud ให้ไปที่เมนู > แพลตฟอร์มการตรวจสอบสิทธิ์ของ Google > ไคลเอ็นต์

    ไปที่ไคลเอ็นต์

  2. คลิกสร้างไคลเอ็นต์
  3. คลิกประเภทแอปพลิเคชัน > แอปบนเดสก์ท็อป
  4. ในช่องชื่อ ให้พิมพ์ชื่อของข้อมูลเข้าสู่ระบบ ชื่อนี้จะแสดงในคอนโซล Google Cloud เท่านั้น
  5. คลิกสร้าง

    ข้อมูลเข้าสู่ระบบที่สร้างขึ้นใหม่จะปรากฏในส่วน "รหัสไคลเอ็นต์ OAuth 2.0"

  6. บันทึกไฟล์ JSON ที่ดาวน์โหลดเป็น credentials.json แล้วย้ายไฟล์ไปยังไดเรกทอรีที่ใช้งานอยู่

เตรียมพื้นที่ทำงาน

  1. สร้างไดเรกทอรีที่ใช้งานอยู่โดยใช้คำสั่งต่อไปนี้

    mkdir quickstart
    
  2. เปลี่ยนเป็นไดเรกทอรีที่ใช้งานอยู่โดยใช้คำสั่งต่อไปนี้

    cd quickstart
    
  3. เริ่มต้นโมดูลใหม่โดยใช้คำสั่งต่อไปนี้

    go mod init quickstart
    
  4. รับไลบรารีของไคลเอ็นต์ Google ปฏิทิน API สำหรับ Go และแพ็กเกจ OAuth2.0 โดยใช้คำสั่งต่อไปนี้

    go get google.golang.org/api/calendar/v3
    go get golang.org/x/oauth2/google
    

ตั้งค่าตัวอย่าง

  1. สร้างไฟล์ชื่อ quickstart.go ในไดเรกทอรีที่ใช้งานอยู่

  2. วางโค้ดต่อไปนี้ในไฟล์

    calendar/quickstart/quickstart.go
    package main
    
    import (
    	"context"
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    	"time"
    
    	"golang.org/x/oauth2"
    	"golang.org/x/oauth2/google"
    	"google.golang.org/api/calendar/v3"
    	"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)
    }
    
    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, calendar.CalendarReadonlyScope)
    	if err != nil {
    		log.Fatalf("Unable to parse client secret file to config: %v", err)
    	}
    	client := getClient(config)
    
    	srv, err := calendar.NewService(ctx, option.WithHTTPClient(client))
    	if err != nil {
    		log.Fatalf("Unable to retrieve Calendar client: %v", err)
    	}
    
    	t := time.Now().Format(time.RFC3339)
    	events, err := srv.Events.List("primary").ShowDeleted(false).
    		SingleEvents(true).TimeMin(t).MaxResults(10).OrderBy("startTime").Do()
    	if err != nil {
    		log.Fatalf("Unable to retrieve next ten of the user's events: %v", err)
    	}
    	fmt.Println("Upcoming events:")
    	if len(events.Items) == 0 {
    		fmt.Println("No upcoming events found.")
    	} else {
    		for _, item := range events.Items {
    			date := item.Start.DateTime
    			if date == "" {
    				date = item.Start.Date
    			}
    			fmt.Printf("%v (%v)\n", item.Summary, date)
    		}
    	}
    }

เรียกใช้ตัวอย่าง

  1. สร้างและเรียกใช้ตัวอย่างในไดเรกทอรีที่ใช้งานอยู่โดยใช้คำสั่งต่อไปนี้

    go run quickstart.go
    
  1. เมื่อเรียกใช้ตัวอย่างเป็นครั้งแรก ระบบจะแจ้งให้คุณให้สิทธิ์เข้าถึง โดยให้ทำดังนี้
    1. หากยังไม่ได้ลงชื่อเข้าใช้บัญชี Google ให้ลงชื่อเข้าใช้เมื่อได้รับข้อความแจ้ง หากลงชื่อเข้าใช้ไว้หลายบัญชี ให้เลือกบัญชีที่จะใช้ในการให้สิทธิ์
    2. คลิกยอมรับ

    แอปพลิเคชัน Go จะทำงานและเรียกใช้ Google Calendar API

    ระบบจะจัดเก็บข้อมูลการให้สิทธิ์ไว้ในระบบไฟล์ ดังนั้นเมื่อเรียกใช้โค้ดตัวอย่างในครั้งถัดไป ระบบจะไม่แจ้งให้คุณให้สิทธิ์

ขั้นตอนถัดไป