mirror of
https://github.com/searx/searx
synced 2024-11-22 09:57:08 +01:00
Merge branch 'master' into update_data_update_languages.py
This commit is contained in:
commit
a0ed0006fa
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
## Author's checklist
|
## Author's checklist
|
||||||
|
|
||||||
<!-- additional notes for reviewiers -->
|
<!-- additional notes for reviewers -->
|
||||||
|
|
||||||
## Related issues
|
## Related issues
|
||||||
|
|
||||||
|
@ -85,15 +85,15 @@ of turning it off.
|
|||||||
What is the difference between searx and SearxNG?
|
What is the difference between searx and SearxNG?
|
||||||
#################################################
|
#################################################
|
||||||
|
|
||||||
TL;DR: If you want to run a public instance, go with SearxNG. If you want to
|
TL;DR: SearXNG is for users that want more features and bugs getting fixed quicker.
|
||||||
self host your own instance, choose searx.
|
If you prefer a minimalist software and stable experience, use searx.
|
||||||
|
|
||||||
SearxNG is a fork of searx, created by a former maintainer of searx. The fork
|
SearxNG is a fork of searx, created by a former maintainer of searx. The fork
|
||||||
was created because the majority of the maintainers at the time did not find
|
was created because the majority of the maintainers at the time did not find
|
||||||
the new proposed features privacy respecting enough. The most significant issue is with
|
the new proposed features privacy respecting enough. The most significant issue is with
|
||||||
engine metrics.
|
engine metrics.
|
||||||
|
|
||||||
Searx is built for privacy conscious users. It comes a unique set of
|
Searx is built for privacy conscious users. It comes with a unique set of
|
||||||
challenges. One of the problems we face is that users rather not report bugs,
|
challenges. One of the problems we face is that users rather not report bugs,
|
||||||
because they do not want to publicly share what engines they use or what search
|
because they do not want to publicly share what engines they use or what search
|
||||||
query triggered a problem. It is a challenge we accepted.
|
query triggered a problem. It is a challenge we accepted.
|
||||||
|
3
manage
3
manage
@ -284,9 +284,6 @@ node.env() {
|
|||||||
which npm &> /dev/null || die 1 'node.env - npm is not found!'
|
which npm &> /dev/null || die 1 'node.env - npm is not found!'
|
||||||
|
|
||||||
( set -e
|
( set -e
|
||||||
# shellcheck disable=SC2030
|
|
||||||
PATH="$(npm bin):$PATH"
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
build_msg INSTALL "npm install $NPM_PACKAGES"
|
build_msg INSTALL "npm install $NPM_PACKAGES"
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
mock==4.0.3
|
mock==5.0.1
|
||||||
nose2[coverage_plugin]==0.12.0
|
nose2[coverage_plugin]==0.12.0
|
||||||
cov-core==1.15.0
|
cov-core==1.15.0
|
||||||
pycodestyle==2.9.1
|
pycodestyle==2.10.0
|
||||||
pylint==2.15.5
|
pylint==2.15.9
|
||||||
splinter==0.18.1
|
splinter==0.19.0
|
||||||
transifex-client==0.14.3; python_version < '3.10'
|
transifex-client==0.14.3; python_version < '3.10'
|
||||||
transifex-client==0.12.5; python_version == '3.10'
|
transifex-client==0.12.5; python_version == '3.10'
|
||||||
selenium==4.5.0
|
selenium==4.7.2
|
||||||
twine==4.0.1
|
twine==4.0.2
|
||||||
Pallets-Sphinx-Themes==2.0.2
|
Pallets-Sphinx-Themes==2.0.2
|
||||||
docutils==0.18
|
docutils==0.18
|
||||||
Sphinx==5.3.0
|
Sphinx==5.3.0
|
||||||
@ -16,4 +16,4 @@ sphinx-jinja==2.0.2
|
|||||||
sphinx-tabs==3.4.1
|
sphinx-tabs==3.4.1
|
||||||
sphinxcontrib-programoutput==0.17
|
sphinxcontrib-programoutput==0.17
|
||||||
sphinx-autobuild==2021.3.14
|
sphinx-autobuild==2021.3.14
|
||||||
linuxdoc==20221025
|
linuxdoc==20221127
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
Brotli==1.0.9
|
Brotli==1.0.9
|
||||||
babel==2.11.0
|
babel==2.11.0
|
||||||
certifi==2022.9.24
|
certifi==2022.12.7
|
||||||
flask-babel==2.0.0
|
flask-babel==2.0.0
|
||||||
flask==2.2.2
|
flask==2.2.2
|
||||||
jinja2==3.1.2
|
jinja2==3.1.2
|
||||||
langdetect==1.0.9
|
langdetect==1.0.9
|
||||||
lxml==4.9.1
|
lxml==4.9.2
|
||||||
pygments==2.12.0
|
pygments==2.12.0
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.8.2
|
||||||
pyyaml==6.0
|
pyyaml==6.0
|
||||||
requests[socks]==2.28.1
|
requests[socks]==2.28.2
|
||||||
setproctitle==1.3.2
|
setproctitle==1.3.2
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,9 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
"106.0.3",
|
"111.0.1",
|
||||||
"106.0.2",
|
"111.0",
|
||||||
"106.0.1",
|
"110.0.1",
|
||||||
"106.0",
|
"110.0"
|
||||||
"105.0.3",
|
|
||||||
"105.0.2",
|
|
||||||
"105.0.1",
|
|
||||||
"105.0"
|
|
||||||
],
|
],
|
||||||
"os": [
|
"os": [
|
||||||
"Windows NT 10.0; WOW64",
|
"Windows NT 10.0; WOW64",
|
||||||
|
@ -52,8 +52,7 @@ def request(query, params):
|
|||||||
offset=offset)
|
offset=offset)
|
||||||
|
|
||||||
params['url'] = base_url + search_path
|
params['url'] = base_url + search_path
|
||||||
params['headers']['User-Agent'] = ('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 '
|
params['headers']['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
|
||||||
'(KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36')
|
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
@ -82,11 +81,13 @@ def response(resp):
|
|||||||
for result in eval_xpath(dom, '//li[@class="b_algo"]'):
|
for result in eval_xpath(dom, '//li[@class="b_algo"]'):
|
||||||
link = eval_xpath(result, './/h2/a')[0]
|
link = eval_xpath(result, './/h2/a')[0]
|
||||||
url = link.attrib.get('href')
|
url = link.attrib.get('href')
|
||||||
|
pretty_url = extract_text(eval_xpath(result, './/cite'))
|
||||||
title = extract_text(link)
|
title = extract_text(link)
|
||||||
content = extract_text(eval_xpath(result, './/p'))
|
content = extract_text(eval_xpath(result, './/p'))
|
||||||
|
|
||||||
# append result
|
# append result
|
||||||
results.append({'url': url,
|
results.append({'url': url,
|
||||||
|
'pretty_url': pretty_url,
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': content})
|
'content': content})
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ from searx.poolrequests import get
|
|||||||
|
|
||||||
# about
|
# about
|
||||||
about = {
|
about = {
|
||||||
"website": 'https://lite.duckduckgo.com/lite',
|
"website": 'https://lite.duckduckgo.com/lite/',
|
||||||
"wikidata_id": 'Q12805',
|
"wikidata_id": 'Q12805',
|
||||||
"official_api_documentation": 'https://duckduckgo.com/api',
|
"official_api_documentation": 'https://duckduckgo.com/api',
|
||||||
"use_official_api": False,
|
"use_official_api": False,
|
||||||
@ -45,7 +45,7 @@ language_aliases = {
|
|||||||
time_range_dict = {'day': 'd', 'week': 'w', 'month': 'm', 'year': 'y'}
|
time_range_dict = {'day': 'd', 'week': 'w', 'month': 'm', 'year': 'y'}
|
||||||
|
|
||||||
# search-url
|
# search-url
|
||||||
url = 'https://lite.duckduckgo.com/lite'
|
url = 'https://lite.duckduckgo.com/lite/'
|
||||||
url_ping = 'https://duckduckgo.com/t/sl_l'
|
url_ping = 'https://duckduckgo.com/t/sl_l'
|
||||||
|
|
||||||
|
|
||||||
@ -73,6 +73,9 @@ def request(query, params):
|
|||||||
# link again and again ..
|
# link again and again ..
|
||||||
|
|
||||||
params['headers']['Content-Type'] = 'application/x-www-form-urlencoded'
|
params['headers']['Content-Type'] = 'application/x-www-form-urlencoded'
|
||||||
|
params['headers']['Origin'] = 'https://lite.duckduckgo.com'
|
||||||
|
params['headers']['Referer'] = 'https://lite.duckduckgo.com/'
|
||||||
|
params['headers']['User-Agent'] = 'Mozilla/5.0'
|
||||||
|
|
||||||
# initial page does not have an offset
|
# initial page does not have an offset
|
||||||
if params['pageno'] == 2:
|
if params['pageno'] == 2:
|
||||||
|
@ -112,7 +112,7 @@ filter_mapping = {
|
|||||||
results_xpath = '//div[contains(@class, "MjjYud")]'
|
results_xpath = '//div[contains(@class, "MjjYud")]'
|
||||||
title_xpath = './/h3[1]'
|
title_xpath = './/h3[1]'
|
||||||
href_xpath = './/a/@href'
|
href_xpath = './/a/@href'
|
||||||
content_xpath = './/div[@data-content-feature=1]'
|
content_xpath = './/div[@data-sncf]'
|
||||||
results_xpath_mobile_ui = '//div[contains(@class, "g ")]'
|
results_xpath_mobile_ui = '//div[contains(@class, "g ")]'
|
||||||
|
|
||||||
# google *sections* are no usual *results*, we ignore them
|
# google *sections* are no usual *results*, we ignore them
|
||||||
|
@ -91,14 +91,13 @@ def get_sc_code(headers):
|
|||||||
dom = html.fromstring(resp.text)
|
dom = html.fromstring(resp.text)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
href = eval_xpath(dom, '//input[@name="sc"]')[0].get('value')
|
sc_code = eval_xpath(dom, '//input[@name="sc"]')[0].get('value')
|
||||||
except IndexError as exc:
|
except IndexError as exc:
|
||||||
# suspend startpage API --> https://github.com/searxng/searxng/pull/695
|
# suspend startpage API --> https://github.com/searxng/searxng/pull/695
|
||||||
raise SearxEngineResponseException(
|
raise SearxEngineResponseException(
|
||||||
suspended_time=7 * 24 * 3600, message="PR-695: query new sc time-stamp failed!"
|
suspended_time=7 * 24 * 3600, message="PR-695: query new sc time-stamp failed!"
|
||||||
) from exc
|
) from exc
|
||||||
|
|
||||||
sc_code = href[5:]
|
|
||||||
sc_code_ts = time()
|
sc_code_ts = time()
|
||||||
logger.debug("new value is: %s", sc_code)
|
logger.debug("new value is: %s", sc_code)
|
||||||
|
|
||||||
|
@ -1291,7 +1291,7 @@ engines:
|
|||||||
- name : wiby
|
- name : wiby
|
||||||
engine : json_engine
|
engine : json_engine
|
||||||
paging : True
|
paging : True
|
||||||
search_url : https://wiby.me/json/?q={query}&o={pageno}0
|
search_url : https://wiby.me/json/?q={query}&p={pageno}
|
||||||
url_query : URL
|
url_query : URL
|
||||||
title_query : Title
|
title_query : Title
|
||||||
content_query : Snippet
|
content_query : Snippet
|
||||||
|
@ -5,7 +5,7 @@ import requests
|
|||||||
import re
|
import re
|
||||||
from os.path import dirname, join
|
from os.path import dirname, join
|
||||||
from urllib.parse import urlparse, urljoin
|
from urllib.parse import urlparse, urljoin
|
||||||
from distutils.version import LooseVersion, StrictVersion
|
from packaging.version import Version, parse
|
||||||
from lxml import html
|
from lxml import html
|
||||||
from searx import searx_dir
|
from searx import searx_dir
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ def fetch_firefox_versions():
|
|||||||
if path.startswith(RELEASE_PATH):
|
if path.startswith(RELEASE_PATH):
|
||||||
version = path[len(RELEASE_PATH):-1]
|
version = path[len(RELEASE_PATH):-1]
|
||||||
if NORMAL_REGEX.match(version):
|
if NORMAL_REGEX.match(version):
|
||||||
versions.append(LooseVersion(version))
|
versions.append(Version(version))
|
||||||
|
|
||||||
list.sort(versions, reverse=True)
|
list.sort(versions, reverse=True)
|
||||||
return versions
|
return versions
|
||||||
@ -49,12 +49,12 @@ def fetch_firefox_last_versions():
|
|||||||
versions = fetch_firefox_versions()
|
versions = fetch_firefox_versions()
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
major_last = versions[0].version[0]
|
major_last = versions[0].major
|
||||||
major_list = (major_last, major_last - 1)
|
major_list = (major_last, major_last - 1)
|
||||||
for version in versions:
|
for version in versions:
|
||||||
major_current = version.version[0]
|
major_current = version.major
|
||||||
if major_current in major_list:
|
if major_current in major_list:
|
||||||
result.append(version.vstring)
|
result.append(str(version))
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user