Add basic search page
This commit is contained in:
parent
49e81ef0e8
commit
104a36deea
3 changed files with 40 additions and 11 deletions
37
main.py
37
main.py
|
@ -1,4 +1,4 @@
|
||||||
from quart import Quart, request, render_template
|
from quart import Quart, request, render_template, redirect
|
||||||
import peertube
|
import peertube
|
||||||
|
|
||||||
# Wrapper, only containing information that's important for us, and in some cases provides simplified ways to get information
|
# Wrapper, only containing information that's important for us, and in some cases provides simplified ways to get information
|
||||||
|
@ -19,8 +19,6 @@ class VideoWrapper:
|
||||||
self.likes = a["likes"]
|
self.likes = a["likes"]
|
||||||
self.dislikes = a["dislikes"]
|
self.dislikes = a["dislikes"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.resolutions = []
|
self.resolutions = []
|
||||||
self.video = None
|
self.video = None
|
||||||
|
|
||||||
|
@ -36,20 +34,36 @@ class VideoWrapper:
|
||||||
|
|
||||||
app = Quart(__name__)
|
app = Quart(__name__)
|
||||||
|
|
||||||
@app.route('/')
|
|
||||||
|
@app.route("/")
|
||||||
async def main():
|
async def main():
|
||||||
return await render_template('index.html')
|
return await render_template("index.html")
|
||||||
|
|
||||||
@app.route('/<string:domain>')
|
|
||||||
|
@app.route("/<string:domain>/")
|
||||||
async def domain_main(domain):
|
async def domain_main(domain):
|
||||||
return await render_template('domain_index.html')
|
return await render_template(
|
||||||
|
"domain_index.html",
|
||||||
|
domain=domain,
|
||||||
|
instance_name="placeholder",
|
||||||
|
#instance_name=peertube.get_instance_name(domain),
|
||||||
|
)
|
||||||
|
|
||||||
@app.route('/<string:domain>/search/<string:term>')
|
@app.route('/<string:domain>/search', methods=["POST"])
|
||||||
|
async def search_redirect(domain):
|
||||||
|
query = (await request.form)["query"]
|
||||||
|
return redirect("/" + domain + "/search/" + query)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/<string:domain>/search/<string:term>")
|
||||||
async def search(domain, term):
|
async def search(domain, term):
|
||||||
amount, results = peertube.search(domain, term)
|
amount, results = peertube.search(domain, term)
|
||||||
return await render_template('search_results.html', domain=domain, amount=amount, results=results)
|
return await render_template(
|
||||||
|
"search_results.html", domain=domain, amount=amount, results=results
|
||||||
|
)
|
||||||
|
|
||||||
@app.route('/<string:domain>/watch/<string:id>/')
|
|
||||||
|
@app.route("/<string:domain>/watch/<string:id>/")
|
||||||
async def video(domain, id):
|
async def video(domain, id):
|
||||||
data = peertube.video(domain, id)
|
data = peertube.video(domain, id)
|
||||||
quality = request.args.get("quality")
|
quality = request.args.get("quality")
|
||||||
|
@ -57,7 +71,8 @@ async def video(domain, id):
|
||||||
quality = "best"
|
quality = "best"
|
||||||
vid = VideoWrapper(data, quality)
|
vid = VideoWrapper(data, quality)
|
||||||
|
|
||||||
return await render_template('video.html', video=vid, quality=quality)
|
return await render_template("video.html", video=vid, quality=quality)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run()
|
app.run()
|
||||||
|
|
|
@ -2,6 +2,10 @@ from bs4 import BeautifulSoup
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
def get_instance_name(domain):
|
||||||
|
soup = BeautifulSoup(requests.get("https://" + domain).text)
|
||||||
|
return soup.find('span', class_="instance-name").text
|
||||||
|
|
||||||
def video(domain, id):
|
def video(domain, id):
|
||||||
video_url = "https://" + domain + "/api/v1/videos/" + id
|
video_url = "https://" + domain + "/api/v1/videos/" + id
|
||||||
video_object = json.loads(requests.get(video_url).text)
|
video_object = json.loads(requests.get(video_url).text)
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<b>{{ instance_name }}</b>
|
||||||
|
<form action="/{{ domain }}/search" method="POST">
|
||||||
|
<input type="text" name="query" id="query"/>
|
||||||
|
<button type="submit">Search</button>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue