Guide de démarrage rapide pour Go

Suivez les étapes décrites dans le reste de cette page. En cinq minutes environ, vous disposerez d'une application de ligne de commande Go simple qui envoie des requêtes à l'API YouTube Data.

L'exemple de code utilisé dans ce guide récupère la ressource channel pour la chaîne YouTube Google Developers et imprime des informations de base à partir de cette ressource.

Prérequis

Pour exécuter ce guide de démarrage rapide, vous aurez besoin des éléments suivants:

  • Go, dernière version recommandée.
  • Git, dernière version recommandée.
  • Accès à Internet et à un navigateur Web
  • Un compte Google.

Étape 1: Activez l'API YouTube Data

  1. Utilisez cet assistant pour créer ou sélectionner un projet dans la Google Developers Console et activer automatiquement l'API. Cliquez sur Continuer, puis sur Accéder aux identifiants.

  2. Sur la page Créer des identifiants, cliquez sur le bouton Annuler.

  3. En haut de la page, sélectionnez l'onglet OAuth consent screen (Écran d'autorisation OAuth). Sélectionnez une adresse e-mail, saisissez un nom de produit si ce n'est pas déjà fait, puis cliquez sur le bouton Enregistrer.

  4. Sélectionnez l'onglet Identifiants, cliquez sur le bouton Créer des identifiants, puis sélectionnez ID client OAuth.

  5. Sélectionnez le type d'application Autre, saisissez "Guide de démarrage rapide de l'API YouTube Data", puis cliquez sur le bouton Créer.

  6. Cliquez sur OK pour fermer la boîte de dialogue correspondante.

  7. Cliquez sur le bouton (Télécharger JSON) à droite de l'ID client.

  8. Déplacez le fichier téléchargé vers votre répertoire de travail et renommez-le client_secret.json.

Étape 2: Préparez l'espace de travail

  1. Définissez la variable d'environnement GOPATH sur votre répertoire de travail.
  2. Obtenez la bibliothèque cliente Go et l'API OAuth2 de YouTube Data à l'aide des commandes suivantes:
go get -u google.golang.org/api/youtube/v3
go get -u golang.org/x/oauth2/...

Étape 3: Configurez l'exemple

Créez un fichier nommé quickstart.go dans votre répertoire de travail et copiez le code suivant:

// 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")
}

Étape 4: Exécutez l'exemple

Créez et exécutez l'exemple en utilisant la commande suivante à partir de votre répertoire de travail:

go run quickstart.go

La première fois que vous exécutez l'exemple, vous êtes invité à autoriser l'accès:

  1. Accédez à l'URL indiquée dans votre navigateur Web.

    Si vous n'êtes pas déjà connecté à votre compte Google, vous serez invité à le faire. Si vous êtes connecté à plusieurs comptes Google, vous serez invité à sélectionner le compte à utiliser pour l'autorisation.

  2. Cliquez sur le bouton Accepter.
  3. Copiez le code qui vous est attribué, collez-le dans l'invite de ligne de commande, puis appuyez sur Entrée.

Remarques

  • Les informations d'autorisation étant stockées sur le système de fichiers, les exécutions ultérieures ne demanderont pas d'autorisation.
  • Le flux d'autorisation de cet exemple est conçu pour une application de ligne de commande. Pour en savoir plus sur l'autorisation dans une application Web, consultez la page Utiliser OAuth 2.0 pour les applications de serveur Web.

Complément d'informations