diff --git a/searx/engines/apple_app_store.py b/searx/engines/apple_app_store.py new file mode 100644 index 000000000..f75a1a657 --- /dev/null +++ b/searx/engines/apple_app_store.py @@ -0,0 +1,57 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +""" + Apple App Store +""" + +from json import loads +from urllib.parse import urlencode +from dateutil.parser import parse + +about = { + "website": 'https://www.apple.com/app-store/', + "wikidata_id": 'Q368215', + "official_api_documentation": ( + 'https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/' + 'iTuneSearchAPI/UnderstandingSearchResults.html#//apple_ref/doc/uid/TP40017632-CH8-SW1' + ), + "use_official_api": True, + "require_api_key": False, + "results": 'JSON', +} + +categories = ['files', 'apps'] +safesearch = True + +search_url = 'https://itunes.apple.com/search?{query}' + + +def request(query, params): + explicit = "Yes" + + if params['safesearch'] > 0: + explicit = "No" + + params['url'] = search_url.format(query=urlencode({'term': query, 'media': 'software', 'explicit': explicit})) + + return params + + +def response(resp): + results = [] + + json_result = loads(resp.text) + + for result in json_result['results']: + results.append( + { + 'url': result['trackViewUrl'], + 'title': result['trackName'], + 'content': result['description'], + 'img_src': result['artworkUrl100'], + 'publishedDate': parse(result['currentVersionReleaseDate']), + 'author': result['sellerName'], + } + ) + + return results diff --git a/searx/settings.yml b/searx/settings.yml index b3949777e..1969030eb 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -273,6 +273,11 @@ engines: shortcut: apkm disabled: true + - name: apple app store + engine: apple_app_store + shortcut: aps + disabled: true + # Requires Tor - name: ahmia engine: ahmia