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
|
return item.Content, nil
|
||||||
},
|
},
|
||||||
func(tag string) (string, error) {
|
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 {
|
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 := httptest.NewUnstartedServer(nil)
|
||||||
server.Close()
|
server.Close()
|
||||||
|
|
||||||
|
var rssserverURL *string
|
||||||
rssserver := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
rssserver := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
if r.URL.Path == "/feed" {
|
if r.URL.Path == "/feed" {
|
||||||
fmt.Fprintln(w,
|
fmt.Fprintln(w,
|
||||||
|
|
@ -25,17 +26,17 @@ func Test_Core(t *testing.T) {
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<rss version="2.0"><channel>
|
<rss version="2.0"><channel>
|
||||||
<title>fake.com</title>
|
<title>fake.com</title>
|
||||||
<link>/feed</link>
|
<link>`+*rssserverURL+`/feed</link>
|
||||||
<description>this is fake</description>
|
<description>this is fake</description>
|
||||||
<item>
|
<item>
|
||||||
<title>title A</title>
|
<title>title A</title>
|
||||||
<link>/itemA</link>
|
<link>`+*rssserverURL+`/itemA</link>
|
||||||
<description></description>
|
<description></description>
|
||||||
<pubDate>Wed, 10 Oct 2018 04:00:00 -0000</pubDate>
|
<pubDate>Wed, 10 Oct 2018 04:00:00 -0000</pubDate>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>title B</title>
|
<title>title B</title>
|
||||||
<link>/itemB</link>
|
<link>`+*rssserverURL+`/itemB</link>
|
||||||
<description>content B</description>
|
<description>content B</description>
|
||||||
<pubDate>Wed, 10 Oct 2018 04:00:00 -0000</pubDate>
|
<pubDate>Wed, 10 Oct 2018 04:00:00 -0000</pubDate>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -51,6 +52,7 @@ func Test_Core(t *testing.T) {
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
rssserverURL = &rssserver.URL
|
||||||
|
|
||||||
wasDBPath := os.Getenv("DBPATH")
|
wasDBPath := os.Getenv("DBPATH")
|
||||||
wasPort := os.Getenv("PORT")
|
wasPort := os.Getenv("PORT")
|
||||||
|
|
@ -82,7 +84,7 @@ func Test_Core(t *testing.T) {
|
||||||
{
|
{
|
||||||
method: "post",
|
method: "post",
|
||||||
path: "api/feed",
|
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,
|
status: 200,
|
||||||
post: func() { time.Sleep(time.Second * 10) },
|
post: func() { time.Sleep(time.Second * 10) },
|
||||||
},
|
},
|
||||||
|
|
@ -95,7 +97,12 @@ func Test_Core(t *testing.T) {
|
||||||
{
|
{
|
||||||
method: "get",
|
method: "get",
|
||||||
path: "api/feed/item",
|
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,
|
status: 200,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -134,7 +141,7 @@ func Test_Core(t *testing.T) {
|
||||||
} else if b, err := ioutil.ReadAll(resp.Body); err != nil {
|
} 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)
|
t.Errorf("cannot read body on %s to %s: %v", c.method, loc.String(), err)
|
||||||
} else {
|
} else {
|
||||||
t.Logf("resp body: %s", b)
|
t.Logf("%s resp body: %s", loc.String(), b)
|
||||||
}
|
}
|
||||||
if c.post != nil {
|
if c.post != nil {
|
||||||
c.post()
|
c.post()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue