{"id":20432941,"url":"https://github.com/cdzombak/feedbin-auto-archiver","last_synced_at":"2025-07-31T15:38:21.751Z","repository":{"id":66912879,"uuid":"177442183","full_name":"cdzombak/feedbin-auto-archiver","owner":"cdzombak","description":"Avoid stress: Automatically archive old unread entries in Feedbin.","archived":false,"fork":false,"pushed_at":"2025-06-10T08:11:42.000Z","size":48,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-30T04:25:14.726Z","etag":null,"topics":["feedbin","rss"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cdzombak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2019-03-24T16:46:12.000Z","updated_at":"2024-05-25T11:37:12.000Z","dependencies_parsed_at":"2024-05-21T14:51:13.747Z","dependency_job_id":null,"html_url":"https://github.com/cdzombak/feedbin-auto-archiver","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/cdzombak/feedbin-auto-archiver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdzombak%2Ffeedbin-auto-archiver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdzombak%2Ffeedbin-auto-archiver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdzombak%2Ffeedbin-auto-archiver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdzombak%2Ffeedbin-auto-archiver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cdzombak","download_url":"https://codeload.github.com/cdzombak/feedbin-auto-archiver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdzombak%2Ffeedbin-auto-archiver/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268065827,"owners_count":24190190,"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","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["feedbin","rss"],"created_at":"2024-11-15T08:17:13.763Z","updated_at":"2025-07-31T15:38:21.700Z","avatar_url":"https://github.com/cdzombak.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Feedbin Auto-Archiver\n\n*Auto-archiving for older unread posts in Feedbin, inspired by Pocket Casts’ configurable auto-archive feature.*\n\n## Motivation\n\nSomeone in the microblogging/pro-RSS community — I forget who — recently posted something along the lines of “RSS shouldn’t be a source of stress. It’s okay to just mark it all as read and move on.”\n\nThe same is true of podcasts. To help with that, Pocket Casts has an auto-archive feature which is quite configurable on a per-feed basis, and that feature helps me avoid stress during times when I’ve fallen behind on podcasts.\n\nWith RSS, I find myself hesitant to mark a long list of entries as read; I can’t help but worry, “what if there’s something I really should read down there somewhere?”\n\nSo I built this tool. It’s designed to be run on a periodic basis (2-4 times per day, perhaps). It will mark as read everything in your Feedbin account older than some time period (30 days, by default), and it allows configuring a custom maximum unread “age” per feed.\n\n### See Also\n\n[Instapaper Auto Archiver](https://github.com/cdzombak/instapaper-auto-archiver) performs a similar function, for old unread Instapaper bookmarks.\n\n## Installation (Docker)\n\nPre-built Docker images are available. [See Docker Hub for details](https://hub.docker.com/r/cdzombak/feedbin-auto-archiver).\n\nNo installation is required to use these images under Docker.\n\n## Installation (local Python)\n\n1. Clone the repo and change into the `feedbin-auto-archiver` directory\n2. Run `make virtualenv` to create a virtualenv for the project \u0026 install dependencies\n\n## Configuration\n\n### Credentials\n\nCredentials are supplied via the environment variables `FEEDBIN_ARCHIVER_USERNAME` and `FEEDBIN_ARCHIVER_PASSWORD`.\n\n#### Docker Configuration\n\nCredentials may be placed in a `.env` file and given to the `docker run` command like:\n\n```shell\ndocker run --rm --env-file .env cdzombak/feedbin-auto-archiver:1 [OPTIONS]\n```\n\n(See `.env.sample` for a sample file.)\n\nAlternatively, credentials may be passed directly to the `docker run` command like:\n\n```shell\ndocker run --rm -e FEEDBIN_ARCHIVER_USERNAME=myusername -e FEEDBIN_ARCHIVER_PASSWORD=mypassword \\\n    cdzombak/feedbin-auto-archiver:1 [OPTIONS]\n```\n\n#### Local Python Configuration\n\nYour credentials can be stored in a `.env` file alongside the `feedbin_archiver.py` script. The script will automatically read environment variables from that file. (See `.env.sample` for an example.)\n\n### Rules File\n\nThe rules file is a JSON file specifying per-feed maximum entry ages. The file is allowed to contain comments, allowing for clarity \u0026 easier maintenance. See `rules.sample.json` for an example.\n\nThe file must contain an object with two top-level keys: `max_age` and `feed_specific`.\n\n`max_age` is equivalent to the `--max-age` argument; any entries older than that age will be marked as read, unless they’re in a feed for which you’ve created a custom rule.\n\n`feed_specific` is a list of objects, each of which have two keys, like this:\n\n```javascript\n\"feed_specific\": [\n    {\n        // Add comment with Feed Name for maintainability\n        \"feed_id\": 450,\n        \"max_age\": 1\n    }, // …\n]\n```\n\nThose feed-specific rules take precedence over `max_age`. This allows you to set a quicker expiration for high-traffic feeds, or set a longer expiration for feeds with entries you really don’t want to miss.\n\n### “Ignore This Feed”\n\nTo avoid the archiver marking anything as read in a given feed, specify `999999999` for the feed’s `max_age`. (That is roughly 2.7 million years.)\n\nThis is the [maximum](https://docs.python.org/3/library/datetime.html#datetime.timedelta.max) number of days a Python `timedelta` object can represent.\n\n## Usage\n\n### Docker Usage\n\nInvoke the script with `docker run`. To use a rules file, you will need to mount it into the container.\n\n```shell\ndocker run --rm --env-file .env \\\n    -v /path/to/my_rules.json:/rules.json \\\n    cdzombak/feedbin-auto-archiver:1 \\\n    --rules-file /rules.json [--dry-run false] [OPTIONS]\n```\n\n### Local Python Usage\n\n1. Activate the virtualenv: `. venv/bin/activate`\n2. Run the script: `python feedbin_archiver.py --rules-file /path/to/my_rules.json [--dry-run false] [OPTIONS]`\n\nAlternatively, invoke the virtualenv's Python interpreter directly:\n\n```shell\nvenv/bin/python3 feedbin_archiver.py --rules-file /path/to/my_rules.json [--dry-run false] [OPTIONS]\n```\n\n### Flags\n\nAll flags are optional (though if you omit `--dry-run`, no changes will ever be made in your Feedbin account).\n\n#### `--dry-run`\n\n**Boolean. Default: True.**\n\nDry-run specifies whether the script should actually change anything in your Feedbin account. By default, this is `true`, meaning no changes will be made.\n\nOnce you’re confident in your configuration, activate the script with `--dry-fun false`.\n\n#### `--max-age`\n\n**Integer. Default: 30.**\n\nThe maximum age for unread entries. Entries older than this will be marked as read.\n\nThis argument is ignored when using a rules file (see `--rules-file` below).\n\n#### `--only-feed`\n\n**Integer. Default: none.**\n\nOnly archive entries in the given feed. This is useful for eg. debugging or one-off archiving tasks.\n\n#### `--rules-file`\n\n**String (path/filename). Default: none.**\n\nThe path to a JSON file describing your per-feed rules. See “Configuration” below for details.\n\nIf a rules file is specified, the `--max-age` flag has no effect.\n\n### List Feeds\n\nRun `python feedbin_archiver.py list-feeds` to print a list of your Feedbin feeds, along with their IDs, for use in writing per-feed rules.\n\nThe output is grep-able. For example, to find my blog feed, try `python feedbin_archiver.py list-feeds | grep -i \"chris dzombak\"`\n\n(For Docker, run `docker run --rm --env-file .env cdzombak/feedbin-auto-archiver:1 list-feeds`.)\n\n### Crontab Example\n\nThis is how I’m running this tool on my home server:\n\n```text\n# Feedbin Archiver\n# Runs every 6 hours == 4x/day\n0   */6 *   *   *   docker run --rm --env-file $HOME/.config/feedbin/env -v $HOME/.config/feedbin/archiver_rules.json:/rules.json cdzombak/feedbin-auto-archiver:1 --rules-file /rules.json --dry-run false\n```\n\n## License\n\n[MIT License](https://choosealicense.com/licenses/mit/#).\n\n## Author\n\nChris Dzombak\n- [github.com/cdzombak](https://www.github.com/cdzombak)\n- [dzombak.com](https://www.dzombak.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdzombak%2Ffeedbin-auto-archiver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcdzombak%2Ffeedbin-auto-archiver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdzombak%2Ffeedbin-auto-archiver/lists"}