aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/search.py
diff options
context:
space:
mode:
Diffstat (limited to 'youtube/search.py')
-rw-r--r--youtube/search.py61
1 files changed, 42 insertions, 19 deletions
diff --git a/youtube/search.py b/youtube/search.py
index 81a69f2..d586c62 100644
--- a/youtube/search.py
+++ b/youtube/search.py
@@ -8,6 +8,7 @@ import base64
import mimetypes
from flask import request
import flask
+import os
# Sort: 1
# Upload date: 2
@@ -57,15 +58,15 @@ def get_search_json(query, page, autocorrect, sort, filters):
return info
+@yt_app.route('/results')
@yt_app.route('/search')
def get_search_page():
- if len(request.args) == 0:
- return flask.render_template('base.html', title="Search")
+ query = request.args.get('search_query') or request.args.get('query')
+ if query is None:
+ return flask.render_template('home.html', title='Search')
+ elif query.startswith('https://www.youtube.com') or query.startswith('https://www.youtu.be'):
+ return flask.redirect(f'/{query}')
- if 'query' not in request.args:
- abort(400)
-
- query = request.args.get("query")
page = request.args.get("page", "1")
autocorrect = int(request.args.get("autocorrect", "1"))
sort = int(request.args.get("sort", "0"))
@@ -76,22 +77,44 @@ def get_search_page():
polymer_json = get_search_json(query, page, autocorrect, sort, filters)
search_info = yt_data_extract.extract_search_info(polymer_json)
- for item_info in search_info['items']:
- yt_data_extract.prefix_urls(item_info)
- yt_data_extract.add_extra_html_info(item_info)
+ if search_info['error']:
+ return flask.render_template('error.html', error_message=search_info['error'])
+
+ for extract_item_info in search_info['items']:
+ util.prefix_urls(extract_item_info)
+ util.add_extra_html_info(extract_item_info)
- return flask.render_template('search.html',
- header_playlist_names = local_playlist.get_playlist_names(),
- query = query,
- estimated_results = search_info['estimated_results'],
- estimated_pages = search_info['estimated_pages'],
- corrections = search_info['corrections'],
- results = search_info['items'],
- parameters_dictionary = request.args,
+ corrections = search_info['corrections']
+ if corrections['type'] == 'did_you_mean':
+ corrected_query_string = request.args.to_dict(flat=False)
+ corrected_query_string['search_query'] = [corrections['corrected_query']]
+ corrections['corrected_query_url'] = util.URL_ORIGIN + '/results?' + urllib.parse.urlencode(corrected_query_string, doseq=True)
+ elif corrections['type'] == 'showing_results_for':
+ no_autocorrect_query_string = request.args.to_dict(flat=False)
+ no_autocorrect_query_string['autocorrect'] = ['0']
+ no_autocorrect_query_url = util.URL_ORIGIN + '/results?' + urllib.parse.urlencode(no_autocorrect_query_string, doseq=True)
+ corrections['original_query_url'] = no_autocorrect_query_url
+
+ return flask.render_template(
+ 'search.html',
+ header_playlist_names=local_playlist.get_playlist_names(),
+ query=query,
+ estimated_results=search_info['estimated_results'],
+ estimated_pages=search_info['estimated_pages'],
+ corrections=search_info['corrections'],
+ results=search_info['items'],
+ parameters_dictionary=request.args,
)
+
@yt_app.route('/opensearch.xml')
def get_search_engine_xml():
- with open("youtube/opensearch.xml", 'rb') as f:
- content = f.read().replace(b'$port_number', str(settings.port_number).encode())
+ with open(os.path.join(settings.program_directory, 'youtube/opensearch.xml'), 'rb') as f:
+ if settings.app_public:
+ main_url = '%s' % settings.app_url
+ else:
+ main_url = '%s:%s' % (settings.app_url, settings.port_number)
+ content = f.read().replace(
+ b'$main_url', str(main_url).encode()
+ )
return flask.Response(content, mimetype='application/xml')