// CheckAPIKey performs a test API call with the API key // provided in the configuration file to determine if the // service should be enabled. func (yt *YouTube) CheckAPIKey() error { var ( response *http.Response v *jason.Object err error ) if viper.GetString("api_keys.youtube") == "" { return errors.New("No YouTube API key has been provided") } url := "https://www.googleapis.com/youtube/v3/videos?part=snippet&id=KQY9zrjPBjo&key=%s" response, err = http.Get(fmt.Sprintf(url, viper.GetString("api_keys.youtube"))) defer response.Body.Close() if err != nil { return err } if v, err = jason.NewObjectFromReader(response.Body); err != nil { return err } if v, err = v.GetObject("error"); err == nil { message, _ := v.GetString("message") code, _ := v.GetInt64("code") errArray, _ := v.GetObjectArray("errors") reason, _ := errArray[0].GetString("reason") return fmt.Errorf("%d: %s (reason: %s)", code, message, reason) } return nil }
// Return page data from JSON, or nil if page is "-1", i.e., not found. // Assumes only a single page was requested. func GetJsonPage(json *jason.Object) *jason.Object { pages, err := json.GetObject("query", "pages") if err != nil { panic(err) } for key, value := range pages.Map() { if key == "-1" { return nil } else { valueObj, err := value.Object() if err != nil { panic(err) } return valueObj } } panic("getJsonPage fallthrough") }