מדריך למתחילים

משלימים את השלבים שמתוארים בשאר הדף, ותוך כ-5 דקות תקבלו אפליקציה פשוטה של שורת פקודה של Go ששולחת בקשות ל-YouTube Data API.

הקוד לדוגמה שמופיע במדריך הזה מאחזר את המשאב channel לערוץ YouTube של Google Developers, ומדפיס מידע בסיסי מהמשאב הזה.

דרישות מוקדמות

כדי להריץ את המדריך המהיר הזה, צריך:

  • Go, מומלץ להשתמש בגרסה העדכנית ביותר.
  • Git, מומלץ להשתמש בגרסה האחרונה.
  • גישה לאינטרנט ולדפדפן אינטרנט.
  • חשבון Google.

שלב 1: מפעילים את YouTube Data API

  1. יש להשתמש באשף הזה כדי ליצור או לבחור פרויקט ב-Google Developers Console ולהפעיל את ה-API באופן אוטומטי. לוחצים על Continue ואז על Go to credentials.

  2. בדף Create credentials לוחצים על הלחצן Cancel.

  3. בחלק העליון של הדף, בוחרים בכרטיסייה מסך הסכמה ל-OAuth. עליך לבחור כתובת אימייל, להזין שם מוצר אם עדיין לא הוגדר, וללחוץ על הלחצן שמירה.

  4. בוחרים בכרטיסייה Credentials, לוחצים על הלחצן Create credentials ובוחרים באפשרות OAuth client ID.

  5. בוחרים בסוג האפליקציה אחר, מזינים את השם "מדריך למתחילים של YouTube Data API" ולוחצים על יצירה.

  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 ליישומי שרת אינטרנט מוסבר איך לבצע הרשאות באפליקציית אינטרנט.

קריאה נוספת