This commit is contained in:
mi
2025-11-06 22:41:30 +10:00
parent 7fdf724731
commit d1736fb0ef
2 changed files with 52 additions and 1 deletions

View File

@@ -224,6 +224,38 @@ For larger comic archives, consider replacing the `COMICS` list with a database:
- `/about` - About the comic and author
- `/static/feed.rss` - RSS feed
## API Endpoints
The app exposes a JSON API for programmatic access:
- **GET `/api/comics`** - Returns all comics as a JSON array
```json
[
{
"number": 1,
"title": "First Comic",
"filename": "comic-001.png",
"date": "2025-01-01",
"alt_text": "The very first comic",
"author_note": "This is where your comic journey begins!"
}
]
```
- **GET `/api/comics/<id>`** - Returns a specific comic as JSON
```json
{
"number": 1,
"title": "First Comic",
"filename": "comic-001.png",
"date": "2025-01-01",
"alt_text": "The very first comic",
"author_note": "This is where your comic journey begins!"
}
```
Returns 404 with `{"error": "Comic not found"}` if the comic doesn't exist.
## License
[Add your license here]

21
app.py
View File

@@ -1,5 +1,5 @@
import os
from flask import Flask, render_template, abort
from flask import Flask, render_template, abort, jsonify, request
from comics_data import COMICS
app = Flask(__name__)
@@ -59,9 +59,28 @@ def about():
return render_template('about.html', title='About')
@app.route('/api/comics')
def api_comics():
"""API endpoint - returns all comics as JSON"""
return jsonify(COMICS)
@app.route('/api/comics/<int:comic_id>')
def api_comic(comic_id):
"""API endpoint - returns a specific comic as JSON"""
comic = get_comic_by_number(comic_id)
if not comic:
return jsonify({'error': 'Comic not found'}), 404
return jsonify(comic)
@app.errorhandler(404)
def page_not_found(e):
"""404 error handler"""
# Return JSON for API requests
if request.path.startswith('/api/'):
return jsonify({'error': 'Not found'}), 404
# Return HTML for regular pages
return render_template('404.html', title='Page Not Found'), 404