rss-dl/main.go

101 lines
2.8 KiB
Go
Raw Normal View History

2019-04-17 20:26:44 +01:00
package main
import (
"encoding/json"
"fmt"
"path/filepath"
"github.com/mmcdole/gofeed"
2021-06-08 17:56:04 +01:00
fileio "github.com/pikami/rss-dl/fileio"
helpers "github.com/pikami/rss-dl/helpers"
structs "github.com/pikami/rss-dl/structs"
2019-04-17 20:26:44 +01:00
)
func main() {
2021-06-08 17:56:04 +01:00
structs.GetConfig()
2019-04-17 20:26:44 +01:00
fp := gofeed.NewParser()
2021-06-08 17:56:04 +01:00
helpers.LogInfo("Downloading " + structs.Config.FeedURL)
feed, _ := fp.ParseURL(structs.Config.FeedURL)
2019-04-17 20:26:44 +01:00
2021-06-08 17:56:04 +01:00
outputDir := structs.Config.OutputPath + "/" + helpers.ToCleanString(feed.Title)
fileio.InitOutputDirectory(outputDir)
2019-04-17 20:26:44 +01:00
2019-04-20 19:48:28 +01:00
feedInfoPath := outputDir + "/feed_details.json"
2021-06-08 17:56:04 +01:00
helpers.LogInfo("Writing feed details as JSON to " + feedInfoPath)
fileio.WriteToFile(feedInfoPath, GrabFeedDetailsJSON(feed))
2019-04-20 19:48:28 +01:00
2021-06-08 17:56:04 +01:00
feedImagePath := outputDir + "/image" + helpers.RemoveGetParams(filepath.Ext(feed.Image.URL))
fileio.DownloadFile(feedImagePath, feed.Image.URL)
2019-05-05 18:06:09 +01:00
2019-04-17 20:26:44 +01:00
for _, item := range feed.Items {
2021-06-08 17:56:04 +01:00
itemOutputFilename := helpers.ToCleanString(
2019-04-17 20:26:44 +01:00
item.PublishedParsed.Format("20060102") + "_" + item.Title)
itemOutputDir := outputDir + "/" + itemOutputFilename
2021-06-08 17:56:04 +01:00
if fileio.CheckIfExists(itemOutputDir) {
2019-04-20 19:48:28 +01:00
fmt.Println("Item '" + item.Title + "' already downloaded, skipping")
2019-04-17 20:26:44 +01:00
continue
}
2021-06-08 17:56:04 +01:00
helpers.LogInfo("Downloading feed item '" + item.Title + "' to " + itemOutputDir)
fileio.InitOutputDirectory(itemOutputDir)
2019-04-20 19:48:28 +01:00
itemDetailsPath := itemOutputDir + "/details.json"
2021-06-08 17:56:04 +01:00
helpers.LogInfo("Writing details to " + itemDetailsPath)
fileio.WriteToFile(
2019-04-20 19:48:28 +01:00
itemDetailsPath,
2019-04-17 20:26:44 +01:00
GrabFeedItemJSON(item))
2019-04-20 19:48:28 +01:00
2019-08-19 17:48:58 +01:00
if item.Image != nil {
2021-06-08 17:56:04 +01:00
itemImagePath := itemOutputDir + "/image" + helpers.RemoveGetParams(filepath.Ext(item.Image.URL))
helpers.LogInfo("Downloading image to " + itemImagePath)
fileio.DownloadFile(
2019-08-19 17:48:58 +01:00
itemImagePath,
item.Image.URL)
}
2019-04-20 19:48:28 +01:00
2019-04-17 20:26:44 +01:00
for _, enclosure := range item.Enclosures {
2021-06-08 17:56:04 +01:00
filename := helpers.RemoveGetParams(filepath.Base(enclosure.URL))
helpers.LogInfo("Downloading attachment '" + filename + "'")
fileio.DownloadFile(
itemOutputDir+"/"+filename,
2019-04-17 20:26:44 +01:00
enclosure.URL)
}
}
}
// GrabFeedDetailsJSON - Returns a feed summary json sring
func GrabFeedDetailsJSON(feed *gofeed.Feed) string {
2021-06-08 17:56:04 +01:00
feedParsed := &structs.FeedDetails{
2019-04-17 20:26:44 +01:00
Title: feed.Title,
Description: feed.Description,
Categories: feed.Categories,
Language: feed.Language,
Link: feed.Link,
2019-05-05 18:06:09 +01:00
FeedLink: feed.FeedLink,
2019-04-17 20:26:44 +01:00
Updated: feed.Updated,
}
feedDetails, _ := json.Marshal(feedParsed)
return string(feedDetails)
}
// GrabFeedItemJSON - Returns a feed summary json sring
func GrabFeedItemJSON(item *gofeed.Item) string {
2021-06-08 17:56:04 +01:00
itemParsed := &structs.ItemDetails{
2019-04-17 20:26:44 +01:00
Title: item.Title,
Description: item.Description,
Content: item.Content,
Link: item.Link,
Updated: item.Updated,
Published: item.Published,
GUID: item.GUID,
Categories: item.Categories,
}
itemDetails, _ := json.Marshal(itemParsed)
return string(itemDetails)
}