Golang : Get YouTube playlist
A programmer productivity can be increased with a good playlist of music to get into the "zone" and I need this while coding out the job board for socketloop.com(1)
Just for fun, this is the Golang code to download a playlist from YouTube, unmarshal the XML data and display the content.
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"
)
type YouTubeEntries struct {
XMLName xml.Name `xml:"entry"`
ID string `xml:"id"`
Published string `xml:"published"`
Updated string `xml:"updated"`
Category string `xml:"category"`
Title string `xml:"title"`
Content string `xml:"content"`
Link string `xml:"link"`
Author string `xml:"author"`
}
type YouTubeFeeds struct {
XMLName xml.Name `xml:"feed"`
YouTubeEntries []YouTubeEntries `xml:"entry"`
}
// modify here to add more data to be displayed
func (data YouTubeEntries) String() string {
dateToYMD := strings.Split(data.Published, "T")
return fmt.Sprintf("\t%s - %s - [%s]\n", dateToYMD[0], data.Title, data.ID)
}
func main() {
response, err := http.Get("http://gdata.youtube.com/feeds/api/playlists/RDXIzDDYrS4iE?v=2")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer response.Body.Close()
XMLdata, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var youtubeFeeds YouTubeFeeds
xml.Unmarshal(XMLdata, &youtubeFeeds)
fmt.Println(youtubeFeeds.YouTubeEntries)
// alternate ways to display the list
for k, v := range youtubeFeeds.YouTubeEntries {
fmt.Printf("\t%d - [%s]\n", k, v)
}
}
Have fun learning Go and YouTube API !
1 - it is still a work in progress and I will announce it soon
Reference :
See also : Read a XML file in Go
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+17.9k Golang : How to make function callback or pass value from function as parameter?
+11.4k Elastic Search : Return all records (higher than default 10)
+5.6k Golang : Totalize or add-up an array or slice example
+4.9k Golang : Find change in a combination of coins example
+6k Golang : Normalize email to prevent multiple signups example
+15.5k Golang : read gzipped http response
+6.8k Gogland : Where to put source code files in package directory for rookie
+9.8k Golang : Simple image viewer with Go-GTK
+12.2k Golang : Generate Code128 barcode
+6.9k Javascript : How to check a browser's Do Not Track status?
+7.8k nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
+8.9k Golang : Check if user agent is a robot or crawler example