diff --git a/searx/engines/bt4g.py b/searx/engines/bt4g.py new file mode 100644 index 000000000..a952e618d --- /dev/null +++ b/searx/engines/bt4g.py @@ -0,0 +1,80 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +""" + BT4G (Videos, Music, Files) +""" + +import re +from datetime import datetime +from urllib.parse import quote + +from lxml import etree + +from searx.utils import get_torrent_size + +# about +about = { + "website": 'https://bt4gprx.com', + "use_official_api": False, + "require_api_key": False, + "results": 'XML', +} + +# engine dependent config +categories = ['files'] +paging = True +time_range_support = True + +# search-url +url = 'https://bt4gprx.com' +search_url = url + '/search?q={search_term}&orderby={order_by}&category={category}&p={pageno}&page=rss' +bt4g_order_by = 'relevance' # relevance, size, seeders, time +bt4g_category = 'all' # all, audio, movie, doc, app, other + + +def request(query, params): + + order_by = bt4g_order_by + if params['time_range']: + order_by = 'time' + + params['url'] = search_url.format( + search_term=quote(query), + order_by=order_by, + category=bt4g_category, + pageno=params['pageno'], + ) + return params + + +def response(resp): + results = [] + + search_results = etree.XML(resp.content) + + # return empty array if nothing is found + if len(search_results) == 0: + return [] + + for entry in search_results.xpath('./channel/item'): + title = entry.find("title").text + link = entry.find("guid").text + fullDescription = entry.find("description").text.split('
') + filesize = fullDescription[1] + filesizeParsed = re.split(r"([A-Z]+)", filesize) + magnetlink = entry.find("link").text + pubDate = entry.find("pubDate").text + results.append( + { + 'url': link, + 'title': title, + 'magnetlink': magnetlink, + 'seed': 'N/A', + 'leech': 'N/A', + 'filesize': get_torrent_size(filesizeParsed[0], filesizeParsed[1]), + 'publishedDate': datetime.strptime(pubDate, '%a,%d %b %Y %H:%M:%S %z'), + 'template': 'torrent.html', + } + ) + + return results diff --git a/searx/settings.yml b/searx/settings.yml index 3a6ba3e17..ce8b366e1 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -415,6 +415,7 @@ engines: - name: btdigg engine: btdigg shortcut: bt + disabled: true - name: ccc-tv engine: xpath @@ -1926,6 +1927,10 @@ engines: results: HTML language: ja + - name: bt4g + engine: bt4g + shortcut: bt4g + # Doku engine lets you access to any Doku wiki instance: # A public one or a privete/corporate one. # - name: ubuntuwiki