Go Hızlı Başlangıç Kılavuzu

Bu sayfanın geri kalanında açıklanan adımları tamamlayın. Yaklaşık beş dakika içinde YouTube Data API'ye istekte bulunan basit bir Go komut satırı uygulaması edineceksiniz.

Bu kılavuzda kullanılan örnek kod, GoogleDevelopers YouTube kanalının channel kaynağını alır ve bu kaynaktan bazı temel bilgileri yazdırır.

Ön koşullar

Bu hızlı başlangıç kılavuzunu çalıştırmak için aşağıdakilere ihtiyacınız vardır:

  • Başla, önerilen en son sürüm.
  • Git'i deneyin.
  • İnternete ve web tarayıcısına erişim.
  • Google Hesabı.

1. Adım: YouTube Data API'yi etkinleştirin

  1. Google Developers Console'da proje oluşturmak veya seçmek ve API'yi otomatik olarak etkinleştirmek için bu sihirbazı kullanın. Devam'ı, ardından Kimlik bilgilerine git'i tıklayın.

  2. Kimlik bilgisi oluştur sayfasında İptal düğmesini tıklayın.

  3. Sayfanın üst kısmından OAuth izin ekranı sekmesini seçin. Bir E-posta adresi seçin, ayarlanmamışsa Ürün adı girin ve Kaydet düğmesini tıklayın.

  4. Kimlik bilgileri sekmesini seçin, Kimlik bilgisi oluştur düğmesini tıklayın ve OAuth istemci kimliği'ni seçin.

  5. Diğer uygulama türünü seçin, "YouTube Data API Hızlı Başlangıç" adını girin ve Oluştur düğmesini tıklayın.

  6. Açılan iletişim kutusunu kapatmak için Tamam'ı tıklayın.

  7. İstemci kimliğinin sağındaki (JSON'ı indir) düğmesini tıklayın.

  8. İndirilen dosyayı çalışma dizininize taşıyın ve client_secret.json olarak yeniden adlandırın.

2. Adım: Çalışma alanını hazırlayın

  1. GOPATH ortam değişkenini çalışma dizininize ayarlayın.
  2. Aşağıdaki komutları kullanarak YouTube Data API Go istemci kitaplığını ve OAuth2 paketini alın:
go get -u google.golang.org/api/youtube/v3
go get -u golang.org/x/oauth2/...

3. Adım: Örneği oluşturun

Çalışma dizininizde quickstart.go adlı bir dosya oluşturun ve aşağıdaki kodu kopyalayın:

// 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. Adım: Örneği çalıştırın

Çalışma dizininizdeki aşağıdaki komutu kullanarak örneği oluşturun ve çalıştırın:

go run quickstart.go

Örneği ilk kez çalıştırdığınızda erişimi yetkilendirmeniz istenir:

  1. Web tarayıcınızda sağlanan URL'ye gidin.

    Google hesabınıza giriş yapmadıysanız giriş yapmanız istenir. Birden çok Google hesabına giriş yaptıysanız yetkilendirme için kullanılacak bir hesap seçmeniz istenir.

  2. Kabul Et düğmesini tıklayın.
  3. Size verilen kodu kopyalayıp komut satırı istemine yapıştırın ve Enter tuşuna basın.

Notlar

  • Yetkilendirme bilgileri dosya sisteminde depolanır. Bu nedenle, sonraki yürütme işlemleri için yetkilendirme istenmez.
  • Bu örnekteki yetkilendirme akışı, komut satırı uygulaması için tasarlanmıştır. Web uygulamalarında yetkilendirme gerçekleştirme hakkında bilgi edinmek için Web Sunucusu Uygulamaları için OAuth 2.0'ı Kullanma başlıklı makaleye bakın.

Daha fazla bilgi