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

ทำตามขั้นตอนที่อธิบายไว้ในส่วนที่เหลือของหน้านี้ให้เสร็จสมบูรณ์ แล้วคุณจะมีแอปพลิเคชันบรรทัดคำสั่ง Go อย่างง่ายที่ส่งคำขอไปยัง YouTube Data API ในเวลาประมาณ 5 นาที

โค้ดตัวอย่างที่ใช้ในคู่มือนี้จะดึงข้อมูลทรัพยากร channel สำหรับช่อง YouTube ของ GoogleDevelopers และพิมพ์ข้อมูลพื้นฐานบางอย่างจากทรัพยากรนั้น

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

หากต้องการเรียกใช้ Quickstart นี้ คุณจะต้องมีสิ่งต่อไปนี้

  • Go เวอร์ชันล่าสุด (แนะนำ)
  • Git เวอร์ชันล่าสุด (แนะนำ)
  • สิทธิ์เข้าถึงอินเทอร์เน็ตและเว็บเบราว์เซอร์
  • บัญชี Google

ขั้นตอนที่ 1: เปิดใช้ YouTube Data API

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

  2. ในหน้าสร้างข้อมูลเข้าสู่ระบบ ให้คลิกปุ่ม ยกเลิก

  3. เลือกแท็บหน้าจอขอความยินยอม OAuth ที่ด้านบนของหน้า เลือกอีเมล ป้อนชื่อสินค้า หากยังไม่ได้ตั้งค่า แล้วคลิกปุ่มบันทึก

  4. เลือกแท็บข้อมูลเข้าสู่ระบบ คลิกปุ่มสร้างข้อมูลเข้าสู่ระบบ แล้วเลือกรหัสไคลเอ็นต์ OAuth

  5. เลือกประเภทแอปพลิเคชันอื่นๆ ป้อนชื่อ "YouTube Data API Quickstart" แล้วคลิกปุ่มสร้าง

  6. คลิกตกลง เพื่อปิดกล่องโต้ตอบที่ปรากฏ

  7. คลิกปุ่ม (ดาวน์โหลด JSON) ทางด้านขวาของรหัสไคลเอ็นต์

  8. ย้ายไฟล์ที่ดาวน์โหลดไปยังไดเรกทอรีที่ทำงานอยู่และเปลี่ยนชื่อเป็น client_secret.json.

ขั้นตอนที่ 2: เตรียมพื้นที่ทำงาน

  1. ตั้งค่าตัวแปรสภาพแวดล้อม GOPATH เป็นไดเรกทอรีที่ทำงานอยู่
  2. รับไลบรารีของไคลเอ็นต์ YouTube Data API Go และแพ็กเกจ OAuth2 โดยใช้คำสั่งต่อไปนี้
go get -u google.golang.org/api/youtube/v3
go get -u golang.org/x/oauth2/...

ขั้นตอนที่ 3: ตั้งค่าตัวอย่าง

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

// Sample Go code for user authorization

package main

import (
  "encoding/json"
  "fmt"
  "log"
  "io/ioutil"
  "net/http"
  "net/url"
  "os"
  "os/user"
  "path/filepath"

  "golang.org/x/net/context"
  "golang.org/x/oauth2"
  "golang.org/x/oauth2/google"
  "google.golang.org/api/youtube/v3"
)

const missingClientSecretsMessage = `
Please configure OAuth 2.0
`

// getClient uses a Context and Config to retrieve a Token
// then generate a Client. It returns the generated Client.
func getClient(ctx context.Context, config *oauth2.Config) *http.Client {
  cacheFile, err := tokenCacheFile()
  if err != nil {
    log.Fatalf("Unable to get path to cached credential file. %v", err)
  }
  tok, err := tokenFromFile(cacheFile)
  if err != nil {
    tok = getTokenFromWeb(config)
    saveToken(cacheFile, tok)
  }
  return config.Client(ctx, tok)
}

