Skip to main content

A CLI tool to aggregate and view curated news articles from 100+ sources

Project description

Articlay ๐Ÿ“ฐ

PyPI version Python Downloads License: MIT

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.

โœจ Zero Configuration CLI - Install and use immediately with pip install articlay!

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

  1. Clone the repository:
git clone https://github.com/pappater/articlay.git
cd articlay
  1. Install dependencies:
pip install -r requirements.txt
  1. 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:

  1. Stored in a GitHub Gist
  2. 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.

โœจ Zero Configuration Required! The CLI works immediately after installation with no setup needed.

Installation

Install from PyPI (recommended):

pip install articlay

That's it! No configuration, no Gist ID, no setup. Just install and use.

Or install from source:

git clone https://github.com/pappater/articlay.git
cd articlay
pip install -e .

Quick Start (No Setup Needed!)

# Install and use immediately
pip install articlay

# Show all articles
articlay --all

# Show India news
articlay --india --limit 10

# Get one random article
articlay random

# Show Tamil Nadu news
articlay --tamilnadu --limit 5

# Show tech articles
articlay --codetech -l 15

โœ… Works out of the box - No Gist ID or environment variables needed!
โœ… Same content as web UI - Access all articles from the terminal
โœ… Perfect for developers - Fast, lightweight, and scriptable

Available Category Flags

  • --foryou - Curated selection from all sources
  • --india or --indi - India news
  • --tamilnadu or --tn - Tamil Nadu news
  • --movie - Movie reviews and film news
  • --literature or --lit - Literature and books
  • --writing - Writing tips and author resources
  • --reddit - Popular Reddit posts
  • --codetech or --tech - Technology and programming
  • --artculture or --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

Advanced Configuration (Optional)

Note: Configuration is NOT required for normal use! Only needed for advanced scenarios.

# Use your own Gist ID (optional)
export ARTICLAY_GIST_ID="your_gist_id"
articlay --all

# Use a private Gist (optional)
export GITHUB_TOKEN="your_token"
articlay --india

# Or pass Gist ID as argument (optional)
articlay --gist-id your_gist_id --all

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:

  1. Console Output: Displays selected articles with titles, magazine names, and links
  2. JSON File: Saves articles locally as articlay-YYYY-MM-DD.json
  3. 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:

  1. Fork the repository

  2. 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
  3. Update Configuration

    • Edit gist_config.py with your Gist ID
    • Edit docs/index.html to update the GIST_ID constant
  4. Set up GitHub Token

    • Go to GitHub Settings โ†’ Developer settings โ†’ Personal access tokens
    • Generate a new token with gist scope
    • Add it as a repository secret named GIST_TOKEN
  5. Enable GitHub Pages

    • Go to repository Settings โ†’ Pages
    • Source: Deploy from a branch
    • Branch: main, folder: /docs
    • Save
  6. 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

articlay-1.1.6.tar.gz (40.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

articlay-1.1.6-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file articlay-1.1.6.tar.gz.

File metadata

  • Download URL: articlay-1.1.6.tar.gz
  • Upload date:
  • Size: 40.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for articlay-1.1.6.tar.gz
Algorithm Hash digest
SHA256 6712f6dc2b5d1c645fe925d4ad866a666be11d7b424e056a30b68048549450b8
MD5 5979fb7bb234bb3ea79e4761086600e5
BLAKE2b-256 116c154a2875d99fc4bb00e0ef8af601c874c8f1a67d283e11d8d40dc2eaf11e

See more details on using hashes here.

File details

Details for the file articlay-1.1.6-py3-none-any.whl.

File metadata

  • Download URL: articlay-1.1.6-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for articlay-1.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 68455b8d40038cc7c7c685ab23fa63382c6467361ae1a115c555e7c8c65064ef
MD5 5a4df6e2c1962075cda4fd298bff805e
BLAKE2b-256 8ecb4b5a12db8939ca918dde26a95455a1880290b54a81d25037d82382619ec0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page