A CLI tool to aggregate and view curated news articles from 100+ sources
Project description
Articlay ๐ฐ
A comprehensive news aggregator that fetches articles from popular magazines and news sources worldwide, including India and Tamil Nadu, and presents them in a beautiful, minimalistic UI.
Features
News Aggregation
- ๐ Global Coverage: Fetches from 35+ news sources including Reuters, Forbes, The Economist, Wired, Nature, BBC, CNN, Al Jazeera, and more
- ๐ฎ๐ณ Indian News: Includes The Hindu, Times of India, Indian Express, NDTV, Hindustan Times, Zee News, India Today, DD News
- ๐๏ธ Tamil Nadu News: Features Dinamalar, Dinamani, Daily Thanthi
- ๐ฌ Movie & Film: Mubi, Letterboxd, RogerEbert.com, IndieWire, Criterion Collection, Film Companion, Filmfare, Variety
- ๐ Literature: Literary Hub, Project Gutenberg, The Paris Review, Granta, New Yorker Books, Hindu Literary Review
- โ๏ธ Writing: Medium, Substack, Wattpad, Electric Literature, Poets.org, Reddit r/writing
- ๐ Categorized Articles: Organized by World, India, Tamil Nadu, Movie, Literature, Writing, Reddit, Business, Technology, Science, Culture, and more
- โก Frequent Updates: Runs automatically every 15 minutes
- ๐ Deduplication: Intelligent article deduplication to prevent duplicates across sources
- ๐ฏ One Article Per Source: Displays one unique article from each news source per update
Wikipedia & Special Content
- ๐ Wikipedia Article of the Day: Featured article with full content
- ๐ผ๏ธ Wikipedia Picture of the Day: Beautiful daily images from Wikimedia Commons
- ๐ Wikipedia Quote of the Day: Inspiring quotes from Wikiquote
- ๐ฒ Random Wikipedia Article: Discover something new every day
- ๐ On This Day in History: Historical events that happened on the current date
- ๐ก Daily Quotes: Inspirational quotes from multiple sources
User Interface
- ๐ GitHub Pages UI: Beautiful, minimalistic interface to browse today's articles
- ๐จ 1970s Retro Design: Bold red Courier New header with vintage text shadow effects
- ๐ Retro Article Highlights: Colorful gradient left border appears on hover for a vintage magazine feel
- ๐ญ Easter Egg: Jean-Michel Basquiat-style art revealed when scrolling to bottom (footer fades away)
- ๐ Touch Gestures: Swipe left/right to switch between tabs (no refresh), pull down to refresh
- ๐ Dark Mode: Toggle between light and dark themes with localStorage persistence
- ๐ Powerful Search: Real-time search by keywords or source names (e.g., "forbes", "technology", "climate")
- Search across all fields or filter by source name, title, description, or category
- Case-insensitive with instant results as you type
- Clear search to return to all articles
- ๐ Statistics Dashboard: View article counts, sources, and categories at a glance
- ๐ฑ Responsive Design: Works perfectly on desktop, tablet, and mobile
- ๐ IST Timezone: All times and dates use Indian Standard Time
Data Management
- ๐พ Gist Storage: Stores current date's article data (title, description, link, publish date, category) to GitHub Gist
- ๐ฏ Current Date Focus: Only keeps today's articles to maintain optimal performance (keeps JSON ~386KB instead of accumulating to 11+MB over time)
Installation
Prerequisites
- Python 3.7 or higher
- GitHub Personal Access Token (for Gist archiving)
Setup
- Clone the repository:
git clone https://github.com/pappater/articlay.git
cd articlay
- Install dependencies:
pip install -r requirements.txt
- Set up your GitHub token (for Gist archiving):
export GITHUB_TOKEN="your_github_personal_access_token"
Or create a .env file:
GITHUB_TOKEN=your_github_personal_access_token
Usage
Daily Automation (Recommended)
The repository is configured to automatically fetch articles every day at 6:00 AM IST via GitHub Actions. The scraped articles are:
- Stored in a GitHub Gist
- Displayed on the live UI
No manual intervention is required!
Command-Line Interface (CLI)
Articlay provides a powerful CLI for viewing articles right in your terminal.
Installation
pip install articlay
Or install from source:
git clone https://github.com/pappater/articlay.git
cd articlay
pip install -e .
Quick Start
# Show For You articles (default)
articlay
# Show 10 India news articles
articlay --india --limit 10
# Get one random article
articlay random
# Show all Tamil Nadu articles
articlay --tamilnadu --limit 0
# Show 15 tech articles
articlay --tech -l 15
Available Category Flags
--foryou- Curated selection from all sources--indiaor--indi- India news--tamilnaduor--tn- Tamil Nadu news--movie- Movie reviews and film news--literatureor--lit- Literature and books--writing- Writing tips and author resources--reddit- Popular Reddit posts--codetechor--tech- Technology and programming--artcultureor--art- Art exhibitions and culture--others- All other categories--all- Show all articles from today
Examples
# View help
articlay --help
# Show specific category with limit
articlay --india --limit 10
articlay --movie -l 5
# Random article discovery
articlay random
# Show all available articles
articlay --all --limit 0
# With GitHub token (for private Gists)
export GITHUB_TOKEN=your_token_here
articlay --india
For complete CLI documentation, see CLI_GUIDE.md.
Manual Scraper Execution
To manually run the article scraper:
# Set your GitHub token (required for Gist storage)
export GITHUB_TOKEN="your_github_token_here"
# Run the daily scraper
python daily_gist_job.py
This will:
- Fetch articles from all configured news sources
- Store them in the configured GitHub Gist
- Organize them by date and category
Legacy Magzter Tool
The original articlay.py tool for Magzter is still available:
# Basic usage (uses placeholder data)
python articlay.py --magazines 20 --articles 10
Output
The tool generates two types of output:
- Console Output: Displays selected articles with titles, magazine names, and links
- JSON File: Saves articles locally as
articlay-YYYY-MM-DD.json - GitHub Gist: Archives articles as markdown to a public Gist (if enabled)
Example Output
๐ฐ Articlay - Magzter Article Aggregator
==================================================
Fetching top 10 popular magazines...
Found 10 magazines
Selecting 5 random articles from different magazines...
๐ Selected Articles:
--------------------------------------------------
1. Magazine 1 - Article 3
Magazine: Magazine 1
Link: https://www.magzter.com/magazine-1/article-3
2. Magazine 5 - Article 2
Magazine: Magazine 5
Link: https://www.magzter.com/magazine-5/article-2
...
โ Archived to Gist: https://gist.github.com/...
โ Articles saved to: articlay-2024-01-15.json
Setup for Your Own Instance
If you want to run Articlay on your own repository:
-
Fork the repository
-
Create a GitHub Gist
- Go to https://gist.github.com/
- Create a new gist with filename
magazine-articles.json - Initialize it with
{} - Copy the Gist ID from the URL
-
Update Configuration
- Edit
gist_config.pywith your Gist ID - Edit
docs/index.htmlto update theGIST_IDconstant
- Edit
-
Set up GitHub Token
- Go to GitHub Settings โ Developer settings โ Personal access tokens
- Generate a new token with
gistscope - Add it as a repository secret named
GIST_TOKEN
-
Enable GitHub Pages
- Go to repository Settings โ Pages
- Source: Deploy from a branch
- Branch: main, folder: /docs
- Save
-
Enable GitHub Actions
- The workflows will run automatically
- Articles will be fetched daily at 6 AM IST
Requirements
See requirements.txt:
- requests>=2.31.0
- beautifulsoup4>=4.12.0
- lxml>=4.9.0
Live Demo
Visit the live UI: https://pappater.github.io/articlay/
Browse daily articles in a clean, minimalistic interface organized by category.
News Sources
World News (7 sources)
- Reuters, Time, The Atlantic, NPR, BBC, CNN, Al Jazeera
Business & Economics (3 sources)
- Forbes, The Economist, Bloomberg
Technology (1 source)
- Wired
Science & Nature (5 sources)
- National Geographic, Scientific American, Popular Science, New Scientist, Nature
Culture (2 sources)
- The New Yorker, Smithsonian Magazine
India (8 sources)
- The Hindu, Times of India, Indian Express, NDTV, Hindustan Times, Zee News, India Today, DD News
Tamil Nadu (3 sources)
- Dinamalar, Dinamani, Daily Thanthi
Wikipedia & Special Content (6 sources)
- Wikipedia Article of the Day
- Wikipedia Picture of the Day
- Random Wikipedia Article
- Wikiquote Quote of the Day
- On This Day in History
- Daily Inspirational Quotes
Total: 35+ sources across 9 categories
Automation
Articles are automatically scraped and stored every 15 minutes via GitHub Actions. Non-working scrapers are gracefully skipped.
Note: The 15-minute schedule is aggressive and may cause rate limiting with some sources. Monitor the GitHub Actions logs and adjust the schedule in .github/workflows/daily-gist.yml if needed (e.g., change to 0 */1 * * * for hourly updates).
Scraper Status
For tracking which scrapers are working and which need attention, see SCRAPER_STATUS.md. This document helps identify:
- Newly added scrapers pending production testing
- Known issues with specific scrapers
- Alternative sources when scrapers fail
- Testing instructions for individual scrapers
License
MIT License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file articlay-1.1.4.tar.gz.
File metadata
- Download URL: articlay-1.1.4.tar.gz
- Upload date:
- Size: 39.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c296819473b03ba2f345f49b946ae68f11e56ecd5fc7f8254a96f459e993dc8c
|
|
| MD5 |
2b0a8f9897f0b6126fbdb1c07af595cd
|
|
| BLAKE2b-256 |
ce3ea5b6464c3627114aa2521edf32ede20c91c7d6d44a3a5979b1c862b0128a
|
File details
Details for the file articlay-1.1.4-py3-none-any.whl.
File metadata
- Download URL: articlay-1.1.4-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec519e9eb227efac7d0217604208838eb89a41e382aba10448f1ff6c32d4a18f
|
|
| MD5 |
50b96b5271865dbc674b01c6332db0d5
|
|
| BLAKE2b-256 |
947895ae2f8e9e7c8bc4c6aaeee3df59231b328e506f49e1fb9d2a1b5a3fa143
|