From a30df45ac0b2197cd3e4c6a3e3cd03a5a4a1676d Mon Sep 17 00:00:00 2001 From: alexmercerind Date: Sat, 21 Nov 2020 21:53:17 +0530 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8C=20Added=20optional=20parameters=20?= =?UTF-8?q?for=20language=20&=20region=20of=20results?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- youtubesearchpython/__requesthandler.py | 13 +++++++++---- youtubesearchpython/playlist__search.py | 10 ++++++++-- youtubesearchpython/videos__search.py | 12 +++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/youtubesearchpython/__requesthandler.py b/youtubesearchpython/__requesthandler.py index 5968cff..b898c73 100644 --- a/youtubesearchpython/__requesthandler.py +++ b/youtubesearchpython/__requesthandler.py @@ -1,9 +1,9 @@ import sys if sys.version_info[0] == 2: - from urllib import urlencode, urlopen + from urllib import urlencode, urlopen, Request else: - from urllib.request import urlopen + from urllib.request import urlopen, Request from urllib.parse import urlencode @@ -13,9 +13,14 @@ def request(self): query = urlencode({ "search_query": self.keyword, "page": self.offset, - "sp": self.searchPreferences + "sp": self.searchPreferences, + "persist_gl": 1, + "gl": self.region }) - request = "https://www.youtube.com/results" + "?" + query + request = Request( + "https://www.youtube.com/results" + "?" + query, + headers = {"Accept-Language": f"{self.language},en;q=0.9"} + ) response = urlopen(request).read() self.page = response.decode('utf_8') diff --git a/youtubesearchpython/playlist__search.py b/youtubesearchpython/playlist__search.py index 1a2bee5..d90d301 100644 --- a/youtubesearchpython/playlist__search.py +++ b/youtubesearchpython/playlist__search.py @@ -14,8 +14,12 @@ class SearchPlaylists(RequestHandler, ScriptHandler): Offset for result pages on YouTube. Defaults to 1. mode : str Search result mode. Can be 'json', 'dict' or 'list'. - maxResults : int, optional + max_results : int, optional Maximum number of playlist results. Defaults to 20. + language: str, optional + Can be used to get results in particular language. Defaults to 'en-US' + region: str, optional + Can be used to get results according to particular region. Defaults to 'US'. Methods ------- result() @@ -24,13 +28,15 @@ class SearchPlaylists(RequestHandler, ScriptHandler): networkError = False validResponse = False - def __init__(self, keyword, offset = 1, mode = "json", max_results = 20): + def __init__(self, keyword, offset = 1, mode = "json", max_results = 20, language = "en-US", region = "US"): self.offset = offset self.mode = mode self.keyword = keyword self.max_results = max_results self.searchPreferences = "EgIQAw%3D%3D" + self.language = language + self.region = region self.main() def main(self): diff --git a/youtubesearchpython/videos__search.py b/youtubesearchpython/videos__search.py index e639541..71c8608 100644 --- a/youtubesearchpython/videos__search.py +++ b/youtubesearchpython/videos__search.py @@ -16,8 +16,12 @@ class SearchVideos(RequestHandler, PageHandler, ScriptHandler): Offset for result pages on YouTube. Defaults to 1. mode : str Search result mode. Can be 'json', 'dict' or 'list'. - maxResults : int, optional - Maximum number of video results. Defaults to 20. + max_results : int, optional + Maximum number of playlist results. Defaults to 20. + language: str, optional + Can be used to get results in particular language. Defaults to 'en-US' + region: str, optional + Can be used to get results according to particular region. Defaults to 'US'. Methods ------- result() @@ -26,12 +30,14 @@ class SearchVideos(RequestHandler, PageHandler, ScriptHandler): networkError = False validResponse = False - def __init__(self, keyword, offset = 1, mode = "json", max_results = 20): + def __init__(self, keyword, offset = 1, mode = "json", max_results = 20, language = "en-US", region = "US"): self.offset = offset self.mode = mode self.keyword = keyword self.max_results = max_results self.searchPreferences = "EgIQAQ%3D%3D" + self.language = language + self.region = region self.main() def main(self):