{"id":30348883,"url":"https://github.com/ricoledan/feeder","last_synced_at":"2025-08-18T19:14:43.510Z","repository":{"id":299937201,"uuid":"1004652753","full_name":"Ricoledan/feeder","owner":"Ricoledan","description":"📄 A powerful command-line tool to extract articles from your Feedly feeds with flexible filtering, date ranges, and export options.","archived":false,"fork":false,"pushed_at":"2025-06-19T02:57:14.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-19T03:28:58.169Z","etag":null,"topics":[],"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/Ricoledan.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2025-06-19T01:15:00.000Z","updated_at":"2025-06-19T02:57:18.000Z","dependencies_parsed_at":"2025-06-19T03:30:09.140Z","dependency_job_id":"b33a16a5-145a-48f5-9c37-c6212a860b03","html_url":"https://github.com/Ricoledan/feeder","commit_stats":null,"previous_names":["ricoledan/feedly-article-extractor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ricoledan/feeder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ricoledan%2Ffeeder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ricoledan%2Ffeeder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ricoledan%2Ffeeder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ricoledan%2Ffeeder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ricoledan","download_url":"https://codeload.github.com/Ricoledan/feeder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ricoledan%2Ffeeder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271044696,"owners_count":24690009,"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-08-18T02:00:08.743Z","response_time":89,"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":[],"created_at":"2025-08-18T19:14:40.488Z","updated_at":"2025-08-18T19:14:43.495Z","avatar_url":"https://github.com/Ricoledan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Feeder\n\nA powerful command-line tool to extract articles from your Feedly feeds with flexible filtering, date ranges, and export options.\n\n## Features\n\n- **Flexible Date Ranges**: Extract articles from the past N days or specific date ranges\n- **Category Filtering**: Filter by specific Feedly categories/folders\n- **Read Status**: Option to fetch only unread articles\n- **Article Limits**: Set maximum number of articles to extract\n- **Multiple Formats**: Export to CSV, JSON, or plain text URLs\n- **CLI Interface**: Full command-line interface with helpful options\n- **Secure**: Uses environment variables for API tokens\n- **Progressive Saving**: Articles are saved as they're fetched (no data loss on interruption)\n- **Modular Architecture**: Clean, maintainable code structure\n\n## Installation\n\n### Option 1: Install as Package (Recommended)\n```bash\n# Clone the repository\ngit clone https://github.com/ricoledan/feeder.git\ncd feeder\n\n# Install the package\npip install -e .\n\n# Use via CLI\nfeeder --help\n```\n\n### Option 2: Manual Setup\n```bash\n# Install dependencies\npip install -r requirements.txt\n\n# Use directly\npython feedly_extractor.py --help\n```\n\n## Configuration\n\n1. **Get Your Feedly Access Token**\n   - Go to [https://feedly.com/v3/auth/dev](https://feedly.com/v3/auth/dev)\n   - Log in to your Feedly account\n   - Copy the access token that appears\n\n2. **Configure Environment Variables**\n   ```bash\n   # Copy template (if it exists)\n   cp .env.template .env\n   \n   # Or create .env file manually\n   echo \"FEEDLY_ACCESS_TOKEN=your_actual_token_here\" \u003e .env\n   ```\n\n## Usage\n\n### Working with Feedly Folders\n\nIf you've organized your feeds into folders in Feedly, you can fetch articles from specific folders:\n\n```bash\n# List all your Feedly folders\nfeeder --list-categories\n\n# Fetch from a specific folder (e.g., \"Tech News\")  \nfeeder --category \"Tech News\" --days 7\n\n# Fetch from a folder with partial name matching\nfeeder --category \"tech\" --days 7\n```\n\n### Basic Examples\n\n```bash\n# Extract articles from the past week (default)\nfeeder\n\n# Extract articles from the past 3 days\nfeeder --days 3\n\n# Extract only unread articles\nfeeder --unread-only\n\n# Extract from a specific Feedly folder/category\nfeeder --category \"Tech News\"\n\n# List all your Feedly folders\nfeeder --list-categories\n\n# Limit to 100 articles\nfeeder --max-articles 100\n```\n\n### Date Range Examples\n\n```bash\n# Extract articles from a specific date range\nfeeder --start-date 2024-01-01 --end-date 2024-01-07\n\n# Extract articles from January 1st to now\nfeeder --start-date 2024-01-01\n\n# Extract articles from the past month\nfeeder --days 30\n```\n\n### Output Format Examples\n\n```bash\n# Save only as CSV\nfeeder --format csv\n\n# Save only as JSON\nfeeder --format json\n\n# Save only URLs as text file\nfeeder --format urls\n\n# Custom output filename\nfeeder --output my_articles\n```\n\n### Advanced Examples\n\n```bash\n# Quiet mode (no progress output)\nfeeder --quiet\n\n# List available categories\nfeeder --list-categories\n\n# Complex query: Tech articles from past 2 weeks, unread only, max 50\nfeeder --category \"Tech\" --days 14 --unread-only --max-articles 50 --output tech_backlog\n```\n\n## Command Line Options\n\n| Option | Short | Description |\n|--------|-------|-------------|\n| `--days` | `-d` | Number of days to look back (default: 7) |\n| `--start-date` | `-s` | Start date in YYYY-MM-DD format |\n| `--end-date` | `-e` | End date in YYYY-MM-DD format |\n| `--category` | `-c` | Filter by Feedly folder/category name (partial match) |\n| `--unread-only` | `-u` | Only fetch unread articles |\n| `--max-articles` | `-m` | Maximum number of articles to fetch |\n| `--format` | `-f` | Output format: all, csv, json, urls (default: all) |\n| `--output` | `-o` | Output filename prefix (without extension) |\n| `--quiet` | `-q` | Suppress progress output |\n| `--list-categories` | | List your Feedly folders and exit |\n| `--help` | `-h` | Show help message |\n\n## Output Files\n\nThe tool generates the following files based on your format selection:\n\n- **CSV**: `feedly_articles_YYYYMMDD_HHMMSS.csv` - Full article data in spreadsheet format\n- **JSON**: `feedly_articles_YYYYMMDD_HHMMSS.json` - Complete article data in JSON format\n- **URLs**: `feedly_articles_YYYYMMDD_HHMMSS_urls.txt` - Plain text file with one URL per line\n\n### CSV Columns\n\nThe CSV export includes these columns:\n\n- `id` - Unique article identifier\n- `title` - Article title\n- `url` - Article URL\n- `author` - Article author\n- `published_date` - When the article was published\n- `crawled_date` - When Feedly discovered the article\n- `source_title` - Name of the source feed\n- `source_url` - Homepage of the source\n- `summary` - Article summary/excerpt\n- `content` - Full article content (if available)\n- `language` - Article language\n- `keywords` - Associated keywords\n- `categories` - Feedly categories\n- `tags` - User-applied tags\n- `read` - Whether you've read the article\n- `word_count` - Approximate word count\n\n## Progressive Saving\n\nBy default, articles are saved **progressively** as they're fetched, which means:\n\n- ✅ **No data loss** if the script is interrupted\n- ✅ **Memory efficient** for large fetches  \n- ✅ **Real-time progress** tracking\n\n```bash\n# Articles are saved in batches as they're fetched (default behavior)\nfeeder --days 30 --category \"Tech\"\n\n# Disable progressive saving (save all at once at the end)\nfeeder --days 7 --no-progressive-save\n```\n\n**Progressive saving output:**\n```\n📄 Fetching page 1...\n✅ Found 250 articles on page 1\n💾 Saved batch: 250 articles (total saved: 250)\n📄 Fetching page 2...\n✅ Found 180 articles on page 2  \n💾 Saved batch: 180 articles (total saved: 430)\n✅ Progressive save complete: 430 articles saved\n📄 CSV: feedly_articles_20241219_143022.csv\n📄 JSON: feedly_articles_20241219_143022.json\n📄 URLs: feedly_articles_20241219_143022_urls.txt\n```\n\n## Error Handling\n\n### Common Issues\n\n**Authentication Error (401)**\n```\n❌ Authentication failed. Check your access token.\n```\n- Verify your token in the `.env` file\n- Get a new token from [https://feedly.com/v3/auth/dev](https://feedly.com/v3/auth/dev)\n\n**Category Not Found**\n```\n❌ Category 'Tech News' not found. Available categories:\n   - Technology\n   - News\n   - Business\n```\n- Use `--list-categories` to see available options\n- Category matching is case-insensitive and supports partial matches\n\n**No Articles Found**\n```\n📭 No articles found for the specified criteria\n```\n- Try expanding your date range with `--days`\n- Remove filters like `--unread-only` or `--category`\n- Check if you have any articles in your Feedly\n\n## API Rate Limits\n\nThe Feedly API has rate limits. The script includes small delays between requests to be respectful. If you encounter rate limiting:\n\n- Use smaller date ranges\n- Use `--max-articles` to limit the number of requests\n- Wait a few minutes before retrying\n\n## Troubleshooting\n\n### Installation Issues\n\n```bash\n# If you have permission issues\npip install --user -r requirements.txt\n\n# If you're using conda\nconda install requests python-dotenv\n\n# If you're using Python 3.12+ and have issues\npip install --upgrade requests python-dotenv\n```\n\n### Runtime Issues\n\n```bash\n# Test your token\npython -c \"import os; from dotenv import load_dotenv; load_dotenv(); print('Token loaded:', bool(os.getenv('FEEDLY_ACCESS_TOKEN')))\"\n\n# Check available categories\nfeeder --list-categories\n\n# Run with debug info\nfeeder --days 1 --max-articles 5\n```\n\n## Documentation\n\n- 📖 **[Usage Examples](docs/EXAMPLES.md)** - Comprehensive examples and workflows\n- 🏗️ **[Architecture Guide](docs/ARCHITECTURE.md)** - Technical details and design decisions\n\n## Contributing\n\nThis project uses a modular architecture for easy maintenance and extension. See the [Architecture Guide](docs/ARCHITECTURE.md) for details on the codebase structure.\n\n## License\n\nMIT License - feel free to use and modify as needed.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricoledan%2Ffeeder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fricoledan%2Ffeeder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricoledan%2Ffeeder/lists"}