{"id":17926128,"url":"https://github.com/cartermckinnon/filter-feed","last_synced_at":"2025-04-03T09:42:42.173Z","repository":{"id":137262957,"uuid":"486065152","full_name":"cartermckinnon/filter-feed","owner":"cartermckinnon","description":"For fetchin' filtered feeds.","archived":false,"fork":false,"pushed_at":"2022-08-07T08:39:36.000Z","size":342,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-08T23:15:12.234Z","etag":null,"topics":["podcasts","rss","rss-feed"],"latest_commit_sha":null,"homepage":"https://filter-feed.me","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cartermckinnon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-27T05:59:22.000Z","updated_at":"2024-08-17T12:01:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"2ab8a3ca-2f45-4ab6-bedb-7d050172ffc4","html_url":"https://github.com/cartermckinnon/filter-feed","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cartermckinnon%2Ffilter-feed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cartermckinnon%2Ffilter-feed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cartermckinnon%2Ffilter-feed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cartermckinnon%2Ffilter-feed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cartermckinnon","download_url":"https://codeload.github.com/cartermckinnon/filter-feed/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246981151,"owners_count":20863825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["podcasts","rss","rss-feed"],"created_at":"2024-10-28T20:59:31.636Z","updated_at":"2025-04-03T09:42:42.155Z","avatar_url":"https://github.com/cartermckinnon.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `filter-feed`\n\nThis project is:\n1. A stateless, (aspirationally) transparent, filtering proxy for RSS, Atom, and JSON feeds.\n2. A command-line tool for fetching and filtering feeds.\n3. A user interface to manage a feed's filters.\n\nI created this for podcasts. Your mileage may vary with other types of feeds -- that support comes purely from these awesome libraries that power this project:\n\n- `github.com/mmcdole/gofeed`\n- `github.com/gorilla/feeds`\n\n## Usage\n\n### On the web.\n\nYou can create a filtered feed URL from an existing feed using the public instance of `filter-feed` available at:\n\n[`https://filter-feed.me`](https://filter-feed.me)\n\nPlease don't abuse this service 🙏.\n\n### As a command-line tool.\n```\nfilter-feed fetch URL FILTER (OVERRIDE)\n```\nWhere:\n- `URL` is the URL for the feed.\n- `FILTER` is either:\n  - A `FilterSpec`\n  - A `FilterSpecs`\n  - A path to a JSON file beginning with `file://` (ex. `file://my-filter.json`), that contains a `FilterSpec` or `FilterSpecs`.\n- (Optional) `OVERRIDE` is either:\n  - A `OverrideSpec`\n  - A `OverrideSpecs`\n  - path to a JSON file, beginning with `file://` (ex. `file://my-override.json`), that contains a `OverrideSpec` or `OverrideSpecs`. \n\n### As a proxy.\n\nStart the server:\n```sh\nfilter-feed server --redis-address \":6379\"\n```\n\nOr start the server in a container:\n```sh\ndocker run --rm -p 8080:8080 ghcr.io/cartermckinnon/filter-feed server --redis-address \"redis.host:6379\"\n```\n\nGenerate a URL on the `filter-feed.me` website, or with the command-line:\n```sh\nfilter-feed url URL FILTER (OVERRIDE)\n```\n\nWhere `URL`, `FILTER`, and `OVERRIDE` are as defined above.\n\nThe filtered URL's path will look something like:\n```\n/v1/ff/ChRodHRwczovL2NhdC5mZWVkL3JzcxIYCgVyZWdleBIILipjYXRzLioaBXRpdGxl\n```\n\nJust send a `GET` for that path to a `filter-feed` server, such as the one I run at `api.filter-feed.me`:\n```\ncurl https://api.filter-feed.me/v1/ff/ChRodHRwczovL2NhdC5mZWVkL3JzcxIYCgVyZWdleBIILipjYXRzLioaBXRpdGxl\n```\n\n## Development\n\n1. Install [Earthly](https://earthly.dev).\n\n2. Compile the protocol buffers:\n```sh\nmake proto\n```\n\n3. Build locally:\n```sh\ngo build\n```\n\n4. Build for release:\n```sh\nmake\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcartermckinnon%2Ffilter-feed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcartermckinnon%2Ffilter-feed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcartermckinnon%2Ffilter-feed/lists"}