Allow get feed by tag
parent
03befc13d1
commit
c59398bf83
41
main.go
41
main.go
|
|
@ -130,7 +130,46 @@ func core() {
|
|||
return item.Content, nil
|
||||
},
|
||||
func(tag string) (string, error) {
|
||||
return "", errors.New("not implemented")
|
||||
feedNames, err := sclient.List(nsForFeeds, "", false, -1)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
combinedItems := []*rss.Item{}
|
||||
for _, feedName := range feedNames {
|
||||
b, err := sclient.Get(nsForFeeds, feedName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
feed, err := rss.Deserialize(b)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
for i := range feed.Tags {
|
||||
if feed.Tags[i] == tag {
|
||||
itemKeys, err := sclient.List(feed.ID(), "", false, 20) // TODO variable, or pick most recent n or something
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
for i := range itemKeys {
|
||||
b, err := sclient.Get(feed.ID(), itemKeys[i])
|
||||
if err != nil {
|
||||
return "", errors.New("cannot get feed item " + itemKeys[i])
|
||||
}
|
||||
item, err := rss.DeserializeItem(b)
|
||||
if err != nil {
|
||||
return "", errors.New("cannot deserialize feed item" + itemKeys[i])
|
||||
}
|
||||
combinedItems = append(combinedItems, item)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
combinedFeed, err := rss.New(tag, "", "", nil, time.Minute)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return rss.ToRSS(combinedFeed, combinedItems)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
|
|
|
|||
19
main_test.go
19
main_test.go
|
|
@ -18,6 +18,7 @@ func Test_Core(t *testing.T) {
|
|||
server := httptest.NewUnstartedServer(nil)
|
||||
server.Close()
|
||||
|
||||
var rssserverURL *string
|
||||
rssserver := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path == "/feed" {
|
||||
fmt.Fprintln(w,
|
||||
|
|
@ -25,17 +26,17 @@ func Test_Core(t *testing.T) {
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0"><channel>
|
||||
<title>fake.com</title>
|
||||
<link>/feed</link>
|
||||
<link>`+*rssserverURL+`/feed</link>
|
||||
<description>this is fake</description>
|
||||
<item>
|
||||
<title>title A</title>
|
||||
<link>/itemA</link>
|
||||
<link>`+*rssserverURL+`/itemA</link>
|
||||
<description></description>
|
||||
<pubDate>Wed, 10 Oct 2018 04:00:00 -0000</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title>title B</title>
|
||||
<link>/itemB</link>
|
||||
<link>`+*rssserverURL+`/itemB</link>
|
||||
<description>content B</description>
|
||||
<pubDate>Wed, 10 Oct 2018 04:00:00 -0000</pubDate>
|
||||
</item>
|
||||
|
|
@ -51,6 +52,7 @@ func Test_Core(t *testing.T) {
|
|||
}
|
||||
}))
|
||||
defer server.Close()
|
||||
rssserverURL = &rssserver.URL
|
||||
|
||||
wasDBPath := os.Getenv("DBPATH")
|
||||
wasPort := os.Getenv("PORT")
|
||||
|
|
@ -82,7 +84,7 @@ func Test_Core(t *testing.T) {
|
|||
{
|
||||
method: "post",
|
||||
path: "api/feed",
|
||||
body: `{"url":"` + rssserver.URL + `/feed", "refresh":"30m", "items":"[AB]", "content":"2"}`,
|
||||
body: `{"url":"` + rssserver.URL + `/feed", "refresh":"30m", "items":"[AB]", "content":"2", "tags": ["gotest"]}`,
|
||||
status: 200,
|
||||
post: func() { time.Sleep(time.Second * 10) },
|
||||
},
|
||||
|
|
@ -95,7 +97,12 @@ func Test_Core(t *testing.T) {
|
|||
{
|
||||
method: "get",
|
||||
path: "api/feed/item",
|
||||
body: "http___127_0_0_1_" + strings.Split(rssserver.URL, ":")[2] + "_feed.20181010__itemB",
|
||||
body: "http___127_0_0_1_" + strings.Split(rssserver.URL, ":")[2] + "_feed.20181010_http___127_0_0_1_" + strings.Split(rssserver.URL, ":")[2] + "_itemB",
|
||||
status: 200,
|
||||
},
|
||||
{
|
||||
method: "get",
|
||||
path: "api/feed/tag?url=gotest",
|
||||
status: 200,
|
||||
},
|
||||
{
|
||||
|
|
@ -134,7 +141,7 @@ func Test_Core(t *testing.T) {
|
|||
} else if b, err := ioutil.ReadAll(resp.Body); err != nil {
|
||||
t.Errorf("cannot read body on %s to %s: %v", c.method, loc.String(), err)
|
||||
} else {
|
||||
t.Logf("resp body: %s", b)
|
||||
t.Logf("%s resp body: %s", loc.String(), b)
|
||||
}
|
||||
if c.post != nil {
|
||||
c.post()
|
||||
|
|
|
|||
Loading…
Reference in New Issue