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

Bu sayfanın geri kalanında açıklanan adımları tamamladığınızda yaklaşık beş dakika içinde YouTube Data API'ye istek gönderen basit bir Go komut satırı uygulamasına sahip olursunuz.

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

Ön koşullar

Bu hızlı başlangıç kılavuzunu çalıştırmak için ihtiyacınız olanlar:

  • Go (en son sürüm önerilir)
  • Git (en son sürüm önerilir)
  • İnternet erişimi ve web tarayıcısı
  • 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, henüz ayarlanmamışsa ürün adını 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 Quickstart" adını girin ve Oluştur düğmesini tıklayın.

  6. Sonuçta ortaya çıkan 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 yeniden adlandırın client_secret.json.

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 edinin:
go get -u google.golang.org/api/youtube/v3
go get -u golang.org/x/oauth2/...

3. adım: Örnek 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 dizininizden 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 henüz giriş yapmadıysanız giriş yapmanız istenir. Birden fazla Google Hesabı'nda oturum açtıysanız yetkilendirme için kullanmak istediğiniz hesabı seçmeniz istenir.

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

Notlar

  • Yetkilendirme bilgileri dosya sisteminde depolandığından sonraki yürütmelerde yetkilendirme istenmez.
  • Bu örnekteki yetkilendirme akışı, komut satırı uygulaması için tasarlanmıştır. Web uygulamasında yetkilendirme işleminin nasıl yapılacağı hakkında bilgi edinmek için Web Sunucusu Uygulamaları için OAuth 2.0'ı Kullanma başlıklı makaleyi inceleyin.

Daha fazla bilgi