Gosource_miniflux.go -rw-r--r-- 1.3 KiB
1package main
2
3import (
4 "context"
5 "errors"
6 "os"
7
8 miniflux "miniflux.app/client"
9)
10
11var _ Source = &MinifluxFeed{}
12
13type MinifluxFeed struct {
14 name string
15 endpoint string
16 feedId int64
17 language Language
18 client *miniflux.Client
19}
20
21func (m *MinifluxFeed) getClient() error {
22 token := os.Getenv("MINIFLUX_SECRET_TOKEN")
23 if token == "" {
24 return errors.New("MINIFLUX_SECRET_TOKEN not set")
25 }
26 m.client = miniflux.New(m.endpoint, token)
27 return nil
28}
29
30func (m *MinifluxFeed) Name() string {
31 return m.name
32}
33
34func (m *MinifluxFeed) Language() Language {
35 return m.language
36}
37
38func (m *MinifluxFeed) Len(ctx context.Context) (int, error) {
39 if m.client == nil {
40 if err := m.getClient(); err != nil {
41 return -1, err
42 }
43 }
44 entries, err := m.client.FeedEntries(m.feedId, &miniflux.Filter{Status: miniflux.EntryStatusUnread})
45 if err != nil {
46 return -1, err
47 }
48 return entries.Total, nil
49}
50
51func (m *MinifluxFeed) Get(ctx context.Context, i int) (*Article, error) {
52 if m.client == nil {
53 if err := m.getClient(); err != nil {
54 return nil, err
55 }
56 }
57 entries, err := m.client.FeedEntries(m.feedId, &miniflux.Filter{Status: miniflux.EntryStatusUnread})
58 if err != nil {
59 return nil, err
60 }
61 entry := entries.Entries[i]
62 return &Article{raw: extractText(entry.Content)}, nil
63}