ref: b55b30978de5976b41871498c1d7a9e71a12cdac
dir: /ytcli.go/
package main import ( "flag" "fmt" "log" "os" "os/user" "net/http" "google.golang.org/api/googleapi/transport" "google.golang.org/api/youtube/v3" "github.com/Plan9-Archive/libauth" ) var ( apiKey = flag.String("a", "", "Use API key instead of factotum") nresults = flag.Int64("m", 50, "Number of results per query") playlist = flag.Bool("p", false, "List playlists that match query") username = flag.Bool("u", false, "List videos uploaded by user") channel = flag.Bool("c", false, "List videos uploaded by channel") related = flag.Bool("r", false, "List videos related to <URL>") feed = flag.Bool("f", false, "Return link to RSS feed of user/channel (Can be used with -c, -u, or a video URL)") thumbs = flag.Bool("t", false, "Return link to thumbnail as well") ) func main() { flag.Parse() if flag.Lookup("h") != nil { flag.Usage() os.Exit(1) } if *apiKey == "" { u, err := user.Current() if err != nil { log.Fatal(err) } key, err := libauth.Getuserpasswd( "proto=pass service=ytcli user=%s", u.Username, ) if err != nil { log.Fatal(err) } *apiKey = key.Password } client := &http.Client{ Transport: &transport.APIKey{ Key: *apiKey }, } service, err := youtube.New(client) if err != nil { log.Fatalf("Error with youtube: %v", err) } results := runCommand(service) for id, title := range results { fmt.Printf("%s - %v\n", title, id) } }