-
Notifications
You must be signed in to change notification settings - Fork 1
/
application.py
70 lines (55 loc) · 1.82 KB
/
application.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import json
from math import floor
from config import DEEPGRAM_API_KEY
from database import db_session
from deepgram import Deepgram
from flask import Flask, render_template, request, Response
from models import Podcast
application = Flask(__name__)
@application.route('/')
def index():
podcasts = Podcast.query.order_by(Podcast.remote_id).all()
return render_template("index.html", **{
"podcasts": podcasts
})
@application.route('/search')
def search():
query = request.args.get("query", "")
dg_client = Deepgram(DEEPGRAM_API_KEY)
# make search request to API
search_result = dg_client.parallel_search(query, **{
"tag": "podcast",
"snippet": True,
"group_Nmax": 100,
"object_Nmax": 1,
"object_Pmin": 0.8
})
# construct response to send back
result = []
for item in search_result["object_result"]:
if not item["N"]:
continue
# grab item from local database
local_item = Podcast.query.filter(
Podcast.remote_id == item["contentID"]).first()
result_item = {
"name": local_item.name,
"author": local_item.author,
"title": local_item.title,
"image": local_item.image,
"url": local_item.url
}
# format start time (add 2 seconds leading time)
start_time = floor(item["startTime"][0])
if start_time - 2 > 0:
result_item["start_time"] = start_time - 2
else:
result_item["start_time"] = start_time
# append to final result
result.append(result_item)
return Response(json.dumps({"result": result}), mimetype='text/json')
@application.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
if __name__ == "__main__":
application.run()