Skip to content

alphap365/open-feeds

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“‘ Open Feeds

Curated RSS feed definitions for news aggregation

πŸ“š Feed Structure β€’ βž• Adding Feeds β€’ πŸ“ Feed Format β€’ 🀝 Contributing


πŸ“‹ Overview

Open Feeds is a community-maintained repository of curated RSS feed definitions. These feeds are designed to be used by news aggregation tools, scrapers, and Python packages like open-news-api.

This repository maintains:

  • βœ… 50+ country-specific feeds
  • βœ… Category-based news feeds (business, politics, geopolitics, general news)
  • βœ… Version controlled for full transparency
  • βœ… Easy community contributions
  • βœ… Regularly maintained and validated feeds

πŸ—‚οΈ Feed Structure

feeds/
β”œβ”€β”€ news.json             # General news feeds
β”œβ”€β”€ business.json         # Business & finance news
β”œβ”€β”€ politics.json         # Political news
β”œβ”€β”€ geopolitics.json     # Geopolitical analysis
└── country/
    β”œβ”€β”€ usa.json          # United States
    β”œβ”€β”€ india.json        # India
    β”œβ”€β”€ uk.json           # United Kingdom
    β”œβ”€β”€ pakistan.json     # Pakistan
    └── ...               # Other countries

templates/template.json   # Template for new feed files

The root index.json serves as a registry that lists all available feed files, their type (category or country), and their path.


πŸ“ Feed Format

Each JSON file follows this versioned schema:

{
  "schema_version": 2,
  "category": null,                 // or "news", "business", "politics", "geopolitics"
  "country": null,                  // or "usa", "india", "uk", etc.
  "last_updated": "2026-06-28T00:00:00Z",
  "max_articles_per_feed": 8,       // maximum articles to fetch from each feed
  "feeds": [
    {
      "id": "bbc-news",             // unique identifier for the feed
      "name": "BBC News",           // display name
      "url": "[https://feeds.bbci.co.uk/news/rss.xml](https://feeds.bbci.co.uk/news/rss.xml)",
      "type": "rss",                // "rss" or "google_news_rss" (or others)
      "lang": "en",                 // language code
      "country": "uk",              // primary country (may be null for global feeds)
      "tags": ["general"],          // array of tags (e.g., "general", "state-media", "aggregator")
      "active": true                // whether the feed is currently live
    }
  ]
}

Field Descriptions

Field Type Required Description
schema_version integer βœ… Yes Version of the schema (currently 2)
category string or null ❌ No If the file is a category file (e.g., "news", "business")
country string or null ❌ No If the file is a country file (e.g., "usa", "india")
last_updated string (ISO 8601) βœ… Yes Date when the file was last modified
max_articles_per_feed integer βœ… Yes Number of latest articles to fetch per feed (default usually 8)
feeds array βœ… Yes List of feed objects
feeds[].id string βœ… Yes Unique identifier for this feed (within the repository)
feeds[].name string βœ… Yes Human‑readable name of the source
feeds[].url string βœ… Yes RSS/Atom feed URL (must be valid and accessible)
feeds[].type string βœ… Yes Feed format (currently "rss" or "google_news_rss")
feeds[].lang string βœ… Yes Language code (e.g., "en", "fr")
feeds[].country string or null ❌ No Primary country of the feed (if applicable)
feeds[].tags array of strings βœ… Yes Descriptive tags (e.g., ["general"], ["state-media"])
feeds[].active boolean βœ… Yes true if the feed is active and should be used

βž• Adding Feeds

1. Fork & Clone the Repository

git clone [https://github.com/alphap365/open-feeds.git](https://github.com/alphap365/open-feeds.git)
cd open-feeds

2. Choose the Appropriate File

  • Country feeds β†’ edit feeds/country/<country>.json
  • Category feeds β†’ edit feeds/<category>.json (e.g., news.json)
  • New country β†’ copy templates/template.json to feeds/country/<country>.json and fill in the details.

3. Add Your Feed Entry

Inside the feeds array, add a new object with all required fields. For example, to add a new Indian news source:

{
  "id": "the-hindu",
  "name": "The Hindu",
  "url": "[https://www.thehindu.com/news/feeder/default.rss](https://www.thehindu.com/news/feeder/default.rss)",
  "type": "rss",
  "lang": "en",
  "country": "india",
  "tags": ["general"],
  "active": true
}

4. Validate the JSON

Make sure the file is valid JSON:

python3 -m json.tool feeds/country/india.json

5. Test the Feed

Verify the feed URL works:

curl -s "[https://www.thehindu.com/news/feeder/default.rss](https://www.thehindu.com/news/feeder/default.rss)" | head -20

6. Update index.json (if adding a new file)

If you create a new country or category file, add an entry in index.json under the registry array.

For a new country file:

{
  "key": "mynewcountry",
  "kind": "country",
  "path": "feeds/country/mynewcountry.json"
}

For a new category file:

{
  "key": "technology",
  "kind": "category",
  "path": "feeds/technology.json"
}

7. Commit & Push

git add feeds/country/india.json
git add index.json   # if changed
git commit -m "Add The Hindu news feed to India feeds"
git push origin add-feeds/india-news

8. Create a Pull Request

Submit your PR with:

  • A clear title: Add [Feed Name] to [Category/Country]
  • Description of the added feeds
  • Rationale for inclusion
  • Verification that feeds are working

πŸ” Feed Guidelines

βœ… Good Feeds

  • Regularly updated (daily or more)
  • Complete article titles and links
  • Publication dates included
  • Stable feed URL for 6+ months
  • Accessible without authentication
  • Valid RSS/Atom format

❌ Avoid

  • Paywalled or limited‑access feeds
  • Truncated content or summaries only
  • Dead or inactive feeds (no updates in 3+ months)
  • Feeds requiring API keys or authentication
  • Feeds with excessive redirects or errors

πŸ’‘ Best Practices

  • Test before submitting – always verify the URL works.
  • No duplicates – search existing files to avoid adding the same source twice.
  • Use official names – e.g., "BBC News" instead of "BBC".
  • Choose correct tags – use ["general"], ["state-media"], ["aggregator"], or custom tags as needed.
  • Set active status – set "active": true only if the feed is currently live; set to false if it’s temporarily broken.

πŸ“Š Feed Categories

File Type Description
news.json Category General / breaking news
business.json Category Business, finance, economics
politics.json Category Politics & government
geopolitics.json Category International relations, geopolitical analysis
country/*.json Country Feeds specific to a country (e.g., india.json)

πŸ”„ Maintenance

  • Report broken feeds via GitHub Issues.
  • Remove feeds that haven’t been updated in 3+ months.
  • Update feed URLs if sources change their feed endpoints.
  • Set "active": false for temporarily unavailable feeds.

🀝 Contributing

We welcome contributions! Please follow the steps above and check the PR checklist:

PR Checklist

  • JSON is valid (python3 -m json.tool passes)
  • Feed URLs are tested and accessible
  • No duplicate feeds in the repository
  • Feed placed in appropriate category/country file
  • index.json updated if a new file is added
  • Descriptive commit message and PR description
  • Feed follows the format specification

GitHub β€’ Issues β€’ Discussions

Made with ❀️ by the community

About

This repo maintains the RSS feed definitions that power the `get_live_news()` function in the main `open-news` package. Feed configurations are stored as JSON files and are automatically fetched and cached by the package.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors