From f1b6351ae1bade2e323b7d2d603c0678e940651d Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sun, 16 Apr 2023 19:15:44 +0200 Subject: [PATCH] [fix] engine: google play movies Closes: https://github.com/searxng/searxng/pull/1746 Closes: https://github.com/searxng/searxng/issues/1599 Signed-off-by: Markus Heiser --- .../{google_play_apps.py => google_play.py} | 56 +++++++++++++++++-- searx/settings.yml | 21 ++----- 2 files changed, 55 insertions(+), 22 deletions(-) rename searx/engines/{google_play_apps.py => google_play.py} (57%) diff --git a/searx/engines/google_play_apps.py b/searx/engines/google_play.py similarity index 57% rename from searx/engines/google_play_apps.py rename to searx/engines/google_play.py index 6506a446a..45a3fdb69 100644 --- a/searx/engines/google_play_apps.py +++ b/searx/engines/google_play.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -""" - Google Play Apps +# lint: pylint +"""Google Play Apps & Google Play Movies """ from urllib.parse import urlencode @@ -21,22 +21,66 @@ about = { "results": "HTML", } -categories = ["files", "apps"] send_accept_language_header = True -search_url = "https://play.google.com/store/search?{query}&c=apps" +play_categ = None # apps|movies +base_url = 'https://play.google.com' +search_url = base_url + "/store/search?{query}&c={play_categ}" def request(query, params): - params["url"] = search_url.format(query=urlencode({"q": query})) + + if play_categ not in ('movies', 'apps'): + raise ValueError(f"unknown google play category: {play_categ}") + + params["url"] = search_url.format( + query=urlencode({"q": query}), + play_categ=play_categ, + ) params['cookies']['CONSENT'] = "YES+" return params def response(resp): - results = [] + if play_categ == 'movies': + return response_movies(resp) + if play_categ == 'apps': + return response_apps(resp) + return [] + + +def response_movies(resp): + + results = [] + dom = html.fromstring(resp.text) + + for section in eval_xpath(dom, '//c-wiz/section/header/..'): + sec_name = extract_text(eval_xpath(section, './header')) + for item in eval_xpath(section, './/a'): + url = base_url + item.get('href') + div_1, div_2 = eval_xpath(item, './div')[:2] + title = extract_text(eval_xpath(div_2, './div[@title]')) + metadata = extract_text(eval_xpath(div_2, './div[@class]')) + img = eval_xpath(div_1, './/img')[0] + img_src = img.get('src') + results.append( + { + "url": url, + "title": title, + "content": sec_name, + "img_src": img_src, + 'metadata': metadata, + 'template': 'videos.html', + } + ) + return results + + +def response_apps(resp): + + results = [] dom = html.fromstring(resp.text) if eval_xpath(dom, '//div[@class="v6DsQb"]'): diff --git a/searx/settings.yml b/searx/settings.yml index fa6141dd4..e63ded9ad 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -755,29 +755,18 @@ engines: shortcut: gos - name: google play apps - engine: google_play_apps + engine: google_play + categories: [files, apps] shortcut: gpa + play_categ: apps disabled: true - name: google play movies - engine: xpath - send_accept_language_header: true - search_url: https://play.google.com/store/search?q={query}&c=movies - results_xpath: '//div[@class="ImZGtf mpg5gc"]' - title_xpath: './/div[@class="RZEgze"]//div[@class="kCSSQe"]//a' - url_xpath: './/div[@class="RZEgze"]//div[@class="kCSSQe"]//a/@href' - content_xpath: './/div[@class="kCSSQe"]' - thumbnail_xpath: './/div[@class="uzcko"]/div/span[1]//img/@data-src' + engine: google_play categories: videos shortcut: gpm + play_categ: movies disabled: true - about: - website: https://play.google.com/ - wikidata_id: Q79576 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - name: gpodder engine: json_engine