import requests from flask import Blueprint, render_template, request #from ..common.common import * frontend = Blueprint('invidious', __name__, template_folder='templates', static_folder='static', static_url_path='/static/iv') # TODO: minimal implementation (invidio.us hardcoded, videos only, no optional_params) @frontend.route('/search') def feed(): #token = getattr(current_user, 'token', 'guest') q = request.args.get('q') page = int(request.args.get('page', 1)) provider = request.args.get('provider', 'invidio.us:443') """ sort_by: "relevance", "rating", "upload_date", "view_count" date: "hour", "today", "week", "month", "year" duration: "short", "long" type: "video", "playlist", "channel", "all", (default: video) features: "hd", "subtitles", "creative_commons", "3d", "live", "purchased", "4k", "360", "location", "hdr" (comma separated) region: ISO 3166 country code (default: "US") """ optional_params = { p: request.args.get(p) for p in ['sort_by', 'date', 'duration', 'type', 'features', 'region'] } if not q: return "no search query", 400 r = requests.get(f"https://invidio.us/api/v1/search", { 'q': q, 'page': page, # **optional_params, }) if not r.ok: return "error fetching search results", 502 # TODO: better # XXX: should check r.json if it really are search results (if other provider) # XXX: should transform invidious-json to our naming scheme return render_template('search.html.j2', rows=r.json(), query=q, page=page, optional_params=optional_params)