{"id":31120187,"url":"https://github.com/4uffin/auto-news-aggregator","last_synced_at":"2026-05-09T03:32:56.007Z","repository":{"id":314839443,"uuid":"1054369625","full_name":"4uffin/auto-news-aggregator","owner":"4uffin","description":"An automated tech news aggregation and summarization tool that delivers concise TL;DR summaries from major tech publications every 12 hours.","archived":false,"fork":false,"pushed_at":"2025-09-15T04:05:55.000Z","size":97,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-15T06:19:55.156Z","etag":null,"topics":["actions","ai","automated","automation","github-actions","google-gemini","llm","python","python-script","python3","xml","xml-parser","xml-parsing","yaml","yml"],"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/4uffin.png","metadata":{"files":{"readme":"README.md","changelog":"news_digests/digest_2025-09-15_03-30.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-10T18:29:31.000Z","updated_at":"2025-09-15T04:05:58.000Z","dependencies_parsed_at":"2025-09-15T06:20:19.076Z","dependency_job_id":"0c227230-e5b4-444c-a5d8-cde5a182109e","html_url":"https://github.com/4uffin/auto-news-aggregator","commit_stats":null,"previous_names":["4uffin/auto-news-aggregator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/4uffin/auto-news-aggregator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4uffin%2Fauto-news-aggregator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4uffin%2Fauto-news-aggregator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4uffin%2Fauto-news-aggregator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4uffin%2Fauto-news-aggregator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/4uffin","download_url":"https://codeload.github.com/4uffin/auto-news-aggregator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4uffin%2Fauto-news-aggregator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275608075,"owners_count":25495458,"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-09-17T02:00:09.119Z","response_time":84,"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":["actions","ai","automated","automation","github-actions","google-gemini","llm","python","python-script","python3","xml","xml-parser","xml-parsing","yaml","yml"],"created_at":"2025-09-17T14:03:12.439Z","updated_at":"2026-05-09T03:32:55.985Z","avatar_url":"https://github.com/4uffin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [!WARNING]\n\u003e THIS README WAS GENERATED BY CLAUDE SONNET 4 AND HAS BEEN DOUBLE CHECKED BY 4UFFIN.\n\u003e\n\u003e THE REST OF THIS PROJECT WAS CREATED USING GOOGLE GEMINI 2.5 FLASH. EXPECT BUGS AND USE WITH CAUTION!\n\n# Tech News Digest 📰🤖\n\n![GitHub repo size](https://img.shields.io/github/repo-size/4uffin/auto-news-aggregator)\n[![GitHub Actions](https://img.shields.io/badge/GitHub%20Actions-Automated-brightgreen)](https://github.com/features/actions)\n[![Python](https://img.shields.io/badge/Python-3.12+-blue.svg)](https://www.python.org/downloads/)\n[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![AI Powered](https://img.shields.io/badge/AI-Gemini%202.5%20Flash-orange)](https://openrouter.ai/)\n\nAn intelligent, automated tech news aggregation and summarization tool that delivers concise TL;DR summaries from major tech publications every 12 hours.\n\n## 🚀 Quick Start\n\n```bash\n# Clone and setup\ngit clone \u003cyour-repository-url\u003e\ncd tech-news-digest\npip install -r requirements.txt\n\n# Set API key\nexport OPENROUTER_API_KEY=\"your-openrouter-api-key\"\n\n# Generate your first digest\npython generate_digest.py\n```\n\n## ✨ Features\n\n| Feature | Description |\n|---------|-------------|\n| 🌐 **Multi-Source Aggregation** | Pulls from 5+ major tech publications |\n| 🧠 **AI-Powered Summaries** | Uses Google Gemini 2.5 Flash for intelligent summarization |\n| 🔄 **Robust Fallbacks** | RSS feeds → Web scraping → Error handling |\n| ⏰ **Automated Scheduling** | Runs every 12 hours via GitHub Actions |\n| 📁 **Organized Storage** | Timestamped digests with proper file structure |\n| 🔧 **Easy Configuration** | Simple customization of sources and parameters |\n\n## 📊 News Sources\n\n| Publication | RSS Feed | Backup Scraping |\n|-------------|----------|-----------------|\n| 📱 The Verge | ✅ | ✅ |\n| 💼 TechCrunch | ✅ | ✅ |\n| 🔧 CNET | ✅ | ✅ |\n| ⚗️ Ars Technica | ✅ | ❌ |\n| 📟 Engadget | ✅ | ❌ |\n\n## 🛠️ Installation \u0026 Setup\n\n### Prerequisites\n\n- **Python 3.12+** - [Download here](https://www.python.org/downloads/)\n- **OpenRouter API Key** - [Get yours here](https://openrouter.ai/keys)\n- **Git** (for cloning and automation)\n\n### Local Setup\n\n1. **Clone the repository:**\n   ```bash\n   git clone \u003cyour-repository-url\u003e\n   cd tech-news-digest\n   ```\n\n2. **Create a virtual environment (recommended):**\n   ```bash\n   python -m venv venv\n   source venv/bin/activate  # On Windows: venv\\Scripts\\activate\n   ```\n\n3. **Install dependencies:**\n   ```bash\n   pip install openai feedparser requests beautifulsoup4\n   ```\n   \n   Or create a `requirements.txt`:\n   ```txt\n   openai\u003e=1.0.0\n   feedparser\u003e=6.0.0\n   requests\u003e=2.31.0\n   beautifulsoup4\u003e=4.12.0\n   ```\n\n4. **Configure your API key:**\n   ```bash\n   # Option 1: Environment variable\n   export OPENROUTER_API_KEY=\"your-api-key-here\"\n   \n   # Option 2: Create .env file (add to .gitignore!)\n   echo \"OPENROUTER_API_KEY=your-api-key-here\" \u003e .env\n   ```\n\n### GitHub Actions Setup\n\n1. **Add repository secret:**\n   - Go to `Settings` → `Secrets and variables` → `Actions`\n   - Click `New repository secret`\n   - Name: `OPENROUTER_API_KEY`\n   - Value: Your OpenRouter API key\n\n2. **Enable Actions:**\n   - Go to `Actions` tab\n   - Click `I understand my workflows, go ahead and enable them`\n\n3. **Manual trigger (optional):**\n   - Actions tab → `Tech News Digest` → `Run workflow`\n\n## 📖 Usage Guide\n\n### Command Line Interface\n\n```bash\n# Basic usage\npython generate_digest.py\n\n# The script will:\n# 1. Fetch headlines from all configured sources\n# 2. Generate AI summary using Gemini 2.5 Flash\n# 3. Save to news_digests/digest_YYYY-MM-DD_HH-MM.txt\n# 4. Display results in terminal\n```\n\n### Expected Output\n\n```\nStarting tech news digest generation...\nFetching headlines from The Verge...\nFetching headlines from TechCrunch...\nFetching headlines from CNET...\nGenerating summary with LLM...\n\n==================================================\nTECH NEWS DIGEST GENERATED\n==================================================\n\nTech News Digest - 2024-01-15 02:30 PM\n==================================================\n\n🚀 **Major Product Launches**\n• Apple announces new MacBook Pro with M4 chip\n• Google releases Gemini Advanced with improved coding\n\n📱 **Mobile \u0026 Hardware**\n• Samsung Galaxy S25 leaked specifications surface\n• iPhone 16 sales exceed expectations in Q4\n\n🤖 **AI \u0026 Machine Learning**\n• OpenAI unveils GPT-5 preview for developers\n• Microsoft integrates Copilot into more Office apps\n\n==================================================\n\nSuccessfully wrote the digest to news_digests/digest_2024-01-15_14-30.txt\nTech news digest generation completed successfully!\n```\n\n## ⚙️ Configuration Options\n\n### Customizing News Sources\n\nEdit the `feeds` list in `generate_digest.py`:\n\n```python\nfeeds = [\n    (\"Your Source\", \"https://example.com/rss.xml\"),\n    (\"The Verge\", \"https://www.theverge.com/rss/index.xml\"),\n    # Add more sources here\n]\n```\n\n### AI Model Configuration\n\nChange the model in `generate_digest.py`:\n\n```python\n# Available models on OpenRouter:\nMODEL = \"google/gemini-2.5-flash\"      # Current (fast, cost-effective)\nMODEL = \"anthropic/claude-sonnet-4\"    # Alternative (higher quality)\nMODEL = \"openai/gpt-4\"                 # Alternative (reliable)\n```\n\n### Schedule Customization\n\nModify the cron expression in `.github/workflows/tech-news.yml`:\n\n```yaml\nschedule:\n  # Every 12 hours (current)\n  - cron: '0 */12 * * *'\n  \n  # Every 6 hours\n  # - cron: '0 */6 * * *'\n  \n  # Daily at 9 AM UTC\n  # - cron: '0 9 * * *'\n  \n  # Weekdays only at 9 AM UTC\n  # - cron: '0 9 * * 1-5'\n```\n\n### Summary Customization\n\nAdjust the AI prompt for different summary styles:\n\n```python\n# In generate_tech_news_digest(), modify the system message:\n\"content\": f\"\"\"You are a tech news summarizer focused on [YOUR FOCUS AREA].\nCreate summaries that emphasize [YOUR PREFERENCES].\nTarget audience: [YOUR AUDIENCE]\nStyle: [FORMAL/CASUAL/TECHNICAL]\"\"\"\n```\n\n## 📁 Project Structure\n\n```\ntech-news-digest/\n├── generate_digest.py          # Main script\n├── .github/\n│   └── workflows/\n│       └── tech-news.yml      # GitHub Actions workflow\n├── news_digests/              # Generated digest files\n│   ├── digest_2024-01-15_14-30.txt\n│   ├── digest_2024-01-15_02-30.txt\n│   └── ...\n├── requirements.txt           # Python dependencies\n├── README.md                  # This file\n├── .gitignore                # Git ignore rules\n└── .env.example              # Environment template\n```\n\n## 🔧 Advanced Usage\n\n### Custom Error Handling\n\nThe script includes comprehensive error handling:\n\n```python\n# Automatic fallback chain:\nRSS Feeds → Web Scraping → Graceful Error Messages\n\n# Exit codes:\n# 0: Success\n# 1: Critical error (API key missing, file write failure, etc.)\n```\n\n### Integration with Other Tools\n\n```bash\n# Pipe output to other tools\npython generate_digest.py \u003e daily_digest.txt\n\n# Run with custom timestamp\npython generate_digest.py \u0026\u0026 echo \"Digest generated at $(date)\"\n\n# Integration with cron (alternative to GitHub Actions)\n0 */12 * * * cd /path/to/tech-news-digest \u0026\u0026 python generate_digest.py\n```\n\n### API Usage Optimization\n\nMonitor your OpenRouter usage:\n\n```python\n# The script uses these parameters for cost optimization:\nmax_tokens=1024        # Reasonable limit for summaries\ntemperature=0.3        # Consistent, focused output\nmodel=\"gemini-2.5-flash\"  # Cost-effective choice\n```\n\n## 🐛 Troubleshooting\n\n### Common Issues \u0026 Solutions\n\n| Issue | Symptoms | Solution |\n|-------|----------|----------|\n| **Missing API Key** | `OPENROUTER_API_KEY environment variable not set` | Set environment variable or add to GitHub secrets |\n| **Network Issues** | `Unable to fetch current tech news` | Check internet connection, RSS feeds may be temporarily down |\n| **API Quota** | `API-related error occurred` | Check OpenRouter billing and quota limits |\n| **File Permissions** | `Error creating output directory` | Ensure write permissions in project directory |\n| **GitHub Actions Failure** | Workflow shows red X | Check Actions logs, verify secrets are set |\n\n### Debug Mode\n\nEnable detailed logging by modifying the script:\n\n```python\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n\n# Add this at the start of generate_digest.py\n```\n\n### Manual Testing\n\nTest individual components:\n\n```bash\n# Test RSS feed access\npython -c \"import feedparser; print(len(feedparser.parse('https://www.theverge.com/rss/index.xml').entries))\"\n\n# Test OpenRouter connection\npython -c \"import openai; client = openai.OpenAI(base_url='https://openrouter.ai/api/v1', api_key='your-key'); print('Connection OK')\"\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Here's how to help:\n\n### Development Setup\n\n```bash\ngit clone \u003cyour-fork\u003e\ncd tech-news-digest\npython -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\npip install pytest black flake8  # Development tools\n```\n\n### Contribution Guidelines\n\n1. **Fork** the repository\n2. **Create** a feature branch: `git checkout -b feature/amazing-feature`\n3. **Test** your changes thoroughly\n4. **Format** code: `black generate_digest.py`\n5. **Lint** code: `flake8 generate_digest.py`\n6. **Commit** changes: `git commit -m 'Add amazing feature'`\n7. **Push** to branch: `git push origin feature/amazing-feature`\n8. **Submit** a Pull Request\n\n### Ideas for Contributions\n\n- 📰 Add new news sources\n- 🎨 Improve summary formatting\n- 🔧 Add configuration file support\n- 📊 Add analytics/statistics\n- 🌐 Add internationalization\n- 📱 Create web interface\n- 🔔 Add notification systems\n\n## 📊 Performance \u0026 Costs\n\n### Typical Usage\n\n- **Runtime**: 30-60 seconds per execution\n- **API calls**: 1 per run (batch processing)\n- **Storage**: ~2-5KB per digest file\n- **Bandwidth**: ~100-500KB per run\n\n### OpenRouter Costs (Approximate)\n\n- **Gemini 2.5 Flash**: $0.001-0.002 per digest\n- **Monthly cost (2x daily)**: ~$0.06-0.12\n- **Annual cost**: ~$0.70-1.44\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for more information.\n\n## 🙏 Acknowledgments \u0026 Credits\n\n- **🤖 AI Provider**: [OpenRouter](https://openrouter.ai/) \u0026 Google Gemini\n- **📰 News Sources**: The Verge, TechCrunch, CNET, Ars Technica, Engadget\n- **⚡ Automation**: GitHub Actions\n- **🐍 Libraries**: \n  - [OpenAI Python Client](https://github.com/openai/openai-python)\n  - [feedparser](https://github.com/kurtmckee/feedparser)\n  - [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/)\n  - [Requests](https://requests.readthedocs.io/)\n\n## 📞 Support \u0026 Contact\n\n- **Issues**: [GitHub Issues](../../issues)\n- **Discussions**: [GitHub Discussions](../../discussions)\n- **Documentation**: This README and inline code comments\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4uffin%2Fauto-news-aggregator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F4uffin%2Fauto-news-aggregator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4uffin%2Fauto-news-aggregator/lists"}