|
1 | 1 | # physics-rss-aggregator |
| 2 | + |
2 | 3 | A production-ready RSS/Atom aggregator for physics research topics (ion traps, quantum networks, cavity QED). Combines arXiv search with journal feeds. |
| 4 | + |
| 5 | +## 🚀 Live Demo |
| 6 | + |
| 7 | +Once deployed, your application will be accessible at your Render URL (e.g., `https://your-app-name.onrender.com`). |
| 8 | + |
| 9 | +## Features |
| 10 | + |
| 11 | +- **FastAPI Backend**: High-performance async web framework |
| 12 | +- **arXiv Integration**: Search and aggregate physics research papers |
| 13 | +- **RSS/Atom Feeds**: Aggregate content from multiple journal feeds |
| 14 | +- **Caching**: TTL-based caching for improved performance |
| 15 | +- **Responsive UI**: Clean web interface for browsing aggregated content |
| 16 | +- **Automatic Deployment**: CI/CD pipeline with GitHub Actions |
| 17 | + |
| 18 | +## 🌐 Deployment Setup |
| 19 | + |
| 20 | +### Prerequisites |
| 21 | + |
| 22 | +- GitHub account |
| 23 | +- Render account (free tier available at https://render.com) |
| 24 | + |
| 25 | +### Step 1: Fork the Repository |
| 26 | + |
| 27 | +This repository is already forked and ready for deployment! |
| 28 | + |
| 29 | +### Step 2: Set Up Render Web Service |
| 30 | + |
| 31 | +1. **Create a Render Account**: |
| 32 | + - Go to https://render.com and sign up |
| 33 | + - Connect your GitHub account |
| 34 | + |
| 35 | +2. **Create a New Web Service**: |
| 36 | + - Click "New +" → "Web Service" |
| 37 | + - Connect this GitHub repository |
| 38 | + - Configure the service: |
| 39 | + - **Name**: `physics-rss-aggregator` (or your preferred name) |
| 40 | + - **Environment**: `Python 3` |
| 41 | + - **Build Command**: `pip install -r requirements.txt` |
| 42 | + - **Start Command**: `uvicorn app:app --host 0.0.0.0 --port $PORT` |
| 43 | + - **Instance Type**: Free (or choose based on your needs) |
| 44 | + |
| 45 | +3. **Deploy**: |
| 46 | + - Click "Create Web Service" |
| 47 | + - Render will automatically deploy your application |
| 48 | + - Note your app URL (e.g., `https://physics-rss-aggregator.onrender.com`) |
| 49 | + |
| 50 | +### Step 3: Enable Automatic Deployment with GitHub Actions (Optional) |
| 51 | + |
| 52 | +For automatic deployment on every push to main: |
| 53 | + |
| 54 | +1. **Get Your Render Deploy Hook**: |
| 55 | + - In Render dashboard, go to your web service |
| 56 | + - Navigate to "Settings" → "Deploy Hook" |
| 57 | + - Copy the deploy hook URL |
| 58 | + |
| 59 | +2. **Add Deploy Hook to GitHub Secrets**: |
| 60 | + - Go to your GitHub repository |
| 61 | + - Navigate to "Settings" → "Secrets and variables" → "Actions" |
| 62 | + - Click "New repository secret" |
| 63 | + - Name: `RENDER_DEPLOY_HOOK` |
| 64 | + - Value: Paste your Render deploy hook URL |
| 65 | + - Click "Add secret" |
| 66 | + |
| 67 | +3. **Verify Workflow**: |
| 68 | + - The GitHub Actions workflow (`.github/workflows/deploy.yml`) is already configured |
| 69 | + - Push any changes to the `main` branch to trigger automatic deployment |
| 70 | + - Check the "Actions" tab in GitHub to monitor deployment status |
| 71 | + |
| 72 | +### Alternative: Deploy with render.yaml |
| 73 | + |
| 74 | +This repository includes a `render.yaml` file for infrastructure-as-code deployment: |
| 75 | + |
| 76 | +1. Go to your Render dashboard |
| 77 | +2. Click "New +" → "Blueprint" |
| 78 | +3. Connect this repository |
| 79 | +4. Render will automatically detect the `render.yaml` and deploy accordingly |
| 80 | + |
| 81 | +## 🛠️ Local Development |
| 82 | + |
| 83 | +### Prerequisites |
| 84 | + |
| 85 | +- Python 3.11 or higher |
| 86 | +- pip |
| 87 | + |
| 88 | +### Installation |
| 89 | + |
| 90 | +```bash |
| 91 | +# Clone the repository |
| 92 | +git clone https://github.com/qiskit-advocate/physics-rss-aggregator.git |
| 93 | +cd physics-rss-aggregator |
| 94 | + |
| 95 | +# Install dependencies |
| 96 | +pip install -r requirements.txt |
| 97 | + |
| 98 | +# Run the application |
| 99 | +uvicorn app:app --reload |
| 100 | +``` |
| 101 | + |
| 102 | +The application will be available at http://localhost:8000 |
| 103 | + |
| 104 | +### Configuration |
| 105 | + |
| 106 | +Edit `feeds.yaml` to customize RSS feeds and arXiv search parameters: |
| 107 | + |
| 108 | +```yaml |
| 109 | +normal_feeds: |
| 110 | + - https://example.com/feed.xml |
| 111 | + - https://another-feed.com/rss |
| 112 | + |
| 113 | +arxiv: |
| 114 | + max_results: 75 |
| 115 | + sort_by: submittedDate |
| 116 | + sort_order: descending |
| 117 | +``` |
| 118 | +
|
| 119 | +## 📚 API Documentation |
| 120 | +
|
| 121 | +Once deployed, visit: |
| 122 | +- Interactive API docs: `https://your-app-url/docs` |
| 123 | +- Alternative API docs: `https://your-app-url/redoc` |
| 124 | + |
| 125 | +### Endpoints |
| 126 | + |
| 127 | +- `GET /` - Web interface |
| 128 | +- `GET /api/search?topic=quantum+computing` - Search and aggregate feeds |
| 129 | + |
| 130 | +## 🔄 CI/CD Pipeline |
| 131 | + |
| 132 | +This repository includes a GitHub Actions workflow that: |
| 133 | + |
| 134 | +1. ✅ Checks out code on every push to main |
| 135 | +2. ✅ Sets up Python 3.11 environment |
| 136 | +3. ✅ Installs dependencies |
| 137 | +4. ✅ Runs basic import tests |
| 138 | +5. ✅ Triggers Render deployment (if deploy hook is configured) |
| 139 | + |
| 140 | +## 📝 Project Structure |
| 141 | + |
| 142 | +``` |
| 143 | +physics-rss-aggregator/ |
| 144 | +├── .github/ |
| 145 | +│ └── workflows/ |
| 146 | +│ └── deploy.yml # GitHub Actions workflow |
| 147 | +├── templates/ |
| 148 | +│ └── index.html # Web UI template |
| 149 | +├── app.py # FastAPI application |
| 150 | +├── feeds.yaml # RSS feed configuration |
| 151 | +├── feeds.example.yaml # Example configuration |
| 152 | +├── requirements.txt # Python dependencies |
| 153 | +├── render.yaml # Render deployment config |
| 154 | +├── Dockerfile # Docker configuration |
| 155 | +└── README.md # This file |
| 156 | +``` |
| 157 | +
|
| 158 | +## 🔧 Technologies Used |
| 159 | +
|
| 160 | +- **FastAPI**: Modern Python web framework |
| 161 | +- **uvicorn**: ASGI server |
| 162 | +- **aiohttp**: Async HTTP client |
| 163 | +- **feedparser**: RSS/Atom feed parser |
| 164 | +- **Jinja2**: Template engine |
| 165 | +- **PyYAML**: YAML configuration parser |
| 166 | +
|
| 167 | +## 📦 Dependencies |
| 168 | +
|
| 169 | +All dependencies are listed in `requirements.txt` and automatically installed during deployment. |
| 170 | +
|
| 171 | +## 🌟 Features to Add |
| 172 | +
|
| 173 | +Potential enhancements: |
| 174 | +- User authentication |
| 175 | +- Saved searches and preferences |
| 176 | +- Email notifications for new papers |
| 177 | +- Advanced filtering options |
| 178 | +- Export to BibTeX/RIS formats |
| 179 | +
|
| 180 | +## 🤝 Contributing |
| 181 | +
|
| 182 | +Feel free to fork this repository and submit pull requests with improvements! |
| 183 | +
|
| 184 | +## 📄 License |
| 185 | +
|
| 186 | +This project is open source and available for educational and research purposes. |
| 187 | +
|
| 188 | +## 🆘 Troubleshooting |
| 189 | +
|
| 190 | +### Deployment Issues |
| 191 | +
|
| 192 | +- **Build fails**: Check Python version compatibility (requires 3.11+) |
| 193 | +- **App doesn't start**: Verify all dependencies in `requirements.txt` |
| 194 | +- **Timeout errors**: Consider upgrading to a paid Render plan for better performance |
| 195 | +
|
| 196 | +### GitHub Actions Issues |
| 197 | +
|
| 198 | +- **Workflow doesn't trigger**: Ensure the workflow file is in `.github/workflows/` |
| 199 | +- **Deploy hook fails**: Verify the `RENDER_DEPLOY_HOOK` secret is correctly set |
| 200 | +
|
| 201 | +## 📧 Support |
| 202 | +
|
| 203 | +For issues or questions, please open an issue on GitHub. |
| 204 | +
|
| 205 | +--- |
| 206 | +
|
| 207 | +**Note**: This application is configured for automatic deployment on Render. The free tier may have cold start delays (up to 30 seconds) after periods of inactivity. |
0 commit comments