aboutsummaryrefslogtreecommitdiff
path: root/internal/integration/rssbridge/rssbridge.go
diff options
context:
space:
mode:
authorGravatar Ryan Stafford <ryan@nanorex.net> 2023-10-22 14:10:56 -0400
committerGravatar GitHub <noreply@github.com> 2023-10-22 11:10:56 -0700
commit120aabfbcef4ef453d70861aece3b107b603a911 (patch)
tree8506252411dcbce102a59b908d318b298faf7dc6 /internal/integration/rssbridge/rssbridge.go
parent5e6c054345e3c64c72a6e8612fe31a26edbdcfaa (diff)
downloadv2-120aabfbcef4ef453d70861aece3b107b603a911.tar.gz
v2-120aabfbcef4ef453d70861aece3b107b603a911.tar.zst
v2-120aabfbcef4ef453d70861aece3b107b603a911.zip
Add RSS-Bridge integration
Diffstat (limited to 'internal/integration/rssbridge/rssbridge.go')
-rw-r--r--internal/integration/rssbridge/rssbridge.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/internal/integration/rssbridge/rssbridge.go b/internal/integration/rssbridge/rssbridge.go
new file mode 100644
index 00000000..117b9c84
--- /dev/null
+++ b/internal/integration/rssbridge/rssbridge.go
@@ -0,0 +1,45 @@
+package rssbridge // import "miniflux.app/integration/rssbridge"
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "net/url"
+)
+
+type Bridge struct {
+ URL string `json:"url"`
+ BridgeMeta BridgeMeta `json:"bridgeMeta"`
+}
+
+type BridgeMeta struct {
+ Name string `json:"name"`
+}
+
+func DetectBridges(rssbridgeURL, websiteURL string) (bridgeResponse []Bridge, err error) {
+ u, err := url.Parse(rssbridgeURL)
+ if err != nil {
+ return nil, err
+ }
+ values := u.Query()
+ values.Add("action", "findfeed")
+ values.Add("format", "atom")
+ values.Add("url", websiteURL)
+ u.RawQuery = values.Encode()
+
+ response, err := http.Get(u.String())
+ if err != nil {
+ return nil, err
+ }
+ defer response.Body.Close()
+ if response.StatusCode == http.StatusNotFound {
+ return
+ }
+ if response.StatusCode > 400 {
+ return nil, fmt.Errorf("RSS-Bridge: server failure (%d)", response.StatusCode)
+ }
+ if err := json.NewDecoder(response.Body).Decode(&bridgeResponse); err != nil {
+ return nil, fmt.Errorf("RSS-Bridge: unable to decode bridge response: %w", err)
+ }
+ return
+}