gof.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package main
  2. import (
  3. "log"
  4. "net/url"
  5. //"github.com/McKael/madon"
  6. "github.com/SlyMarbo/rss"
  7. )
  8. func main() {
  9. log.Println("gof starting up...")
  10. config := readConfig()
  11. // Get feeds
  12. log.Println("Fetching feeds...")
  13. var feeds []*rss.Feed
  14. for _, source := range config.Feeds {
  15. feed, err := rss.Fetch(source.URL)
  16. if err != nil {
  17. log.Printf("Error fetching %s: %s", source.URL, err.Error())
  18. continue
  19. }
  20. feeds = append(feeds, feed)
  21. log.Printf("Fetched %s", feed.Title)
  22. }
  23. if len(feeds) == 0 {
  24. log.Fatal("Expected at least one feed to successfully fetch.")
  25. }
  26. // Loop through feeds
  27. for _, feed := range feeds {
  28. // Get feed items
  29. if len(feed.Items) == 0 {
  30. log.Printf("Warning: feed %s has no items.", feed.Title)
  31. continue
  32. }
  33. items := feed.Items
  34. if len(items) > 1 {
  35. items = items[:1]
  36. }
  37. base, err := url.Parse(feed.UpdateURL)
  38. if err != nil {
  39. log.Fatal("failed parsing update URL of the feed")
  40. }
  41. feedLink, _ := url.Parse(feed.Link)
  42. if err != nil {
  43. log.Fatal("failed parsing canonical feed URL of the feed")
  44. }
  45. // Loop through items
  46. for _, item := range items {
  47. itemLink, err := url.Parse(item.Link)
  48. if err != nil {
  49. log.Fatal("failed parsing article URL of the feed item")
  50. }
  51. // Make sure data looks OK
  52. // TODO: remove before release
  53. log.Printf("Item Data:\n\tTimestamp: %s\n\tSite URL: %s\n\tFeed Title: %s\n\tItem Title: %s\n\tItem URL: %s\n",
  54. item.Date, base.ResolveReference(feedLink).String(),
  55. feed.Title, item.Title, base.ResolveReference(itemLink).String())
  56. }
  57. }
  58. // update timestamp in config
  59. config.updateLastUpdated()
  60. // save config
  61. config.Save()
  62. }