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"
|
"io"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/mmcdole/gofeed"
|
||||||
"github.com/prologic/go-gopher"
|
"github.com/prologic/go-gopher"
|
||||||
|
|
||||||
"golang.nytpu.com/comitium/core"
|
"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
|
// gopherFeed will fetch and insert a new core.Feed into a core.FullData given a
|
||||||
// gopher url (or update if it's preexisting)
|
// gopher url (or update if it's preexisting)
|
||||||
func gopherFeed(data *core.FullData, remote string, title string) error {
|
func gopherFeed(data *core.FullData, remote string, title string) error {
|
||||||
// TODO
|
resp, err := fetchGopher(remote)
|
||||||
return fmt.Errorf("Feeds served over gopher are currently unsupported.")
|
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
|
// gopherPage will fetch and insert a new core.Page into a core.FullData given a
|
||||||
|
|||||||
Reference in New Issue
Block a user