You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+54-24Lines changed: 54 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,21 +1,27 @@
1
1
# RSS Glue
2
2
3
-
RSS Glue is a highly extensible, filesystem-based RSS/Atom feed generator and manipulator. Build digests, merge feeds, and use AI tools to make your RSS feed work for you!
3
+
RSS Glue is a highly extensible, filesystem-based RSS/Atom feed generator and manipulator.
4
+
5
+
* Compose, merge, digest, and filter feeds.
6
+
* Take action on feed content (limited, this isnt an automation platform).
7
+
* Make your own feed pipelines with a little bit of Python.
RSS Glue is a simple python tool to manage feed generation and outputs exclusively to the local filesystem. The files it generates could be exposed with a web server, pushed up to an S3 bucket, or built into a netlify deployment. You don't need to operate a server or have some kind of docker host to run it.
131
160
132
-
It is not intended to scale beyond a few hundred feeds because, well, you're a human and you can't read all that anyway! It isn't intended to deploy as a multi-user app on the web. It will not get a frontend or a configuation language.
161
+
It is not intended to scale beyond a few hundred feeds because, well, you're a human and you can't read all that anyway! It isn't intended to deploy as a multi-user app on the web. It will get a SPA app or a configuration language.
133
162
134
-
**Compared with RSSHub**
163
+
This project is a little like a tiny, feed-oriented version of [dagster](https://dagster.io/). Your feed definition will be a list of DAGs. Each root feed will generate a predefined set of outputs.
135
164
136
-
RSSHub is cool, but has several problems that RSS Glue tries to solve. The integrations I care about are either broken or don't work very well. Features like merge and digest are impossible under its stateless architecture.
165
+
**Compared with RSSHub**
137
166
138
-
You can use RSS Glue and RSSHub together though!
167
+
RSSHub does not work very well. If it's meeting your needs, you probably don't need RSS Glue.
139
168
140
-
**Compared with Zapier**
169
+
**Event-driven vs Polling**
141
170
142
-
Zapier suffers from trying to be all things to all people, and the configuration hell that such an endeavor always leads to. It's kinda good at a lot of stuff.
171
+
RSS Glue is a polling-based system. It wakes up on a schedule, fetches feeds, generates outputs, and goes back to sleep.
172
+
This is because some feeds can be expensive to fetch and process, and it's better to do that work outside the request thread of the downstream RSS consumer. It also makes it easier to trace problems because artifacts are statically generated.
The cache feed now implements robust error handling for failed media downloads. When a download fails, the system marks it to prevent repeated attempts.
6
+
7
+
## Implementation Details
8
+
9
+
### Failed Download Marking
10
+
11
+
When a media download fails (image or video):
12
+
13
+
1.**Metadata File Creation**: A `.failed` file is created with the following structure:
14
+
```json
15
+
{
16
+
"timestamp": 1234567890.0,
17
+
"error": "HTTP 404: Not Found",
18
+
"url_hash": "abc123def456"
19
+
}
20
+
```
21
+
22
+
No empty placeholder file is created - only the `.failed` metadata file is needed.
23
+
24
+
### Detection Mechanism
25
+
26
+
The system checks if a download previously failed by simply looking for the existence of a `.failed` file with the expected name pattern.
The feed locking feature allows you to prevent feeds from being updated automatically. This is useful when a feed requires manual intervention or when you want to temporarily disable updates for a specific feed.
6
+
7
+
## How It Works
8
+
9
+
When a feed is locked:
10
+
- A `locked: true` flag is added to the feed's metadata file
11
+
- Updates are skipped during normal `update` and `watch` operations
12
+
- A warning is logged when an update is attempted on a locked feed
13
+
- The lock can be overridden by using `force=True` (via the `--force` flag)
## Problem: Image download failures cause infinite retries
2
+
3
+
Images that fail to download will be retried every generate cycle. It's not a huge problem, but it would be better to limit the number of retries per image.
4
+
5
+
## Problem: Image cache is broken by namespace so images in different feeds are duplicated
6
+
7
+
Fix the file cache so that images are only stored once, even if they are used in multiple feeds.
8
+
9
+
## Generate example usages
10
+
11
+
* Changing the rendering of a feed item
12
+
* Changing the rendering of a specific Instagram Feed Item
13
+
* Appending expensive metadata to a feed item (e.g., fetching article `og` metadata)
14
+
* Building an apprise notification from new feed items
0 commit comments