[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>
This commit is contained in:
Markus Heiser 2023-04-16 19:15:44 +02:00
parent b55a62dbc9
commit f1b6351ae1
2 changed files with 55 additions and 22 deletions

View file

@ -1,6 +1,6 @@
# SPDX-License-Identifier: AGPL-3.0-or-later # SPDX-License-Identifier: AGPL-3.0-or-later
""" # lint: pylint
Google Play Apps """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):
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) dom = html.fromstring(resp.text)
if eval_xpath(dom, '//div[@class="v6DsQb"]'): if eval_xpath(dom, '//div[@class="v6DsQb"]'):

View file

@ -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 engine: google_play
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'
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