Browse Source

[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 <markus.heiser@darmarit.de>
Markus Heiser 2 years ago
parent
commit
f1b6351ae1
2 changed files with 54 additions and 21 deletions
  1. 49 5
      searx/engines/google_play.py
  2. 5 16
      searx/settings.yml

+ 49 - 5
searx/engines/google_play_apps.py → searx/engines/google_play.py

@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: AGPL-3.0-or-later
 # SPDX-License-Identifier: AGPL-3.0-or-later
-"""
-  Google Play Apps
+# lint: pylint
+"""Google Play Apps & Google Play Movies
 """
 """
 
 
 from urllib.parse import urlencode
 from urllib.parse import urlencode
@@ -21,22 +21,66 @@ about = {
     "results": "HTML",
     "results": "HTML",
 }
 }
 
 
-categories = ["files", "apps"]
 send_accept_language_header = True
 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):
 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+"
     params['cookies']['CONSENT'] = "YES+"
 
 
     return params
     return params
 
 
 
 
 def response(resp):
 def response(resp):
+
+    if play_categ == 'movies':
+        return response_movies(resp)
+    if play_categ == 'apps':
+        return response_apps(resp)
+    return []
+
+
+def response_movies(resp):
+
     results = []
     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)
     dom = html.fromstring(resp.text)
 
 
     if eval_xpath(dom, '//div[@class="v6DsQb"]'):
     if eval_xpath(dom, '//div[@class="v6DsQb"]'):

+ 5 - 16
searx/settings.yml

@@ -755,29 +755,18 @@ engines:
     shortcut: gos
     shortcut: gos
 
 
   - name: google play apps
   - name: google play apps
-    engine: google_play_apps
+    engine: google_play
+    categories: [files, apps]
     shortcut: gpa
     shortcut: gpa
+    play_categ: apps
     disabled: true
     disabled: true
 
 
   - name: google play movies
   - 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
     categories: videos
     shortcut: gpm
     shortcut: gpm
+    play_categ: movies
     disabled: true
     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
   - name: gpodder
     engine: json_engine
     engine: json_engine