شروع سریع Go

مراحل شرح‌داده‌شده در بقیه این صفحه را تکمیل کنید و پس‌از حدود پنج دقیقه برنامه خط فرمان ساده‌ای به زبان Go خواهید داشت که درخواست‌هایی را به YouTube Data API ارسال می‌کند.

کد نمونه استفاده‌شده در این راهنما منبع channel را برای کانال YouTube‏ GoogleDevelopers بازیابی می‌کند و برخی اطلاعات پایه را از آن منبع چاپ می‌کند.

پیش‌نیازها

برای اجرای این راهنمای شروع سریع، به موارد زیر نیاز دارید:

  • Go، جدیدترین نسخه توصیه می‌شود.
  • Git، جدیدترین نسخه توصیه می‌شود.
  • دسترسی به اینترنت و مرورگر وب.
  • حساب Google.

مرحله ۱: YouTube Data API را روشن کنید

  1. از این جادوگر برای ایجاد یا انتخاب پروژه در Google Developers Console و روشن کردن خودکار API استفاده کنید. روی ادامه، سپس رفتن به اطلاعات کاربری کلیک کنید.

  2. در صفحه ایجاد اطلاعات کاربری، روی دکمه لغو کلیک کنید.

  3. در بالای صفحه، برگه صفحه کسب رضایت OAuth را انتخاب کنید. نشانی ایمیل را انتخاب کنید، اگر نام محصول ازقبل تنظیم نشده است، آن را وارد کنید و روی دکمه ذخیره کلیک کنید.

  4. برگه اعتبارنامه‌ها را انتخاب کنید، روی دکمه ایجاد اعتبارنامه‌ها کلیک کنید و شناسه کارخواه OAuth را انتخاب کنید.

  5. نوع برنامه دیگر را انتخاب کنید، نام «شروع سریع YouTube Data API» را وارد کنید و روی دکمه ایجاد کلیک کنید.

  6. برای بستن کادر گفتگوی حاصل، روی تأیید کلیک کنید.

  7. روی دکمه (بارگیری JSON) در سمت چپ شناسه کارخواه کلیک کنید.

  8. فایل بارگیری‌شده را به فهرست راهنمای کاری‌تان منتقل کنید و نام آن را به client_secret.json تغییر دهید.

مرحله ۲: آماده کردن فضای کاری

  1. متغیر محیطی GOPATH را روی دایرکتوری کاری‌تان تنظیم کنید.
  2. کتابخانه مشتری YouTube Data API Go و بسته OAuth2 را بااستفاده از فرمان‌های زیر دریافت کنید:
go get -u google.golang.org/api/youtube/v3
go get -u golang.org/x/oauth2/...

مرحله ۳: راه‌اندازی نمونه

فایلی با نام 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")
}

مرحله ۴: اجرای نمونه

بااستفاده از فرمان زیر از دایرکتوری کاری‌تان، نمونه را بسازید و اجرا کنید:

go run quickstart.go

اولین‌باری که نمونه را اجرا می‌کنید، از شما خواسته می‌شود دسترسی را مجاز کنید:

  1. در مرورگر وب، به نشانی وب ارائه‌شده بروید.

    اگر قبلاً به سیستم حساب Google خود وارد نشده باشید، از شما خواسته می‌شود به سیستم وارد شوید. اگر به سیستم چند حساب Google وارد شده باشید، از شما خواسته می‌شود یک حساب را برای استفاده در فرایند صدور مجوز انتخاب کنید.

  2. روی دکمه پذیرفتن کلیک کنید.
  3. کدی را که به شما داده شده است کپی کنید، آن را در پیام‌واره خط فرمان جای‌گذاری کنید، و کلید Enter را فشار دهید.

یادداشت‌ها

  • اطلاعات مجوز در سیستم فایل ذخیره می‌شود، بنابراین اجراهای بعدی درخواست مجوز نخواهند کرد.
  • جریان مجوز در این مثال برای برنامه خط فرمان طراحی شده است. برای کسب اطلاعات درباره نحوه انجام دادن مجوزدهی در برنامه وب، استفاده از OAuth 2.0 برای برنامه‌های سرور وب را ببینید.

مطالعه بیشتر