https://github.com/kamusis/my-opml-subscriptions
A Deno-based OPML feed validator and analyzer that helps clean up RSS subscriptions by identifying dead, inactive, and incompatible feeds while organizing active feeds by update frequency.
https://github.com/kamusis/my-opml-subscriptions
deno rss-feed typescript
Last synced: about 2 months ago
JSON representation
A Deno-based OPML feed validator and analyzer that helps clean up RSS subscriptions by identifying dead, inactive, and incompatible feeds while organizing active feeds by update frequency.
- Host: GitHub
- URL: https://github.com/kamusis/my-opml-subscriptions
- Owner: kamusis
- License: mit
- Created: 2025-04-07T04:16:11.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-18T10:44:05.000Z (about 1 year ago)
- Last Synced: 2025-04-18T17:36:23.054Z (about 1 year ago)
- Topics: deno, rss-feed, typescript
- Language: TypeScript
- Homepage: https://kamusis-my-opml-sub.deno.dev/
- Size: 273 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# OPML Feed Validator and Analyzer
A Deno-based tool for validating and analyzing OPML feed subscriptions. This tool helps you clean up your RSS feed subscriptions by identifying dead feeds, inactive feeds, incompatible feeds, and sorting active feeds based on their update frequency.
## Frontend Usage
- Visit [https://kamusis-my-opml-sub.deno.dev/](https://kamusis-my-opml-sub.deno.dev/)
- Upload -> Validate -> Export

## Frontend Features
- No sign-up or login required
- Each user is automatically assigned a unique ID (UUID), which is stored in your browser's local storage
- If you use a new browser or clear your browser data, you will need to re-upload your OPML file
- Your feeds are securely and persistently stored in a Deno KV database
- Your feeds are private—other users cannot view them
## Backend Features
- **Feed Validation**: Checks each feed's accessibility, compatibility, and update status
- **Feed Classification**:
- Active: Feeds updated within the last 2 years
- Inactive: Feeds not updated in the last 2 years
- Dead: Feeds that are inaccessible
- Incompatible: Feeds that are accessible but have format issues (e.g., wrong Content-Type, empty feeds)
- **Update Frequency Analysis**: Tracks the number of updates in the last 3 months
- **Category-based Organization**: Maintains feed organization by categories
- **Statistical Analysis**: Generates detailed statistics in markdown format
- **Multiple Output Formats**: Generates separate OPML files for active, inactive, dead, and incompatible feeds
## Prerequisites (Backend)
- [Deno](https://deno.land/) 2.x or higher
- macOS, Linux, or Windows
## Installation
1. Clone this repository:
```bash
git clone https://github.com/yourusername/my-opml-subscriptions.git
cd my-opml-subscriptions
```
## Pure Backend Usage (without Web UI)
1. Place your OPML file in the `feeds` directory
2. Run the validator:
```bash
deno run --allow-read --allow-write --allow-net src/backend/main.ts feeds/your-file.opml
```
Or use the predefined task in deno.json:
```bash
deno task backend:start feeds/your-file.opml
```
### Output Files
The tool generates several files in the `feeds` directory:
- `*-active.opml`: Contains only active feeds, sorted by update frequency
- `*-inactive.opml`: Contains inactive feeds
- `*-dead.opml`: Contains inaccessible feeds
- `*-incompatible.opml`: Contains feeds with format issues
- `processing_statistics_*.md`: Statistical analysis report with detailed breakdown of feed statuses and error categories
## Project Structure (Backend main modules only)
```
├── design/
│ └── design-backend.md # Project design documentation
├── feeds/ # Input and output OPML files
├── src/backend/ # Backend source code
│ ├── main.ts # Main entry point
│ ├── parseOPML.ts # OPML parsing logic
│ ├── checkFeedAccessibility.ts # Feed accessibility checker
│ ├── checkFeedCompatibility.ts # Feed format compatibility checker
│ ├── getFeedUpdateFrequency.ts # Feed update frequency analyzer
│ ├── generateNewOPML.ts # OPML generation logic
│ └── writeStatistics.ts # Statistics generation
├── deno.json # Deno configuration
└── README.md # This file
```
## Statistics Generated
The tool generates comprehensive statistics including:
- Total number of feeds processed
- Distribution of feed statuses (active/inactive/dead/incompatible)
- Top categories with the most active feeds
- Most frequently updated feeds
- Detailed analysis of incompatible feeds with error categories and affected URLs
## Contributing
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Acknowledgments
- Built with [Deno](https://deno.land/)
- Uses XML parsing from Deno standard library