implement atom/rss/json feeds over gopher.
TODO: write gophermap->gemtext mapper so the same gemini feed parser can be used on both.
This commit is contained in:
+23
-2
@@ -11,6 +11,7 @@ import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/mmcdole/gofeed"
|
||||
"github.com/prologic/go-gopher"
|
||||
|
||||
"golang.nytpu.com/comitium/core"
|
||||
@@ -28,8 +29,28 @@ func fetchGopher(remote string) (*gopher.Response, error) {
|
||||
// gopherFeed will fetch and insert a new core.Feed into a core.FullData given a
|
||||
// gopher url (or update if it's preexisting)
|
||||
func gopherFeed(data *core.FullData, remote string, title string) error {
|
||||
// TODO
|
||||
return fmt.Errorf("Feeds served over gopher are currently unsupported.")
|
||||
resp, err := fetchGopher(remote)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if len(resp.Dir.Items) != 0 {
|
||||
// TODO
|
||||
return fmt.Errorf("Gemini-style feeds served over gopher are currently unsupported.")
|
||||
}
|
||||
|
||||
reader := io.LimitReader(resp.Body, 1073741824) // 1 GiB
|
||||
gofeed, err := gofeed.NewParser().Parse(reader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feed, err := core.GofeedConvert(gofeed, title)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data.InsertFeed(feed, remote)
|
||||
return nil
|
||||
}
|
||||
|
||||
// gopherPage will fetch and insert a new core.Page into a core.FullData given a
|
||||
|
||||
Reference in New Issue
Block a user