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

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

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

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

คุณต้องมีสิ่งต่อไปนี้จึงจะเรียกใช้การเริ่มต้นใช้งานฉบับย่อนี้ได้

  • 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 สำหรับแอปพลิเคชันเว็บเซิร์ฟเวอร์

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