// getTokenFromWeb uses Config to request a Token.
// It 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 code string
  if _, err := fmt.Scan(&code); err != nil {
    log.Fatalf("Unable to read authorization code %v", err)
  }

  tok, err := config.Exchange(oauth2.NoContext, code)
  if err != nil {
    log.Fatalf("Unable to retrieve token from web %v", err)
  }
  return tok
}

// tokenCacheFile generates credential file path/filename.
// It returns the generated credential path/filename.
func tokenCacheFile() (string, error) {
  usr, err := user.Current()
  if err != nil {
    return "", err
  }
  tokenCacheDir := filepath.Join(usr.HomeDir, ".credentials")
  os.MkdirAll(tokenCacheDir, 0700)
  return filepath.Join(tokenCacheDir,
    url.QueryEscape("youtube-go-quickstart.json")), err
}

// tokenFromFile retrieves a Token from a given file path.
// It returns the retrieved Token and any read error encountered.
func tokenFromFile(file string) (*oauth2.Token, error) {
  f, err := os.Open(file)
  if err != nil {
    return nil, err
  }
  t := &oauth2.Token{}
  err = json.NewDecoder(f).Decode(t)
  defer f.Close()
  return t, err
}

// saveToken uses a file path to create a file and store the
// token in it.
func saveToken(file string, token *oauth2.Token) {
  fmt.Printf("Saving credential file to: %s\n", file)
  f, err := os.OpenFile(file, 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 handleError(err error, message string) {
  if message == "" {
    message = "Error making API call"
  }
  if err != nil {
    log.Fatalf(message + ": %v", err.Error())
  }
}

func channelsListByUsername(service *youtube.Service, part string, forUsername string) {
  call := service.Channels.List(part)
  call = call.ForUsername(forUsername)
  response, err := call.Do()
  handleError(err, "")
  fmt.Println(fmt.Sprintf("This channel's ID is %s. Its title is '%s', " +
              "and it has %d views.",
              response.Items[0].Id,
              response.Items[0].Snippet.Title,
              response.Items[0].Statistics.ViewCount))
}


func main() {
  ctx := context.Background()

  b, err := ioutil.ReadFile("client_secret.json")
  if err != nil {
    log.Fatalf("Unable to read client secret file: %v", err)
  }

  // If modifying these scopes, delete your previously saved credentials
  // at ~/.credentials/youtube-go-quickstart.json
  config, err := google.ConfigFromJSON(b, youtube.YoutubeReadonlyScope)
  if err != nil {
    log.Fatalf("Unable to parse client secret file to config: %v", err)
  }
  client := getClient(ctx, config)
  service, err := youtube.New(client)

  handleError(err, "Error creating YouTube client")

  channelsListByUsername(service, "snippet,contentDetails,statistics", "GoogleDevelopers")
}

ขั้นตอนที่ 4: เรียกใช้ตัวอย่าง

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

go run quickstart.go

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

  1. เปิด URL ที่ให้ไว้ในเว็บเบราว์เซอร์

    หากยังไม่ได้เข้าสู่ระบบบัญชี Google ระบบจะแจ้งให้คุณเข้าสู่ระบบ หากเข้าสู่ระบบบัญชี Google หลายบัญชี ระบบจะขอให้คุณเลือกบัญชีที่จะใช้ในการให้สิทธิ์

  2. คลิกปุ่มยอมรับ
  3. คัดลอกโค้ดที่ได้รับ วางลงในพรอมต์บรรทัดคำสั่ง แล้วกด Enter

หมายเหตุ

  • ระบบจะจัดเก็บข้อมูลการให้สิทธิ์ไว้ในระบบไฟล์ ดังนั้นการดำเนินการในครั้งต่อๆ ไปจะไม่แจ้งให้คุณให้สิทธิ์
  • ขั้นตอนการให้สิทธิ์ในตัวอย่างนี้ออกแบบมาสำหรับแอปพลิเคชันบรรทัดคำสั่ง ดูข้อมูลเกี่ยวกับวิธีให้สิทธิ์ในเว็บ แอปพลิเคชันได้ที่ การใช้ OAuth 2.0 สำหรับแอปพลิเคชันเว็บเซิร์ฟเวอร์

อ่านเพิ่มเติม