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
+12.1k Golang : Remove or trim extra comma from CSV
+17.1k Golang : How to make a file read only and set it to writable again?
+13.8k Golang : How to convert a number to words
+7.8k Golang : Qt splash screen with delay example
+6.5k Mac OSX : Find large files by size
+33.5k Golang : Call a function after some delay(time.Sleep and Tick)
+25.6k Golang : Get executable name behind process ID example
+15.3k Golang : Convert date format and separator yyyy-mm-dd to dd-mm-yyyy
+12.2k Golang : Listen and Serve on sub domain example
+18.1k Golang : Set, Get and List environment variables
+8.4k Golang : Find duplicate files with filepath.Walk
+34.5k Golang : Integer is between a range