[enh] add hostname_replace plugin

* backport of https://github.com/searx/searx/pull/2724
* allow to remove result if the replacement is the boolean value false
This commit is contained in:
Alexandre Flament 2021-09-10 12:43:33 +02:00
parent b671e0364f
commit 0f43b39eac
4 changed files with 49 additions and 5 deletions

View file

@ -100,17 +100,17 @@ Parameters
:default: ``HTTPS_rewrite``, ``Self_Informations``, :default: ``HTTPS_rewrite``, ``Self_Informations``,
``Search_on_category_select``, ``Tracker_URL_remover`` ``Search_on_category_select``, ``Tracker_URL_remover``
:values: [ ``DOAI_rewrite``, ``HTTPS_rewrite``, ``Infinite_scroll``, :values: ``DOAI_rewrite``, ``HTTPS_rewrite``, ``Infinite_scroll``,
``Vim-like_hotkeys``, ``Self_Informations``, ``Tracker_URL_remover``, ``Vim-like_hotkeys``, ``Self_Informations``, ``Tracker_URL_remover``,
``Search_on_category_select`` ] ``Search_on_category_select``, ``Hostname_replace``
``disabled_plugins``: optional ``disabled_plugins``: optional
List of disabled plugins. List of disabled plugins.
:default: ``DOAI_rewrite``, ``Infinite_scroll``, ``Vim-like_hotkeys`` :default: ``DOAI_rewrite``, ``Infinite_scroll``, ``Vim-like_hotkeys``, ``Hostname_replace``
:values: ``DOAI_rewrite``, ``HTTPS_rewrite``, ``Infinite_scroll``, :values: ``DOAI_rewrite``, ``HTTPS_rewrite``, ``Infinite_scroll``,
``Vim-like_hotkeys``, ``Self_Informations``, ``Tracker_URL_remover``, ``Vim-like_hotkeys``, ``Self_Informations``, ``Tracker_URL_remover``,
``Search_on_category_select`` ``Search_on_category_select``, ``Hostname_replace``
``enabled_engines`` : optional : *all* :origin:`engines <searx/engines>` ``enabled_engines`` : optional : *all* :origin:`engines <searx/engines>`
List of enabled engines. List of enabled engines.

View file

@ -31,6 +31,7 @@ from searx.plugins import (oa_doi_rewrite,
hash_plugin, hash_plugin,
infinite_scroll, infinite_scroll,
self_info, self_info,
hostname_replace,
search_on_category_select, search_on_category_select,
tracker_url_remover, tracker_url_remover,
vim_hotkeys) vim_hotkeys)
@ -182,6 +183,7 @@ plugins.register(oa_doi_rewrite)
plugins.register(hash_plugin) plugins.register(hash_plugin)
plugins.register(infinite_scroll) plugins.register(infinite_scroll)
plugins.register(self_info) plugins.register(self_info)
plugins.register(hostname_replace)
plugins.register(search_on_category_select) plugins.register(search_on_category_select)
plugins.register(tracker_url_remover) plugins.register(tracker_url_remover)
plugins.register(vim_hotkeys) plugins.register(vim_hotkeys)

View file

@ -0,0 +1,32 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
import re
from urllib.parse import urlunparse
from searx import settings
from searx.plugins import logger
from flask_babel import gettext
name = gettext('Hostname replace')
description = gettext('Rewrite result hostnames or remove results based on the hostname')
default_on = False
preference_section = 'general'
plugin_id = 'hostname_replace'
replacements = {re.compile(p): r for (p, r) in settings[plugin_id].items()} if plugin_id in settings else {}
logger = logger.getChild(plugin_id)
parsed = 'parsed_url'
def on_result(request, search, result):
if parsed not in result:
return True
for (pattern, replacement) in replacements.items():
if pattern.search(result[parsed].netloc):
if not replacement:
return False
result[parsed] = result[parsed]._replace(netloc=pattern.sub(replacement, result[parsed].netloc))
result['url'] = urlunparse(result[parsed])
return True

View file

@ -150,7 +150,17 @@ outgoing:
# #
# enabled_plugins: # enabled_plugins:
# - "HTTPS rewrite" # - "HTTPS rewrite"
# - ... # - "Hostname replace" # see configuration below
# "Hostname replace" plugin configuration example:
# hostname_replace:
# '(.*\.)?youtube\.com$': 'invidious.example.com'
# '(.*\.)?youtu\.be$': 'invidious.example.com'
# '(.*\.)?youtube-noocookie\.com$': 'yotter.example.com'
# '(.*\.)?reddit\.com$': 'teddit.example.com'
# '(.*\.)?redd\.it$': 'teddit.example.com'
# '(www\.)?twitter\.com$': 'nitter.example.com'
# 'spam\.example\.com': false # remove results from spam.example.com
checker: checker:
# disable checker when in debug mode # disable checker when in debug mode