implement tag and genre search closes #1

This commit is contained in:
2025-05-04 16:59:33 +02:00
parent 01b3246533
commit ae7a3a1fad
3 changed files with 216 additions and 62 deletions

View File

@@ -2,23 +2,42 @@ from quart import Quart, render_template, request, jsonify
import httpx
from anilistapi.queries.manga import REQUESTS_QUERY, TAGS_QUERY, GENRES_QUERY
from anilistapi.schemas.manga import Manga
from komconfig import KomConfig
from komcache import KomCache
from komgapi import komgapi as KOMGAPI
app = Quart(__name__)
cache = KomCache()
cache.create_table(
"CREATE TABLE IF NOT EXISTS manga_requests (id INTEGER PRIMARY KEY, manga_id INTEGER, manga_title TEXT)"
"CREATE TABLE IF NOT EXISTS manga_requests (id INTEGER PRIMARY KEY, manga_id INTEGER, grabbed BOOLEAN DEFAULT 0)"
)
settings = KomConfig()
async def fetch_data(query):
# Simulated API response
komga = KOMGAPI(
url=settings.komga.url,
username=settings.komga.user,
password=settings.komga.password,
)
komga_books = komga.bookList()
async def fetch_data(data):
async with httpx.AsyncClient() as client:
try:
variables = {"search": data["query"]}
if len(data["genres"]) > 0:
variables["genres"] = data["genres"]
if len(data["tags"]) > 0:
variables["tags"] = data["tags"]
print(data["query"], variables)
response = await client.post(
f"https://graphql.anilist.co",
json={"query": REQUESTS_QUERY, "variables": {"search": query}},
"https://graphql.anilist.co",
json={
"query": REQUESTS_QUERY,
"variables": variables,
},
)
response.raise_for_status()
data = response.json()
@@ -30,7 +49,9 @@ async def fetch_data(query):
results.append(
{
"id": manga.id,
"title": manga.title.romaji if manga.title else "Untitled",
"title": manga.title.english
if manga.title.english
else manga.title.romaji,
"image": manga.coverImage.get("large")
if manga.coverImage
else "https://demofree.sirv.com/nope-not-here.jpg",
@@ -46,8 +67,11 @@ async def fetch_data(query):
)
return results
except httpx.RequestError as e:
print(f"An error occurred while requesting data: {e}")
return []
except Exception as e:
print(f"Error fetching data: {e}")
print(f"Unexpected error: {e}")
return []
@@ -86,18 +110,19 @@ async def get_tags():
return jsonify([])
@app.route("/", methods=["GET", "POST"])
@app.route("/search", methods=["POST"])
async def search():
data = await request.get_json()
print(data)
results = await fetch_data(data)
if not results:
return jsonify({"error": "No results found"}), 404
return jsonify(results)
@app.route("/", methods=["GET"])
async def index():
query = None
results = []
if request.method == "POST":
form = await request.form
query = form.get("query")
if query:
results = await fetch_data(query)
return await render_template("index.html", results=results)
return await render_template("index.html")
@app.route("/request", methods=["POST"])
@@ -117,4 +142,4 @@ async def log_request():
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=5000)
app.run(debug=True, host="0.0.0.0", port=5001)