Golang : Decode XML data from RSS feed
Was looking for a way to decode RSS feed XML data today and here is the code for the tutorial on how to decode XML data from RSS feed with Golang.
Enjoy!
package main
import (
"bytes"
"encoding/xml"
"fmt"
"io/ioutil"
"net/http"
"os"
)
type Rss struct {
Channel Channel `xml:"channel"`
}
type Item struct {
Title string `xml:"title"`
Link string `xml:"link"`
Description string `xml:"description"`
}
type Channel struct {
Title string `xml:"title"`
Link string `xml:"link"`
Description string `xml:"description"`
Items []Item `xml:"item"`
}
func main() {
response, err := http.Get("http://www.thestar.com.my/RSS/Metro/Community/")
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)
}
rss := new(Rss)
buffer := bytes.NewBuffer(XMLdata)
decoded := xml.NewDecoder(buffer)
err = decoded.Decode(rss)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Title : %s\n", rss.Channel.Title)
fmt.Printf("Description : %s\n", rss.Channel.Description)
fmt.Printf("Link : %s\n", rss.Channel.Link)
total := len(rss.Channel.Items)
fmt.Printf("Total items : %v\n", total)
for i := 0; i < total; i++ {
fmt.Printf("[%d] item title : %s\n", i, rss.Channel.Items[i].Title)
fmt.Printf("[%d] item description : %s\n", i, rss.Channel.Items[i].Description)
fmt.Printf("[%d] item link : %s\n\n", i, rss.Channel.Items[i].Link)
}
}
See also : Golang : Get YouTube playlist
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
+5.2k Golang *File points to a file or directory ?
+7.9k Golang : HTTP Server Example
+6.5k Golang : Reverse by word
+17.8k Golang : Convert IPv4 address to decimal number(base 10) or integer
+22.7k Golang : Test file read write permission example
+8.9k nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
+11.1k Use systeminfo to find out installed Windows Hotfix(s) or updates
+12.1k Golang : 2 dimensional array example
+7.6k Golang : How to feed or take banana with Gorilla Web Toolkit Session package
+11.4k Golang : Concurrency and goroutine example