65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/mmcdole/gofeed"
|
|
)
|
|
|
|
func main() {
|
|
client := &http.Client{Timeout: 60 * time.Second}
|
|
resp, err := client.Get("https://feeds.transistor.fm/oxide-and-friends")
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error fetching: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error reading body: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
parser := gofeed.NewParser()
|
|
feed, err := parser.ParseString(string(body))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error parsing feed: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
fmt.Printf("Feed title: %s\n", feed.Title)
|
|
fmt.Printf("Total items: %d\n\n", len(feed.Items))
|
|
|
|
for i, item := range feed.Items {
|
|
if i >= 5 {
|
|
break
|
|
}
|
|
fmt.Printf("--- Item %d ---\n", i+1)
|
|
fmt.Printf(" Title: %s\n", item.Title)
|
|
fmt.Printf(" Published (raw): %s\n", item.Published)
|
|
if item.PublishedParsed != nil {
|
|
fmt.Printf(" PublishedParsed: %v\n", *item.PublishedParsed)
|
|
} else {
|
|
fmt.Printf(" PublishedParsed: <nil>\n")
|
|
}
|
|
|
|
// Check for itunes:pubDate or other date fields
|
|
for _, enc := range item.Enclosures {
|
|
fmt.Printf(" Enclosure URL (truncated): %s...\n", enc.URL[:min(len(enc.URL), 80)])
|
|
}
|
|
fmt.Println()
|
|
}
|
|
}
|
|
|
|
func min(a, b int) int {
|
|
if a < b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|