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
+8.4k Golang : Convert(cast) []byte to io.Reader type
+11.3k Golang : Display a text file line by line with line number example
+17.7k Golang : Get all upper case or lower case characters from string example
+9.2k Golang : Accessing content anonymously with Tor
+14.7k Golang : Search folders for file recursively with wildcard support
+8.8k Golang : Get curl -I or head data from URL example
+29.4k Golang : Get time.Duration in year, month, week or day
+46k Golang : Encode image to base64 example
+10.9k Golang : Roll the dice example
+5.2k Golang : What is StructTag and how to get StructTag's value?
+5.1k Golang : Get FX sentiment from website example
+17.3k Golang : delete and modify XML file content