مراحل شرح داده شده در ادامه این صفحه را تکمیل کنید و در حدود پنج دقیقه یک برنامه خط فرمان ساده Go خواهید داشت که درخواستهایی را به API داده YouTube ارسال میکند.
کد نمونهای که در این راهنما استفاده شده است، منبعchannel را برای کانال یوتیوب GoogleDevelopers بازیابی میکند و برخی اطلاعات اولیه را از آن منبع چاپ میکند.پیشنیازها
برای اجرای این شروع سریع، به موارد زیر نیاز دارید:
- برو ، آخرین نسخه توصیه میشود.
- گیت ، آخرین نسخه توصیه میشود.
- دسترسی به اینترنت و مرورگر وب.
- یک حساب گوگل.
مرحله ۱: فعال کردن API داده یوتیوب
از این ویزارد برای ایجاد یا انتخاب یک پروژه در کنسول توسعهدهندگان گوگل و فعال کردن خودکار API استفاده کنید. روی ادامه کلیک کنید، سپس به اعتبارنامهها بروید .
در صفحه ایجاد اعتبارنامه ، روی دکمه لغو کلیک کنید.
در بالای صفحه، برگهی «رضایت OAuth» را انتخاب کنید. یک آدرس ایمیل انتخاب کنید، اگر نام محصول از قبل تعیین نشده است، آن را وارد کنید و روی دکمهی «ذخیره» کلیک کنید.
برگه اعتبارنامهها را انتخاب کنید، روی دکمه ایجاد اعتبارنامهها کلیک کنید و شناسه کلاینت OAuth را انتخاب کنید.
نوع برنامه را Other انتخاب کنید، نام آن را "YouTube Data API Quickstart" بگذارید و روی دکمه Create کلیک کنید.
برای رد کردن کادر محاورهای حاصل، روی تأیید کلیک کنید.
روی دکمه (دانلود JSON) در سمت راست شناسه کلاینت کلیک کنید.
فایل دانلود شده را به دایرکتوری کاری خود منتقل کنید و نام آن را
client_secret.jsonتغییر دهید.
مرحله 2: آماده سازی فضای کاری
- متغیر محیطی
GOPATHرا روی دایرکتوری کاری خود تنظیم کنید. - با استفاده از دستورات زیر، کتابخانه کلاینت YouTube Data API Go و پکیج OAuth2 را دریافت کنید:
go get -u google.golang.org/api/youtube/v3go 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
اولین باری که نمونه را اجرا میکنید، از شما خواسته میشود که دسترسی را تأیید کنید:
در مرورگر وب خود به آدرس اینترنتی ارائه شده بروید.
اگر قبلاً وارد حساب گوگل خود نشدهاید، از شما خواسته میشود که وارد شوید. اگر وارد چندین حساب گوگل شدهاید، از شما خواسته میشود که یک حساب را برای استفاده به عنوان مجوز انتخاب کنید.
- روی دکمه پذیرش کلیک کنید.
- کدی که به شما داده شده را کپی کنید، آن را در خط فرمان پیست کنید و Enter را فشار دهید.
یادداشتها
- اطلاعات مجوز در سیستم فایل ذخیره میشود، بنابراین اجراهای بعدی درخواست مجوز نخواهند کرد.
- جریان مجوزدهی در این مثال برای یک برنامه خط فرمان طراحی شده است. برای اطلاعات بیشتر در مورد نحوه انجام مجوزدهی در یک برنامه وب، به بخش «استفاده از OAuth 2.0 برای برنامههای وب سرور» مراجعه کنید.