mirror of
https://github.com/searxng/searxng.git
synced 2026-07-31 12:21:24 +00:00
Compare commits
12 Commits
ci-data-up
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
057a77168d | ||
|
|
0be6f87801 | ||
|
|
ef3a6ea9fd | ||
|
|
f25b75e613 | ||
|
|
98e10f9ab4 | ||
|
|
a449518ed4 | ||
|
|
702f702f9b | ||
|
|
afdfd81613 | ||
|
|
c81ed99c69 | ||
|
|
ecf8497b65 | ||
|
|
e28131f8d4 | ||
|
|
81b0ed7b38 |
39
.github/scripts/ai_policy.cjs
vendored
Normal file
39
.github/scripts/ai_policy.cjs
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Closes issues and prs whose authors/agents don't accept the ai policy
|
||||||
|
// https://github.com/searxng/searxng/blob/master/AI_POLICY.rst
|
||||||
|
|
||||||
|
module.exports = async ({ github, context }) => {
|
||||||
|
const item = context.payload.pull_request || context.payload.issue;
|
||||||
|
const body = item.body || '';
|
||||||
|
const kind = context.payload.pull_request ? 'pull request' : 'issue';
|
||||||
|
|
||||||
|
// https://github.com/searxng/searxng/pull/6476#discussion_r3683782481
|
||||||
|
const hasBox = /\[[Xx]\].*AI Policy/.test(body);
|
||||||
|
const hasRef = /\[AI Policy\]:\s*https:\/\/github\.com\/searxng\/searxng\/.*AI_POLICY/.test(body);
|
||||||
|
if (hasBox && hasRef) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { owner, repo } = context.repo;
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: item.number,
|
||||||
|
body:
|
||||||
|
'Hello! Thank you for your contribution.\n\n' +
|
||||||
|
`Unfortunately your ${kind} was closed as the AI Policy has not been accepted.\n\n` +
|
||||||
|
`Please open a new ${kind} after confirming your contribution aligns with our AI Policy.`,
|
||||||
|
});
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: item.number,
|
||||||
|
labels: ['invalid:slop'],
|
||||||
|
});
|
||||||
|
await github.rest.issues.update({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: item.number,
|
||||||
|
state: 'closed',
|
||||||
|
state_reason: 'not_planned',
|
||||||
|
});
|
||||||
|
};
|
||||||
38
.github/workflows/ai-policy.yml
vendored
Normal file
38
.github/workflows/ai-policy.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
# yamllint disable rule:line-length
|
||||||
|
name: AI Policy
|
||||||
|
|
||||||
|
# Closes any new issues and PRs from people (or agents) who don't accept the AI Policy
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [opened]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check AI Policy
|
||||||
|
# for issues with an author who has not contributed before
|
||||||
|
if: >-
|
||||||
|
github.event.sender.type != 'Bot' &&
|
||||||
|
contains(fromJSON('["NONE","FIRST_TIMER","FIRST_TIME_CONTRIBUTOR"]'),
|
||||||
|
github.event.issue.author_association ||
|
||||||
|
github.event.pull_request.author_association)
|
||||||
|
runs-on: ubuntu-26.04-arm
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: "false"
|
||||||
|
|
||||||
|
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const script = require('./.github/scripts/ai_policy.cjs');
|
||||||
|
await script({ github, context });
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
.. _engine presearch:
|
|
||||||
|
|
||||||
================
|
|
||||||
Presearch Engine
|
|
||||||
================
|
|
||||||
|
|
||||||
.. automodule:: searx.engines.presearch
|
|
||||||
:members:
|
|
||||||
@@ -20,15 +20,11 @@ If you don't trust anyone, you can set up your own, see :ref:`installation`.
|
|||||||
|
|
||||||
- :ref:`self hosted <installation>`
|
- :ref:`self hosted <installation>`
|
||||||
- :ref:`no user tracking / no profiling <SearXNG protect privacy>`
|
- :ref:`no user tracking / no profiling <SearXNG protect privacy>`
|
||||||
- script & cookies are optional
|
- javascript & cookies are optional
|
||||||
- secure, encrypted connections
|
|
||||||
- :ref:`{{engines | length}} search engines <configured engines>`
|
- :ref:`{{engines | length}} search engines <configured engines>`
|
||||||
- `58 translations <https://translate.codeberg.org/projects/searxng/searxng/>`_
|
- `58 translations <https://translate.codeberg.org/projects/searxng/searxng/>`_
|
||||||
- about 70 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
- about 70 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
||||||
- :ref:`easy integration of search engines <demo online engine>`
|
- :ref:`easy integration of search engines <demo online engine>`
|
||||||
- professional development: `CI <https://github.com/searxng/searxng/actions>`_,
|
|
||||||
`quality assurance <https://dev.searxng.org/>`_ &
|
|
||||||
`automated tested UI <https://dev.searxng.org/screenshots.html>`_
|
|
||||||
|
|
||||||
.. sidebar:: be a part
|
.. sidebar:: be a part
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from . import Answerer, AnswererInfo
|
|||||||
|
|
||||||
def random_characters():
|
def random_characters():
|
||||||
random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase
|
random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase
|
||||||
return [random.choice(random_string_letters) for _ in range(random.randint(8, 32))]
|
return random.choices(random_string_letters, k=random.randint(8, 32))
|
||||||
|
|
||||||
|
|
||||||
def random_string():
|
def random_string():
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ def bing(query: str, _sxng_locale: str) -> list[str]:
|
|||||||
# bing search autocompleter
|
# bing search autocompleter
|
||||||
base_url = "https://www.bing.com/AS/Suggestions?"
|
base_url = "https://www.bing.com/AS/Suggestions?"
|
||||||
# cvid has to be a 32 character long string consisting of numbers and uppsercase characters
|
# cvid has to be a 32 character long string consisting of numbers and uppsercase characters
|
||||||
cvid = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(32))
|
cvid = ''.join(random.choices(string.ascii_uppercase + string.digits, k=32))
|
||||||
response = get(base_url + urlencode({'qry': query, 'csr': 1, 'cvid': cvid}))
|
response = get(base_url + urlencode({'qry': query, 'csr': 1, 'cvid': cvid}))
|
||||||
results: list[str] = []
|
results: list[str] = []
|
||||||
|
|
||||||
|
|||||||
@@ -151,6 +151,6 @@ def get_token() -> str:
|
|||||||
if token:
|
if token:
|
||||||
token = token.decode('UTF-8') # type: ignore
|
token = token.decode('UTF-8') # type: ignore
|
||||||
else:
|
else:
|
||||||
token = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(16))
|
token = ''.join(random.choices(string.ascii_lowercase + string.digits, k=16))
|
||||||
valkey_client.set(TOKEN_KEY, token, ex=TOKEN_LIVE_TIME)
|
valkey_client.set(TOKEN_KEY, token, ex=TOKEN_LIVE_TIME)
|
||||||
return token
|
return token
|
||||||
|
|||||||
@@ -288,7 +288,7 @@
|
|||||||
"oc": "Kwanza",
|
"oc": "Kwanza",
|
||||||
"pa": "ਅੰਗੋਲਨ ਕਵਾਂਜ਼ਾ",
|
"pa": "ਅੰਗੋਲਨ ਕਵਾਂਜ਼ਾ",
|
||||||
"pl": "Kwanza",
|
"pl": "Kwanza",
|
||||||
"pt": "Kwanza",
|
"pt": "kwanza",
|
||||||
"ru": "ангольская кванза",
|
"ru": "ангольская кванза",
|
||||||
"si": "ක්වන්සා",
|
"si": "ක්වන්සා",
|
||||||
"sr": "анголска кванза",
|
"sr": "анголска кванза",
|
||||||
@@ -334,6 +334,7 @@
|
|||||||
"ro": "Peso argentinian",
|
"ro": "Peso argentinian",
|
||||||
"ru": "аргентинское песо",
|
"ru": "аргентинское песо",
|
||||||
"sk": "Argentinské peso",
|
"sk": "Argentinské peso",
|
||||||
|
"sl": "argentinski peso",
|
||||||
"sr": "аргентински пезос",
|
"sr": "аргентински пезос",
|
||||||
"sv": "Argentinsk peso",
|
"sv": "Argentinsk peso",
|
||||||
"ta": "ஆர்ஜென்டின பீசோ",
|
"ta": "ஆர்ஜென்டின பீசோ",
|
||||||
@@ -2002,7 +2003,7 @@
|
|||||||
"eo": "ganaa cedio",
|
"eo": "ganaa cedio",
|
||||||
"es": "cedi",
|
"es": "cedi",
|
||||||
"fi": "Cedi",
|
"fi": "Cedi",
|
||||||
"fr": "Cedi",
|
"fr": "cedi",
|
||||||
"ga": "cedi",
|
"ga": "cedi",
|
||||||
"gl": "Cedi",
|
"gl": "Cedi",
|
||||||
"he": "סדי גאני",
|
"he": "סדי גאני",
|
||||||
@@ -2952,7 +2953,7 @@
|
|||||||
"pap": "won nortkoreano",
|
"pap": "won nortkoreano",
|
||||||
"pl": "won północnokoreański",
|
"pl": "won północnokoreański",
|
||||||
"pt": "won norte-coreano",
|
"pt": "won norte-coreano",
|
||||||
"ro": "Won nord-coreean",
|
"ro": "won nord-coreean",
|
||||||
"ru": "вона КНДР",
|
"ru": "вона КНДР",
|
||||||
"sk": "severokorejsky won",
|
"sk": "severokorejsky won",
|
||||||
"sl": "severnokorejski von",
|
"sl": "severnokorejski von",
|
||||||
@@ -3094,6 +3095,7 @@
|
|||||||
"ca": "tenge",
|
"ca": "tenge",
|
||||||
"cs": "Tenge",
|
"cs": "Tenge",
|
||||||
"cy": "tenge Casachstan",
|
"cy": "tenge Casachstan",
|
||||||
|
"da": "Tenge",
|
||||||
"de": "Tenge",
|
"de": "Tenge",
|
||||||
"en": "Kazakhstani tenge",
|
"en": "Kazakhstani tenge",
|
||||||
"eo": "kazaĥa tengo",
|
"eo": "kazaĥa tengo",
|
||||||
@@ -4834,6 +4836,7 @@
|
|||||||
"nl": "Seychelse roepie",
|
"nl": "Seychelse roepie",
|
||||||
"pl": "Rupia seszelska",
|
"pl": "Rupia seszelska",
|
||||||
"pt": "rupia das Seicheles",
|
"pt": "rupia das Seicheles",
|
||||||
|
"ro": "rupie seychelloză",
|
||||||
"ru": "сейшельская рупия",
|
"ru": "сейшельская рупия",
|
||||||
"sk": "Seychelská rupia",
|
"sk": "Seychelská rupia",
|
||||||
"sl": "sejšelska rupija",
|
"sl": "sejšelska rupija",
|
||||||
@@ -5064,6 +5067,7 @@
|
|||||||
"nl": "Somalische shilling",
|
"nl": "Somalische shilling",
|
||||||
"pl": "Szyling somalijski",
|
"pl": "Szyling somalijski",
|
||||||
"pt": "xelim somaliano",
|
"pt": "xelim somaliano",
|
||||||
|
"ro": "șiling somalez",
|
||||||
"ru": "сомалийский шиллинг",
|
"ru": "сомалийский шиллинг",
|
||||||
"sk": "Somálsky šiling",
|
"sk": "Somálsky šiling",
|
||||||
"sl": "somalski šiling",
|
"sl": "somalski šiling",
|
||||||
@@ -5883,6 +5887,7 @@
|
|||||||
"ja": "ドン",
|
"ja": "ドン",
|
||||||
"ko": "베트남 동",
|
"ko": "베트남 동",
|
||||||
"lt": "Vietnamo dongas",
|
"lt": "Vietnamo dongas",
|
||||||
|
"ms": "Dồng Vietnam",
|
||||||
"nl": "Vietnamese dong",
|
"nl": "Vietnamese dong",
|
||||||
"oc": "Dong",
|
"oc": "Dong",
|
||||||
"pa": "ਵੀਅਤਨਾਮੀ ਦੋਙ",
|
"pa": "ਵੀਅਤਨਾਮੀ ਦੋਙ",
|
||||||
@@ -6122,7 +6127,8 @@
|
|||||||
"ro": "Gulden caraibian",
|
"ro": "Gulden caraibian",
|
||||||
"ru": "Карибский гульден",
|
"ru": "Карибский гульден",
|
||||||
"sk": "Karibský gulden",
|
"sk": "Karibský gulden",
|
||||||
"sl": "karibski goldinar"
|
"sl": "karibski goldinar",
|
||||||
|
"sv": "Karibisk gulden"
|
||||||
},
|
},
|
||||||
"XDR": {
|
"XDR": {
|
||||||
"ar": "حقوق السحب الخاصة",
|
"ar": "حقوق السحب الخاصة",
|
||||||
@@ -6724,6 +6730,8 @@
|
|||||||
"antilliaanse gulden": "ANG",
|
"antilliaanse gulden": "ANG",
|
||||||
"antilski gulden": "ANG",
|
"antilski gulden": "ANG",
|
||||||
"aoa": "AOA",
|
"aoa": "AOA",
|
||||||
|
"apvienotās karalistes ekonomika": "GBP",
|
||||||
|
"apvienotās karalistes saimniecība": "GBP",
|
||||||
"apvienotās karalistes sterliņu mārciņa": "GBP",
|
"apvienotās karalistes sterliņu mārciņa": "GBP",
|
||||||
"ar": "MGA",
|
"ar": "MGA",
|
||||||
"arab accounting dinar": "XAD",
|
"arab accounting dinar": "XAD",
|
||||||
@@ -6836,6 +6844,7 @@
|
|||||||
"avustralya doları": "AUD",
|
"avustralya doları": "AUD",
|
||||||
"awg": "AWG",
|
"awg": "AWG",
|
||||||
"az arany mint befektetés": "XAU",
|
"az arany mint befektetés": "XAU",
|
||||||
|
"az egyesült királyság gazdasága": "GBP",
|
||||||
"azerbaidžanin manat": "AZN",
|
"azerbaidžanin manat": "AZN",
|
||||||
"azerbaidžano manatas": "AZN",
|
"azerbaidžano manatas": "AZN",
|
||||||
"azerbaidžānas manats": "AZN",
|
"azerbaidžānas manats": "AZN",
|
||||||
@@ -7019,6 +7028,7 @@
|
|||||||
"bir etíope": "ETB",
|
"bir etíope": "ETB",
|
||||||
"biras": "ETB",
|
"biras": "ETB",
|
||||||
"birleşik arap emirlikleri dirhemi": "AED",
|
"birleşik arap emirlikleri dirhemi": "AED",
|
||||||
|
"birleşik krallık ekonomisi": "GBP",
|
||||||
"birma kjato": "MMK",
|
"birma kjato": "MMK",
|
||||||
"birr": "ETB",
|
"birr": "ETB",
|
||||||
"birr da etiópia": "ETB",
|
"birr da etiópia": "ETB",
|
||||||
@@ -7106,15 +7116,19 @@
|
|||||||
"brit font": "GBP",
|
"brit font": "GBP",
|
||||||
"brita pundo": "GBP",
|
"brita pundo": "GBP",
|
||||||
"britaj pundoj": "GBP",
|
"britaj pundoj": "GBP",
|
||||||
|
"britannian talous": "GBP",
|
||||||
"britanska funta": "GBP",
|
"britanska funta": "GBP",
|
||||||
"britanski funt": "GBP",
|
"britanski funt": "GBP",
|
||||||
|
"britische wirtschaft": "GBP",
|
||||||
"britisches pfund": "GBP",
|
"britisches pfund": "GBP",
|
||||||
|
"british economy": "GBP",
|
||||||
"british pound": "GBP",
|
"british pound": "GBP",
|
||||||
"britisk pund": "GBP",
|
"britisk pund": "GBP",
|
||||||
"britiske pund": "GBP",
|
"britiske pund": "GBP",
|
||||||
"brits pond": "GBP",
|
"brits pond": "GBP",
|
||||||
"britse pond": "GBP",
|
"britse pond": "GBP",
|
||||||
"britská libra": "GBP",
|
"britská libra": "GBP",
|
||||||
|
"brittisk ekonomi": "GBP",
|
||||||
"brittiska pund": "GBP",
|
"brittiska pund": "GBP",
|
||||||
"brittiskt pund": "GBP",
|
"brittiskt pund": "GBP",
|
||||||
"brunei doları": "BND",
|
"brunei doları": "BND",
|
||||||
@@ -7198,6 +7212,7 @@
|
|||||||
"cedi du ghana": "GHS",
|
"cedi du ghana": "GHS",
|
||||||
"cedi ghana": "GHS",
|
"cedi ghana": "GHS",
|
||||||
"cedi ghanese": "GHS",
|
"cedi ghanese": "GHS",
|
||||||
|
"cedi ghanéen": "GHS",
|
||||||
"centr afrika franko": "XAF",
|
"centr afrika franko": "XAF",
|
||||||
"central african cfa franc": "XAF",
|
"central african cfa franc": "XAF",
|
||||||
"centralafrikansk cfa franc": "XAF",
|
"centralafrikansk cfa franc": "XAF",
|
||||||
@@ -7300,7 +7315,6 @@
|
|||||||
"colón costa ricense": "CRC",
|
"colón costa ricense": "CRC",
|
||||||
"colón costa riquenho": "CRC",
|
"colón costa riquenho": "CRC",
|
||||||
"colón costa riquense": "CRC",
|
"colón costa riquense": "CRC",
|
||||||
"colón costa riqueny": "CRC",
|
|
||||||
"colón costaricain": "CRC",
|
"colón costaricain": "CRC",
|
||||||
"colón costaricano": "CRC",
|
"colón costaricano": "CRC",
|
||||||
"colón costaricien": "CRC",
|
"colón costaricien": "CRC",
|
||||||
@@ -8413,6 +8427,7 @@
|
|||||||
"dólares canadenses": "CAD",
|
"dólares canadenses": "CAD",
|
||||||
"dólares estadounidenses": "USD",
|
"dólares estadounidenses": "USD",
|
||||||
"dólares neozelandeses": "NZD",
|
"dólares neozelandeses": "NZD",
|
||||||
|
"dồng vietnam": "VND",
|
||||||
"dram": "AMD",
|
"dram": "AMD",
|
||||||
"dram armean": "AMD",
|
"dram armean": "AMD",
|
||||||
"dram armenia": "AMD",
|
"dram armenia": "AMD",
|
||||||
@@ -8436,6 +8451,7 @@
|
|||||||
"droits de tirage speciaux": "XDR",
|
"droits de tirage speciaux": "XDR",
|
||||||
"droits de tirage spéciaux": "XDR",
|
"droits de tirage spéciaux": "XDR",
|
||||||
"dschibuti franc": "DJF",
|
"dschibuti franc": "DJF",
|
||||||
|
"dvn": "VND",
|
||||||
"dzd": "DZD",
|
"dzd": "DZD",
|
||||||
"dzsibuti frank": "DJF",
|
"dzsibuti frank": "DJF",
|
||||||
"džibučio frankas": "DJF",
|
"džibučio frankas": "DJF",
|
||||||
@@ -8449,6 +8465,21 @@
|
|||||||
"eastern caribbean currency union": "XCD",
|
"eastern caribbean currency union": "XCD",
|
||||||
"eastern caribbean dollar": "XCD",
|
"eastern caribbean dollar": "XCD",
|
||||||
"ec$": "XCD",
|
"ec$": "XCD",
|
||||||
|
"economi'r deyrnas unedig": "GBP",
|
||||||
|
"economia": "GBP",
|
||||||
|
"economia del regne unit": "GBP",
|
||||||
|
"economia del regno unito": "GBP",
|
||||||
|
"economia del reialme unit": "GBP",
|
||||||
|
"economia del reino unido": "GBP",
|
||||||
|
"economia do reino unido": "GBP",
|
||||||
|
"economia regatului unit": "GBP",
|
||||||
|
"economie du royaume uni": "GBP",
|
||||||
|
"economie van het verenigd koninkrijk": "GBP",
|
||||||
|
"economía del reino unido": "GBP",
|
||||||
|
"economía do reino unido": "GBP",
|
||||||
|
"economy": "GBP",
|
||||||
|
"economy of the uk": "GBP",
|
||||||
|
"economy of the united kingdom": "GBP",
|
||||||
"egipatska funta": "EGP",
|
"egipatska funta": "EGP",
|
||||||
"egipta pundo": "EGP",
|
"egipta pundo": "EGP",
|
||||||
"egipto svaras": "EGP",
|
"egipto svaras": "EGP",
|
||||||
@@ -8468,6 +8499,12 @@
|
|||||||
"einr": "INR",
|
"einr": "INR",
|
||||||
"eiro": "EUR",
|
"eiro": "EUR",
|
||||||
"ekialdeko karibeko dolar": "XCD",
|
"ekialdeko karibeko dolar": "XCD",
|
||||||
|
"ekonomi britania raya": "GBP",
|
||||||
|
"ekonomi united kingdom": "GBP",
|
||||||
|
"ekonomie van die verenigde koninkryk": "GBP",
|
||||||
|
"ekonomika spojeného království": "GBP",
|
||||||
|
"ekonomika v spojenom kráľovstve": "GBP",
|
||||||
|
"ekonomio de britujo": "GBP",
|
||||||
"el peso": "GTQ",
|
"el peso": "GTQ",
|
||||||
"emalangeni": "SZL",
|
"emalangeni": "SZL",
|
||||||
"emas sebagai pelaburan": "XAU",
|
"emas sebagai pelaburan": "XAU",
|
||||||
@@ -8499,6 +8536,7 @@
|
|||||||
"ermenistan dramı": "AMD",
|
"ermenistan dramı": "AMD",
|
||||||
"ern": "ERN",
|
"ern": "ERN",
|
||||||
"erreal brasildar": "BRL",
|
"erreal brasildar": "BRL",
|
||||||
|
"erresuma batuko ekonomia": "GBP",
|
||||||
"errublo": "RUB",
|
"errublo": "RUB",
|
||||||
"errublo errusiar": "RUB",
|
"errublo errusiar": "RUB",
|
||||||
"errupia indiar": "INR",
|
"errupia indiar": "INR",
|
||||||
@@ -8569,6 +8607,8 @@
|
|||||||
"eyrir": "ISK",
|
"eyrir": "ISK",
|
||||||
"e£": "EGP",
|
"e£": "EGP",
|
||||||
"èuro": "EUR",
|
"èuro": "EUR",
|
||||||
|
"économie britannique": "GBP",
|
||||||
|
"économie du royaume uni": "GBP",
|
||||||
"észak ír font": "GBP",
|
"észak ír font": "GBP",
|
||||||
"észak koreai von": "KPW",
|
"észak koreai von": "KPW",
|
||||||
"e₹": "INR",
|
"e₹": "INR",
|
||||||
@@ -8702,6 +8742,9 @@
|
|||||||
"forintti": "HUF",
|
"forintti": "HUF",
|
||||||
"forinți": "HUF",
|
"forinți": "HUF",
|
||||||
"fòrint": "HUF",
|
"fòrint": "HUF",
|
||||||
|
"förenade konungariket storbritannien och irlands ekonomi": "GBP",
|
||||||
|
"förenade konungariket storbritannien och nordirlands ekonomi": "GBP",
|
||||||
|
"förenade kungarikets ekonomi": "GBP",
|
||||||
"franak cfp": "XPF",
|
"franak cfp": "XPF",
|
||||||
"franc": [
|
"franc": [
|
||||||
"XPF",
|
"XPF",
|
||||||
@@ -8954,6 +8997,9 @@
|
|||||||
"gold als kapitalanlage": "XAU",
|
"gold als kapitalanlage": "XAU",
|
||||||
"gold as an investment": "XAU",
|
"gold as an investment": "XAU",
|
||||||
"gold as currency": "XAU",
|
"gold as currency": "XAU",
|
||||||
|
"gospodarka wielkiej brytanii": "GBP",
|
||||||
|
"gospodarstvo ujedinjenog kraljevstva": "GBP",
|
||||||
|
"gospodarstvo združenega kraljestva": "GBP",
|
||||||
"gourde": "HTG",
|
"gourde": "HTG",
|
||||||
"gourde haiti": "HTG",
|
"gourde haiti": "HTG",
|
||||||
"gourde haitiano": "HTG",
|
"gourde haitiano": "HTG",
|
||||||
@@ -9373,6 +9419,7 @@
|
|||||||
"juaņs": "CNY",
|
"juaņs": "CNY",
|
||||||
"juhokoréjsky won": "KRW",
|
"juhokoréjsky won": "KRW",
|
||||||
"juhosudánska libra": "SSP",
|
"juhosudánska libra": "SSP",
|
||||||
|
"jungtinės karalystės ekonomika": "GBP",
|
||||||
"jungtinių arabų emyratų dirhamas": "AED",
|
"jungtinių arabų emyratų dirhamas": "AED",
|
||||||
"jungtinių valstijų doleris": "USD",
|
"jungtinių valstijų doleris": "USD",
|
||||||
"južnoafrički rand": "ZAR",
|
"južnoafrički rand": "ZAR",
|
||||||
@@ -9437,6 +9484,7 @@
|
|||||||
"karibi forint": "XCG",
|
"karibi forint": "XCG",
|
||||||
"karibia guldeno": "XCG",
|
"karibia guldeno": "XCG",
|
||||||
"karibischer gulden": "XCG",
|
"karibischer gulden": "XCG",
|
||||||
|
"karibisk gulden": "XCG",
|
||||||
"karibski goldinar": "XCG",
|
"karibski goldinar": "XCG",
|
||||||
"karibský gulden": "XCG",
|
"karibský gulden": "XCG",
|
||||||
"karipski gulden": "XCG",
|
"karipski gulden": "XCG",
|
||||||
@@ -9497,6 +9545,9 @@
|
|||||||
"kina papua nugini": "PGK",
|
"kina papua nugini": "PGK",
|
||||||
"kina papuana": "PGK",
|
"kina papuana": "PGK",
|
||||||
"kina papuásia": "PGK",
|
"kina papuásia": "PGK",
|
||||||
|
"kinh tế anh": "GBP",
|
||||||
|
"kinh tế vương quốc anh": "GBP",
|
||||||
|
"kinh tế vương quốc liên hiệp anh và bắc ireland": "GBP",
|
||||||
"kip": "LAK",
|
"kip": "LAK",
|
||||||
"kip laos": "LAK",
|
"kip laos": "LAK",
|
||||||
"kip laosiano": "LAK",
|
"kip laosiano": "LAK",
|
||||||
@@ -11141,6 +11192,7 @@
|
|||||||
"põhja korea won": "KPW",
|
"põhja korea won": "KPW",
|
||||||
"põhja makedoonia denaar": "MKD",
|
"põhja makedoonia denaar": "MKD",
|
||||||
"prata como investimento": "XAG",
|
"prata como investimento": "XAG",
|
||||||
|
"produits agricole de l'angleterre": "GBP",
|
||||||
"pula": "BWP",
|
"pula": "BWP",
|
||||||
"pula botswana": "BWP",
|
"pula botswana": "BWP",
|
||||||
"pula botswanais": "BWP",
|
"pula botswanais": "BWP",
|
||||||
@@ -11191,6 +11243,7 @@
|
|||||||
"qatarisk rial": "QAR",
|
"qatarisk rial": "QAR",
|
||||||
"qäpik": "AZN",
|
"qäpik": "AZN",
|
||||||
"qindarka": "ALL",
|
"qindarka": "ALL",
|
||||||
|
"quanza": "AOA",
|
||||||
"quetzal": "GTQ",
|
"quetzal": "GTQ",
|
||||||
"quetzal guatemala": "GTQ",
|
"quetzal guatemala": "GTQ",
|
||||||
"quetzal guatemalteco": "GTQ",
|
"quetzal guatemalteco": "GTQ",
|
||||||
@@ -11516,6 +11569,7 @@
|
|||||||
"rupia del pakistan": "PKR",
|
"rupia del pakistan": "PKR",
|
||||||
"rupia dell'india": "INR",
|
"rupia dell'india": "INR",
|
||||||
"rupia delle seychelles": "SCR",
|
"rupia delle seychelles": "SCR",
|
||||||
|
"rupia din seychelles": "SCR",
|
||||||
"rupia do nepal": "NPR",
|
"rupia do nepal": "NPR",
|
||||||
"rupia do paquistão": "PKR",
|
"rupia do paquistão": "PKR",
|
||||||
"rupia do seri lanca": "LKR",
|
"rupia do seri lanca": "LKR",
|
||||||
@@ -11571,6 +11625,7 @@
|
|||||||
],
|
],
|
||||||
"rupie indiană": "INR",
|
"rupie indiană": "INR",
|
||||||
"rupie indiane": "INR",
|
"rupie indiane": "INR",
|
||||||
|
"rupie seychelloză": "SCR",
|
||||||
"rupies índies": "INR",
|
"rupies índies": "INR",
|
||||||
"rupija": [
|
"rupija": [
|
||||||
"NPR",
|
"NPR",
|
||||||
@@ -12000,6 +12055,10 @@
|
|||||||
"sterliņu mārciņa": "GBP",
|
"sterliņu mārciņa": "GBP",
|
||||||
"stērliņu mārciņa": "GBP",
|
"stērliņu mārciņa": "GBP",
|
||||||
"stn": "STN",
|
"stn": "STN",
|
||||||
|
"storbritannien och irlands ekonomi": "GBP",
|
||||||
|
"storbritannien och nordirlands ekonomi": "GBP",
|
||||||
|
"storbritanniens ekonomi": "GBP",
|
||||||
|
"storbritanniens økonomi": "GBP",
|
||||||
"stredoafrický frank": "XAF",
|
"stredoafrický frank": "XAF",
|
||||||
"středoafrický frank": "XAF",
|
"středoafrický frank": "XAF",
|
||||||
"sucre": "XSU",
|
"sucre": "XSU",
|
||||||
@@ -12049,6 +12108,7 @@
|
|||||||
"suriye lirası": "SYP",
|
"suriye lirası": "SYP",
|
||||||
"suudi arabistan riyali": "SAR",
|
"suudi arabistan riyali": "SAR",
|
||||||
"suudi riyali": "SAR",
|
"suudi riyali": "SAR",
|
||||||
|
"suurbritannia majandus": "GBP",
|
||||||
"suurbritannia nael": "GBP",
|
"suurbritannia nael": "GBP",
|
||||||
"suurbritannia naelsterling": "GBP",
|
"suurbritannia naelsterling": "GBP",
|
||||||
"suvereni bolivar": "VES",
|
"suvereni bolivar": "VES",
|
||||||
@@ -12155,6 +12215,7 @@
|
|||||||
"švicarski frank": "CHF",
|
"švicarski frank": "CHF",
|
||||||
"švýcarský frank": "CHF",
|
"švýcarský frank": "CHF",
|
||||||
"șekel nou": "ILS",
|
"șekel nou": "ILS",
|
||||||
|
"șiling somalez": "SOS",
|
||||||
"şekel": "ILS",
|
"şekel": "ILS",
|
||||||
"şili pesosu": "CLP",
|
"şili pesosu": "CLP",
|
||||||
"s₣": "CHF",
|
"s₣": "CHF",
|
||||||
@@ -12497,6 +12558,8 @@
|
|||||||
"uguiya": "MRU",
|
"uguiya": "MRU",
|
||||||
"ugx": "UGX",
|
"ugx": "UGX",
|
||||||
"ui": "UYI",
|
"ui": "UYI",
|
||||||
|
"uk economy": "GBP",
|
||||||
|
"uk's economy": "GBP",
|
||||||
"ukl": "GBP",
|
"ukl": "GBP",
|
||||||
"ukraina grivna": "UAH",
|
"ukraina grivna": "UAH",
|
||||||
"ukraina hrivno": "UAH",
|
"ukraina hrivno": "UAH",
|
||||||
@@ -12537,6 +12600,8 @@
|
|||||||
"unidades de inversion": "MXV",
|
"unidades de inversion": "MXV",
|
||||||
"unidades de inversión": "MXV",
|
"unidades de inversión": "MXV",
|
||||||
"united arab emirates dirham": "AED",
|
"united arab emirates dirham": "AED",
|
||||||
|
"united kingdom economy": "GBP",
|
||||||
|
"united kingdom's economy": "GBP",
|
||||||
"united states dollar": [
|
"united states dollar": [
|
||||||
"USN",
|
"USN",
|
||||||
"USD"
|
"USD"
|
||||||
@@ -12638,6 +12703,7 @@
|
|||||||
"venemaa rubla": "RUB",
|
"venemaa rubla": "RUB",
|
||||||
"venezuelai bolívar": "VES",
|
"venezuelai bolívar": "VES",
|
||||||
"venezuelan digital bolívar": "VED",
|
"venezuelan digital bolívar": "VED",
|
||||||
|
"verenigd koninkrijk economie": "GBP",
|
||||||
"verenigde arabiese emirate dirham": "AED",
|
"verenigde arabiese emirate dirham": "AED",
|
||||||
"verenigde arabische emiraten dirham": "AED",
|
"verenigde arabische emiraten dirham": "AED",
|
||||||
"ves": "VES",
|
"ves": "VES",
|
||||||
@@ -12669,6 +12735,12 @@
|
|||||||
"wir euro": "CHE",
|
"wir euro": "CHE",
|
||||||
"wir franc": "CHW",
|
"wir franc": "CHW",
|
||||||
"wir franken": "CHW",
|
"wir franken": "CHW",
|
||||||
|
"wirtschaft": "GBP",
|
||||||
|
"wirtschaft des vereinigten königreichs": "GBP",
|
||||||
|
"wirtschaft im vereinigten königreich": "GBP",
|
||||||
|
"wirtschaft in dem vereinigten königreich": "GBP",
|
||||||
|
"wirtschaft vom vereinigten königreich": "GBP",
|
||||||
|
"wirtschaft von dem vereinigten königreich": "GBP",
|
||||||
"wit russische roebel": "BYN",
|
"wit russische roebel": "BYN",
|
||||||
"won": "KRW",
|
"won": "KRW",
|
||||||
"won bắc triều tiên": "KPW",
|
"won bắc triều tiên": "KPW",
|
||||||
@@ -12762,6 +12834,7 @@
|
|||||||
"yeşil burun adaları eskudosu": "CVE",
|
"yeşil burun adaları eskudosu": "CVE",
|
||||||
"yên nhật": "JPY",
|
"yên nhật": "JPY",
|
||||||
"yhdistyneen kuningaskunnan punta": "GBP",
|
"yhdistyneen kuningaskunnan punta": "GBP",
|
||||||
|
"yhdistyneen kuningaskunnan talous": "GBP",
|
||||||
"yhdistyneiden arabiemiraattien dirhami": "AED",
|
"yhdistyneiden arabiemiraattien dirhami": "AED",
|
||||||
"yhdysvaltain dollari": "USD",
|
"yhdysvaltain dollari": "USD",
|
||||||
"ytl": "TRY",
|
"ytl": "TRY",
|
||||||
@@ -13511,6 +13584,8 @@
|
|||||||
"египетский фунт": "EGP",
|
"египетский фунт": "EGP",
|
||||||
"единая система региональных взаиморасчётов": "XSU",
|
"единая система региональных взаиморасчётов": "XSU",
|
||||||
"единая система региональных взаиморасчетов": "XSU",
|
"единая система региональных взаиморасчетов": "XSU",
|
||||||
|
"економіка великобританії": "GBP",
|
||||||
|
"економіка великої британії": "GBP",
|
||||||
"енглеска фунта": "GBP",
|
"енглеска фунта": "GBP",
|
||||||
"еритрейська накфа": "ERN",
|
"еритрейська накфа": "ERN",
|
||||||
"еритрејска накфа": "ERN",
|
"еритрејска накфа": "ERN",
|
||||||
@@ -13567,6 +13642,8 @@
|
|||||||
"израелски шекел": "ILS",
|
"израелски шекел": "ILS",
|
||||||
"израильский новый шекель": "ILS",
|
"израильский новый шекель": "ILS",
|
||||||
"източнокарибски долар": "XCD",
|
"източнокарибски долар": "XCD",
|
||||||
|
"икономика на великобритания": "GBP",
|
||||||
|
"икономика на обединеното кралство": "GBP",
|
||||||
"индийска рупия": "INR",
|
"индийска рупия": "INR",
|
||||||
"индийская рупия": "INR",
|
"индийская рупия": "INR",
|
||||||
"индијска рупија": "INR",
|
"индијска рупија": "INR",
|
||||||
@@ -13980,6 +14057,7 @@
|
|||||||
"PLZ",
|
"PLZ",
|
||||||
"PLN"
|
"PLN"
|
||||||
],
|
],
|
||||||
|
"привреда уједињеног краљевства": "GBP",
|
||||||
"пула": "BWP",
|
"пула": "BWP",
|
||||||
"південно африканський ранд": "ZAR",
|
"південно африканський ранд": "ZAR",
|
||||||
"південнокорейська вона": "KRW",
|
"південнокорейська вона": "KRW",
|
||||||
@@ -14067,6 +14145,7 @@
|
|||||||
"севернокорејски вон": "KPW",
|
"севернокорејски вон": "KPW",
|
||||||
"северо корейская вона": "KPW",
|
"северо корейская вона": "KPW",
|
||||||
"северокорейская вона": "KPW",
|
"северокорейская вона": "KPW",
|
||||||
|
"седі": "GHS",
|
||||||
"сейшел рупиясе": "SCR",
|
"сейшел рупиясе": "SCR",
|
||||||
"сейшелска рупия": "SCR",
|
"сейшелска рупия": "SCR",
|
||||||
"сейшельская рупия": "SCR",
|
"сейшельская рупия": "SCR",
|
||||||
@@ -14119,6 +14198,8 @@
|
|||||||
"старый румынский лей": "RON",
|
"старый румынский лей": "RON",
|
||||||
"стерлинг фунты": "GBP",
|
"стерлинг фунты": "GBP",
|
||||||
"стерлиң фунты": "GBP",
|
"стерлиң фунты": "GBP",
|
||||||
|
"стопанство на великобритания": "GBP",
|
||||||
|
"стопанство на обединеното кралство": "GBP",
|
||||||
"суверен боливар": "VES",
|
"суверен боливар": "VES",
|
||||||
"суверенний болівар": "VES",
|
"суверенний болівар": "VES",
|
||||||
"суверенный боливар": "VES",
|
"суверенный боливар": "VES",
|
||||||
@@ -14369,6 +14450,7 @@
|
|||||||
"шриланкийска рупия": "LKR",
|
"шриланкийска рупия": "LKR",
|
||||||
"шриланчанска рупија": "LKR",
|
"шриланчанска рупија": "LKR",
|
||||||
"щатски долар": "USD",
|
"щатски долар": "USD",
|
||||||
|
"экономика великобритании": "GBP",
|
||||||
"эритрейская накфа": "ERN",
|
"эритрейская накфа": "ERN",
|
||||||
"эритрея накфасы": "ERN",
|
"эритрея накфасы": "ERN",
|
||||||
"эсватини лилангение": "SZL",
|
"эсватини лилангение": "SZL",
|
||||||
@@ -14518,6 +14600,8 @@
|
|||||||
"יואן סיני": "CNY",
|
"יואן סיני": "CNY",
|
||||||
"ין יפני": "JPY",
|
"ין יפני": "JPY",
|
||||||
"כארתולי לארי": "GEL",
|
"כארתולי לארי": "GEL",
|
||||||
|
"כלכלת בריטניה": "GBP",
|
||||||
|
"כלכלת הממלכה המאוחדת": "GBP",
|
||||||
"כתר דני": "DKK",
|
"כתר דני": "DKK",
|
||||||
"כתר נורבגי": "NOK",
|
"כתר נורבגי": "NOK",
|
||||||
"כתר נורווגי": "NOK",
|
"כתר נורווגי": "NOK",
|
||||||
@@ -14665,6 +14749,7 @@
|
|||||||
"استثمار البلاتين": "XPT",
|
"استثمار البلاتين": "XPT",
|
||||||
"استثمار الذهب": "XAU",
|
"استثمار الذهب": "XAU",
|
||||||
"استثمار الفضة": "XAG",
|
"استثمار الفضة": "XAG",
|
||||||
|
"اقتصاد المملكة المتحدة": "GBP",
|
||||||
"الاستثمار في الذهب": "XAU",
|
"الاستثمار في الذهب": "XAU",
|
||||||
"الأوقية الموريتانية": "MRU",
|
"الأوقية الموريتانية": "MRU",
|
||||||
"البات": "THB",
|
"البات": "THB",
|
||||||
@@ -14718,6 +14803,7 @@
|
|||||||
"أوقية": "MRU",
|
"أوقية": "MRU",
|
||||||
"أوقية موريتانية": "MRU",
|
"أوقية موريتانية": "MRU",
|
||||||
"أوقيه موريتانيه": "MRU",
|
"أوقيه موريتانيه": "MRU",
|
||||||
|
"إقتصاد بريطانى": "GBP",
|
||||||
"إيسكودو جزر الرأس الأخضر": "CVE",
|
"إيسكودو جزر الرأس الأخضر": "CVE",
|
||||||
"بات": "THB",
|
"بات": "THB",
|
||||||
"بات تايلاندي": "THB",
|
"بات تايلاندي": "THB",
|
||||||
@@ -15100,6 +15186,7 @@
|
|||||||
"মালদ্বীপীয় রুফিয়াহ": "MVR",
|
"মালদ্বীপীয় রুফিয়াহ": "MVR",
|
||||||
"মিয়ানমার ক্যত": "MMK",
|
"মিয়ানমার ক্যত": "MMK",
|
||||||
"মিশরীয় পাউন্ড": "EGP",
|
"মিশরীয় পাউন্ড": "EGP",
|
||||||
|
"যুক্তরাজ্যের অর্থনীতি": "GBP",
|
||||||
"রুশ রুবল": "RUB",
|
"রুশ রুবল": "RUB",
|
||||||
"রেনমিনবি": "CNY",
|
"রেনমিনবি": "CNY",
|
||||||
"রেন্মিন্বি": "CNY",
|
"রেন্মিন্বি": "CNY",
|
||||||
@@ -15731,6 +15818,7 @@
|
|||||||
"엔": "JPY",
|
"엔": "JPY",
|
||||||
"엔화": "JPY",
|
"엔화": "JPY",
|
||||||
"영국 파운드": "GBP",
|
"영국 파운드": "GBP",
|
||||||
|
"영국의 경제": "GBP",
|
||||||
"예멘 리알": "YER",
|
"예멘 리알": "YER",
|
||||||
"예멘 리얄": "YER",
|
"예멘 리얄": "YER",
|
||||||
"예멘리얄": "YER",
|
"예멘리얄": "YER",
|
||||||
@@ -15938,9 +16026,11 @@
|
|||||||
"イエメン・リアル": "YER",
|
"イエメン・リアル": "YER",
|
||||||
"イエメン・リヤル": "YER",
|
"イエメン・リヤル": "YER",
|
||||||
"イエメン・リヤール": "YER",
|
"イエメン・リヤール": "YER",
|
||||||
|
"イギリスの経済": "GBP",
|
||||||
"イギリスの通貨": "GBP",
|
"イギリスの通貨": "GBP",
|
||||||
"イギリスポンド": "GBP",
|
"イギリスポンド": "GBP",
|
||||||
"イギリス・ポンド": "GBP",
|
"イギリス・ポンド": "GBP",
|
||||||
|
"イギリス経済": "GBP",
|
||||||
"イラクの通貨": "IQD",
|
"イラクの通貨": "IQD",
|
||||||
"イラク・ディナール": "IQD",
|
"イラク・ディナール": "IQD",
|
||||||
"イランの通貨": "IRR",
|
"イランの通貨": "IRR",
|
||||||
@@ -16242,6 +16332,7 @@
|
|||||||
"英ポンド": "GBP",
|
"英ポンド": "GBP",
|
||||||
"西アフリカcfaフラン": "XOF",
|
"西アフリカcfaフラン": "XOF",
|
||||||
"豪ドル": "AUD",
|
"豪ドル": "AUD",
|
||||||
|
"財政・経済政策": "GBP",
|
||||||
"越南銅": "VND",
|
"越南銅": "VND",
|
||||||
"金投資": "XAU",
|
"金投資": "XAU",
|
||||||
"韓国ウォン": "KRW",
|
"韓国ウォン": "KRW",
|
||||||
|
|||||||
@@ -81,6 +81,7 @@
|
|||||||
"ca": "ca",
|
"ca": "ca",
|
||||||
"ckb": "ckb",
|
"ckb": "ckb",
|
||||||
"cs": "cs",
|
"cs": "cs",
|
||||||
|
"cv": "cv",
|
||||||
"cy": "cy",
|
"cy": "cy",
|
||||||
"da": "da",
|
"da": "da",
|
||||||
"de": "de",
|
"de": "de",
|
||||||
@@ -130,7 +131,6 @@
|
|||||||
"ne": "ne",
|
"ne": "ne",
|
||||||
"nl": "nl",
|
"nl": "nl",
|
||||||
"no": "no",
|
"no": "no",
|
||||||
"ny": "ny",
|
|
||||||
"om": "om",
|
"om": "om",
|
||||||
"pa": "pa",
|
"pa": "pa",
|
||||||
"pl": "pl",
|
"pl": "pl",
|
||||||
@@ -8446,6 +8446,7 @@
|
|||||||
"IR",
|
"IR",
|
||||||
"IS",
|
"IS",
|
||||||
"IT",
|
"IT",
|
||||||
|
"JE",
|
||||||
"JM",
|
"JM",
|
||||||
"JO",
|
"JO",
|
||||||
"JP",
|
"JP",
|
||||||
@@ -8475,6 +8476,7 @@
|
|||||||
"MC",
|
"MC",
|
||||||
"MD",
|
"MD",
|
||||||
"ME",
|
"ME",
|
||||||
|
"MF",
|
||||||
"MG",
|
"MG",
|
||||||
"MH",
|
"MH",
|
||||||
"MK",
|
"MK",
|
||||||
@@ -8541,6 +8543,7 @@
|
|||||||
"SS",
|
"SS",
|
||||||
"ST",
|
"ST",
|
||||||
"SV",
|
"SV",
|
||||||
|
"SX",
|
||||||
"SY",
|
"SY",
|
||||||
"SZ",
|
"SZ",
|
||||||
"TC",
|
"TC",
|
||||||
@@ -8688,6 +8691,7 @@
|
|||||||
"th": "thai",
|
"th": "thai",
|
||||||
"ti": "tigrinya",
|
"ti": "tigrinya",
|
||||||
"tk": "turkmen",
|
"tk": "turkmen",
|
||||||
|
"to": "tonga",
|
||||||
"tr": "turkish",
|
"tr": "turkish",
|
||||||
"tt": "tatar",
|
"tt": "tatar",
|
||||||
"uk": "ukrainian",
|
"uk": "ukrainian",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
],
|
],
|
||||||
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
|
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
|
||||||
"versions": [
|
"versions": [
|
||||||
"152.0",
|
"153.0",
|
||||||
"151.0"
|
"152.0"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ fragment SXNG_query on Query {
|
|||||||
|
|
||||||
def setup(_) -> bool:
|
def setup(_) -> bool:
|
||||||
global SXNG_query # pylint: disable=global-statement
|
global SXNG_query # pylint: disable=global-statement
|
||||||
rand_str: str = "".join(random.choice(string.ascii_letters) for _ in range(5))
|
rand_str: str = "".join(random.choices(string.ascii_letters, k=5))
|
||||||
SXNG_query = SXNG_query.replace("SXNG_query", "PhotoSearchPaginationContainer_query_1" + rand_str)
|
SXNG_query = SXNG_query.replace("SXNG_query", "PhotoSearchPaginationContainer_query_1" + rand_str)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ base_url = "https://api.bilibili.com/x/web-interface/search/type"
|
|||||||
|
|
||||||
cookie = {
|
cookie = {
|
||||||
"innersign": "0",
|
"innersign": "0",
|
||||||
"buvid3": "".join(random.choice(string.hexdigits) for _ in range(16)) + "infoc",
|
"buvid3": "".join(random.choices(string.hexdigits, k=16)) + "infoc",
|
||||||
"i-wanna-go-back": "-1",
|
"i-wanna-go-back": "-1",
|
||||||
"b_ut": "7",
|
"b_ut": "7",
|
||||||
"FEED_LIVE_VERSION": "V8",
|
"FEED_LIVE_VERSION": "V8",
|
||||||
|
|||||||
66
searx/engines/keenable.py
Normal file
66
searx/engines/keenable.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Keenable is a fast web search with keyless mode support"""
|
||||||
|
|
||||||
|
import typing as t
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
from searx.extended_types import SXNG_Response
|
||||||
|
from searx.result_types import EngineResults
|
||||||
|
from searx.utils import searxng_useragent
|
||||||
|
|
||||||
|
if t.TYPE_CHECKING:
|
||||||
|
from searx.search.processors import OnlineParams
|
||||||
|
|
||||||
|
about = {
|
||||||
|
"website": "https://keenable.ai",
|
||||||
|
"official_api_documentation": "https://docs.keenable.ai",
|
||||||
|
"use_official_api": True,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": "JSON",
|
||||||
|
}
|
||||||
|
api_key = ""
|
||||||
|
""" Optional API Key. You can create a key at `the official website
|
||||||
|
<https://keenable.ai/signup>'_ if you need higher rate limits."""
|
||||||
|
|
||||||
|
categories = ["general"]
|
||||||
|
|
||||||
|
base_url = "https://api.keenable.ai"
|
||||||
|
keenable_mode = "pro"
|
||||||
|
|
||||||
|
|
||||||
|
def request(query: str, params: "OnlineParams"):
|
||||||
|
if api_key:
|
||||||
|
params["url"] = f"{base_url}/v1/search"
|
||||||
|
params["headers"]["X-API-KEY"] = api_key
|
||||||
|
else:
|
||||||
|
params["url"] = f"{base_url}/v1/search/public"
|
||||||
|
|
||||||
|
params["method"] = "POST"
|
||||||
|
params["headers"]["X-Keenable-Title"] = searxng_useragent()
|
||||||
|
params["json"] = {"query": query, "mode": keenable_mode}
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp: "SXNG_Response") -> EngineResults:
|
||||||
|
res = EngineResults()
|
||||||
|
|
||||||
|
results: list[dict[str, str]] = resp.json()["results"] # type: ignore[reportAny]
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
published = None
|
||||||
|
pub = result.get("published_at")
|
||||||
|
if pub:
|
||||||
|
try:
|
||||||
|
published = datetime.fromisoformat(pub.rstrip("Z"))
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
res.add(
|
||||||
|
res.types.MainResult(
|
||||||
|
url=result["url"],
|
||||||
|
title=result["title"],
|
||||||
|
content=result["description"] or result["snippet"],
|
||||||
|
publishedDate=published,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return res
|
||||||
@@ -1,305 +0,0 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
||||||
"""Presearch supports the search types listed in :py:obj:`search_type` (general,
|
|
||||||
images, videos, news).
|
|
||||||
|
|
||||||
Configured ``presarch`` engines:
|
|
||||||
|
|
||||||
.. code:: yaml
|
|
||||||
|
|
||||||
- name: presearch
|
|
||||||
engine: presearch
|
|
||||||
search_type: search
|
|
||||||
categories: [general, web]
|
|
||||||
|
|
||||||
- name: presearch images
|
|
||||||
...
|
|
||||||
search_type: images
|
|
||||||
categories: [images, web]
|
|
||||||
|
|
||||||
- name: presearch videos
|
|
||||||
...
|
|
||||||
search_type: videos
|
|
||||||
categories: [general, web]
|
|
||||||
|
|
||||||
- name: presearch news
|
|
||||||
...
|
|
||||||
search_type: news
|
|
||||||
categories: [news, web]
|
|
||||||
|
|
||||||
.. hint::
|
|
||||||
|
|
||||||
By default Presearch's video category is intentionally placed into::
|
|
||||||
|
|
||||||
categories: [general, web]
|
|
||||||
|
|
||||||
|
|
||||||
Search type ``video``
|
|
||||||
=====================
|
|
||||||
|
|
||||||
The results in the video category are most often links to pages that contain a
|
|
||||||
video, for instance many links from Preasearch's video category link content
|
|
||||||
from facebook (aka Meta) or Twitter (aka X). Since these are not real links to
|
|
||||||
video streams SearXNG can't use the video template for this and if SearXNG can't
|
|
||||||
use this template, then the user doesn't want to see these hits in the videos
|
|
||||||
category.
|
|
||||||
|
|
||||||
|
|
||||||
Languages & Regions
|
|
||||||
===================
|
|
||||||
|
|
||||||
In Presearch there are languages for the UI and regions for narrowing down the
|
|
||||||
search. If we set "auto" for the region in the WEB-UI of Presearch and cookie
|
|
||||||
``use_local_search_results=false``, then the defaults are set for both (the
|
|
||||||
language and the region) from the ``Accept-Language`` header.
|
|
||||||
|
|
||||||
Since the region is already "auto" by default, we only need to set the
|
|
||||||
``use_local_search_results`` cookie and send the ``Accept-Language`` header. We
|
|
||||||
have to set these values in both requests we send to Presearch; in the first
|
|
||||||
request to get the request-ID from Presearch and in the final request to get the
|
|
||||||
result list.
|
|
||||||
|
|
||||||
The time format returned by Presearch varies depending on the language set.
|
|
||||||
Multiple different formats can be supported by using ``dateutil`` parser, but
|
|
||||||
it doesn't support formats such as "N time ago", "vor N time" (German),
|
|
||||||
"Hace N time" (Spanish). Because of this, the dates are simply joined together
|
|
||||||
with the rest of other metadata.
|
|
||||||
|
|
||||||
|
|
||||||
Implementations
|
|
||||||
===============
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
from urllib.parse import urlencode, urlparse
|
|
||||||
from searx import locales
|
|
||||||
from searx.network import get
|
|
||||||
from searx.utils import gen_useragent, html_to_text, parse_duration_string
|
|
||||||
|
|
||||||
about = {
|
|
||||||
"website": "https://presearch.io",
|
|
||||||
"wikidata_id": "Q7240905",
|
|
||||||
"official_api_documentation": "https://docs.presearch.io/nodes/api",
|
|
||||||
"use_official_api": False,
|
|
||||||
"require_api_key": False,
|
|
||||||
"results": "JSON",
|
|
||||||
}
|
|
||||||
paging = True
|
|
||||||
safesearch = True
|
|
||||||
time_range_support = True
|
|
||||||
categories = ["general", "web"] # general, images, videos, news
|
|
||||||
|
|
||||||
# HTTP2 requests immediately get blocked by a CAPTCHA
|
|
||||||
enable_http2 = False
|
|
||||||
|
|
||||||
search_type = "search"
|
|
||||||
"""must be any of ``search``, ``images``, ``videos``, ``news``"""
|
|
||||||
|
|
||||||
base_url = "https://presearch.com"
|
|
||||||
safesearch_map = {0: 'false', 1: 'true', 2: 'true'}
|
|
||||||
|
|
||||||
|
|
||||||
def init(_):
|
|
||||||
if search_type not in ['search', 'images', 'videos', 'news']:
|
|
||||||
raise ValueError(f'presearch search_type: {search_type}')
|
|
||||||
|
|
||||||
|
|
||||||
def _get_request_id(query, params):
|
|
||||||
|
|
||||||
args = {
|
|
||||||
"q": query,
|
|
||||||
"page": params["pageno"],
|
|
||||||
}
|
|
||||||
|
|
||||||
if params["time_range"]:
|
|
||||||
args["time"] = params["time_range"]
|
|
||||||
|
|
||||||
url = f"{base_url}/{search_type}?{urlencode(args)}"
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
'User-Agent': gen_useragent(),
|
|
||||||
'Cookie': (
|
|
||||||
f"b=1;"
|
|
||||||
f" presearch_session=;"
|
|
||||||
f" use_local_search_results=false;"
|
|
||||||
f" use_safe_search={safesearch_map[params['safesearch']]}"
|
|
||||||
),
|
|
||||||
}
|
|
||||||
if params['searxng_locale'] != 'all':
|
|
||||||
l = locales.get_locale(params['searxng_locale'])
|
|
||||||
|
|
||||||
# Presearch narrows down the search by region. In SearXNG when the user
|
|
||||||
# does not set a region (e.g. 'en-CA' / canada) we cannot hand over a region.
|
|
||||||
|
|
||||||
# We could possibly use searx.locales.get_official_locales to determine
|
|
||||||
# in which regions this language is an official one, but then we still
|
|
||||||
# wouldn't know which region should be given more weight / Presearch
|
|
||||||
# performs an IP-based geolocation of the user, we don't want that in
|
|
||||||
# SearXNG ;-)
|
|
||||||
|
|
||||||
if l and l.territory:
|
|
||||||
headers['Accept-Language'] = f"{l.language}-{l.territory},{l.language};" "q=0.9,*;" "q=0.5"
|
|
||||||
|
|
||||||
resp = get(url, headers=headers, timeout=5)
|
|
||||||
|
|
||||||
for line in resp.text.split("\n"):
|
|
||||||
if "window.searchId = " in line:
|
|
||||||
return line.split("= ")[1][:-1].replace('"', ""), resp.cookies
|
|
||||||
|
|
||||||
raise RuntimeError("Couldn't find any request id for presearch")
|
|
||||||
|
|
||||||
|
|
||||||
def request(query, params):
|
|
||||||
request_id, cookies = _get_request_id(query, params)
|
|
||||||
params["headers"]["Accept"] = "application/json"
|
|
||||||
params["url"] = f"{base_url}/results?id={request_id}"
|
|
||||||
params["cookies"] = cookies
|
|
||||||
|
|
||||||
return params
|
|
||||||
|
|
||||||
|
|
||||||
def _strip_leading_strings(text):
|
|
||||||
for x in ['wikipedia', 'google']:
|
|
||||||
if text.lower().endswith(x):
|
|
||||||
text = text[: -len(x)]
|
|
||||||
return text.strip()
|
|
||||||
|
|
||||||
|
|
||||||
def _fix_title(title, url):
|
|
||||||
"""
|
|
||||||
Titles from Presearch shows domain + title without spacing, and HTML
|
|
||||||
This function removes these 2 issues.
|
|
||||||
Transforming "translate.google.co.in<em>Google</em> Translate" into "Google Translate"
|
|
||||||
"""
|
|
||||||
parsed_url = urlparse(url)
|
|
||||||
domain = parsed_url.netloc
|
|
||||||
title = html_to_text(title)
|
|
||||||
# Fixes issue where domain would show up in the title
|
|
||||||
# translate.google.co.inGoogle Translate -> Google Translate
|
|
||||||
if (
|
|
||||||
title.startswith(domain)
|
|
||||||
and len(title) > len(domain)
|
|
||||||
and not title.startswith(domain + "/")
|
|
||||||
and not title.startswith(domain + " ")
|
|
||||||
):
|
|
||||||
title = title.removeprefix(domain)
|
|
||||||
return title
|
|
||||||
|
|
||||||
|
|
||||||
def parse_search_query(json_results):
|
|
||||||
results = []
|
|
||||||
if not json_results:
|
|
||||||
return results
|
|
||||||
|
|
||||||
for item in json_results.get('specialSections', {}).get('topStoriesCompact', {}).get('data', []):
|
|
||||||
result = {
|
|
||||||
'url': item['link'],
|
|
||||||
'title': _fix_title(item['title'], item['link']),
|
|
||||||
'thumbnail': item['image'],
|
|
||||||
'content': '',
|
|
||||||
'metadata': item.get('source'),
|
|
||||||
}
|
|
||||||
results.append(result)
|
|
||||||
|
|
||||||
for item in json_results.get('standardResults', []):
|
|
||||||
result = {
|
|
||||||
'url': item['link'],
|
|
||||||
'title': _fix_title(item['title'], item['link']),
|
|
||||||
'content': html_to_text(item['description']),
|
|
||||||
}
|
|
||||||
results.append(result)
|
|
||||||
|
|
||||||
info = json_results.get('infoSection', {}).get('data')
|
|
||||||
if info:
|
|
||||||
attributes = []
|
|
||||||
for item in info.get('about', []):
|
|
||||||
|
|
||||||
text = html_to_text(item)
|
|
||||||
if ':' in text:
|
|
||||||
# split text into key / value
|
|
||||||
label, value = text.split(':', 1)
|
|
||||||
else:
|
|
||||||
# In other languages (tested with zh-TW) a colon is represented
|
|
||||||
# by a different symbol --> then we split at the first space.
|
|
||||||
label, value = text.split(' ', 1)
|
|
||||||
label = label[:-1]
|
|
||||||
|
|
||||||
value = _strip_leading_strings(value)
|
|
||||||
attributes.append({'label': label, 'value': value})
|
|
||||||
content = []
|
|
||||||
for item in [info.get('subtitle'), info.get('description')]:
|
|
||||||
if not item:
|
|
||||||
continue
|
|
||||||
item = _strip_leading_strings(html_to_text(item))
|
|
||||||
if item:
|
|
||||||
content.append(item)
|
|
||||||
|
|
||||||
results.append(
|
|
||||||
{
|
|
||||||
'infobox': info['title'],
|
|
||||||
'id': info['title'],
|
|
||||||
'img_src': info.get('image'),
|
|
||||||
'content': ' | '.join(content),
|
|
||||||
'attributes': attributes,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def response(resp):
|
|
||||||
results = []
|
|
||||||
json_resp = resp.json()
|
|
||||||
|
|
||||||
if search_type == 'search':
|
|
||||||
results = parse_search_query(json_resp.get('results', {}))
|
|
||||||
|
|
||||||
elif search_type == 'images':
|
|
||||||
for item in json_resp.get('images', []):
|
|
||||||
results.append(
|
|
||||||
{
|
|
||||||
'template': 'images.html',
|
|
||||||
'title': html_to_text(item['title']),
|
|
||||||
'url': item.get('link'),
|
|
||||||
'img_src': item.get('image'),
|
|
||||||
'thumbnail_src': item.get('thumbnail'),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
elif search_type == 'videos':
|
|
||||||
# The results in the video category are most often links to pages that contain
|
|
||||||
# a video and not to a video stream --> SearXNG can't use the video template.
|
|
||||||
|
|
||||||
for item in json_resp.get('videos', []):
|
|
||||||
duration = item.get('duration')
|
|
||||||
if duration:
|
|
||||||
duration = parse_duration_string(duration)
|
|
||||||
|
|
||||||
results.append(
|
|
||||||
{
|
|
||||||
'title': html_to_text(item['title']),
|
|
||||||
'url': item.get('link'),
|
|
||||||
'content': item.get('description', ''),
|
|
||||||
'thumbnail': item.get('image'),
|
|
||||||
'length': duration,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
elif search_type == 'news':
|
|
||||||
for item in json_resp.get('news', []):
|
|
||||||
source = item.get('source')
|
|
||||||
# Bug on their end, time sometimes returns "</a>"
|
|
||||||
time = html_to_text(item.get('time')).strip()
|
|
||||||
metadata = [source]
|
|
||||||
if time != "":
|
|
||||||
metadata.append(time)
|
|
||||||
|
|
||||||
results.append(
|
|
||||||
{
|
|
||||||
'title': html_to_text(item['title']),
|
|
||||||
'url': item.get('link'),
|
|
||||||
'content': html_to_text(item.get('description', '')),
|
|
||||||
'metadata': ' / '.join(metadata),
|
|
||||||
'thumbnail': item.get('image'),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return results
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
||||||
"""Reddit"""
|
|
||||||
|
|
||||||
import json
|
|
||||||
from datetime import datetime
|
|
||||||
from urllib.parse import urlencode, urljoin, urlparse
|
|
||||||
|
|
||||||
# about
|
|
||||||
about = {
|
|
||||||
"website": 'https://www.reddit.com/',
|
|
||||||
"wikidata_id": 'Q1136',
|
|
||||||
"official_api_documentation": 'https://www.reddit.com/dev/api',
|
|
||||||
"use_official_api": True,
|
|
||||||
"require_api_key": False,
|
|
||||||
"results": 'JSON',
|
|
||||||
}
|
|
||||||
|
|
||||||
# engine dependent config
|
|
||||||
categories = ['social media']
|
|
||||||
page_size = 25
|
|
||||||
|
|
||||||
# search-url
|
|
||||||
base_url = 'https://www.reddit.com/'
|
|
||||||
search_url = base_url + 'search.json?{query}'
|
|
||||||
|
|
||||||
|
|
||||||
def request(query, params):
|
|
||||||
|
|
||||||
query = urlencode({'q': query, 'limit': page_size})
|
|
||||||
params['url'] = search_url.format(query=query)
|
|
||||||
|
|
||||||
return params
|
|
||||||
|
|
||||||
|
|
||||||
def response(resp):
|
|
||||||
|
|
||||||
img_results = []
|
|
||||||
text_results = []
|
|
||||||
|
|
||||||
search_results = json.loads(resp.text)
|
|
||||||
|
|
||||||
# return empty array if there are no results
|
|
||||||
if 'data' not in search_results:
|
|
||||||
return []
|
|
||||||
|
|
||||||
posts = search_results.get('data', {}).get('children', [])
|
|
||||||
|
|
||||||
# process results
|
|
||||||
for post in posts:
|
|
||||||
data = post['data']
|
|
||||||
|
|
||||||
# extract post information
|
|
||||||
params = {'url': urljoin(base_url, data['permalink']), 'title': data['title']}
|
|
||||||
|
|
||||||
# if thumbnail field contains a valid URL, we need to change template
|
|
||||||
thumbnail = data['thumbnail']
|
|
||||||
url_info = urlparse(thumbnail)
|
|
||||||
# netloc & path
|
|
||||||
if url_info[1] != '' and url_info[2] != '':
|
|
||||||
params['img_src'] = data['url']
|
|
||||||
params['thumbnail_src'] = thumbnail
|
|
||||||
params['template'] = 'images.html'
|
|
||||||
img_results.append(params)
|
|
||||||
else:
|
|
||||||
created = datetime.fromtimestamp(data['created_utc'])
|
|
||||||
content = data['selftext']
|
|
||||||
if len(content) > 500:
|
|
||||||
content = content[:500] + '...'
|
|
||||||
params['content'] = content
|
|
||||||
params['publishedDate'] = created
|
|
||||||
text_results.append(params)
|
|
||||||
|
|
||||||
# show images first and text results second
|
|
||||||
return img_results + text_results
|
|
||||||
@@ -9,6 +9,7 @@ import codecs
|
|||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import random
|
import random
|
||||||
|
import string
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
@@ -43,8 +44,8 @@ paging = True
|
|||||||
|
|
||||||
base_url = "https://api.swisscows.com"
|
base_url = "https://api.swisscows.com"
|
||||||
|
|
||||||
CAESAR_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
CAESAR_ALPHABET = string.ascii_uppercase
|
||||||
NONCE_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"
|
NONCE_ALPHABET = string.ascii_letters + string.digits + "-._~"
|
||||||
|
|
||||||
time_range_map = {"day": "Day", "week": "Week", "month": "Month", "year": "Year"}
|
time_range_map = {"day": "Day", "week": "Week", "month": "Month", "year": "Year"}
|
||||||
|
|
||||||
@@ -92,7 +93,7 @@ def generate_nonce(length: int = 32) -> str:
|
|||||||
"""
|
"""
|
||||||
Generate a random char sequence with the given length.
|
Generate a random char sequence with the given length.
|
||||||
"""
|
"""
|
||||||
return "".join([random.choice(NONCE_ALPHABET) for _ in range(length)])
|
return "".join(random.choices(NONCE_ALPHABET, k=length))
|
||||||
|
|
||||||
|
|
||||||
def caesar_shift_with_switch_case(s: str, offset: int = 13) -> str:
|
def caesar_shift_with_switch_case(s: str, offset: int = 13) -> str:
|
||||||
|
|||||||
@@ -1461,6 +1461,12 @@ engines:
|
|||||||
description: "Demo index of Kavunka, a statistical search engine"
|
description: "Demo index of Kavunka, a statistical search engine"
|
||||||
results: HTML
|
results: HTML
|
||||||
|
|
||||||
|
- name: keenable
|
||||||
|
engine: keenable
|
||||||
|
shortcut: keen
|
||||||
|
disabled: true
|
||||||
|
inactive: true
|
||||||
|
|
||||||
- name: kozmonavt
|
- name: kozmonavt
|
||||||
engine: xpath
|
engine: xpath
|
||||||
search_url: https://kozmonavt.su/s?q={query}
|
search_url: https://kozmonavt.su/s?q={query}
|
||||||
@@ -2016,41 +2022,6 @@ engines:
|
|||||||
shortcut: poc
|
shortcut: poc
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: presearch
|
|
||||||
engine: presearch
|
|
||||||
search_type: search
|
|
||||||
categories: [general, web]
|
|
||||||
shortcut: ps
|
|
||||||
timeout: 4.0
|
|
||||||
disabled: true
|
|
||||||
|
|
||||||
- name: presearch images
|
|
||||||
engine: presearch
|
|
||||||
network: presearch
|
|
||||||
search_type: images
|
|
||||||
categories: [images, web]
|
|
||||||
timeout: 4.0
|
|
||||||
shortcut: psimg
|
|
||||||
disabled: true
|
|
||||||
|
|
||||||
- name: presearch videos
|
|
||||||
engine: presearch
|
|
||||||
network: presearch
|
|
||||||
search_type: videos
|
|
||||||
categories: [general, web]
|
|
||||||
timeout: 4.0
|
|
||||||
shortcut: psvid
|
|
||||||
disabled: true
|
|
||||||
|
|
||||||
- name: presearch news
|
|
||||||
engine: presearch
|
|
||||||
network: presearch
|
|
||||||
search_type: news
|
|
||||||
categories: [news, web]
|
|
||||||
timeout: 4.0
|
|
||||||
shortcut: psnews
|
|
||||||
disabled: true
|
|
||||||
|
|
||||||
- name: pub.dev
|
- name: pub.dev
|
||||||
engine: xpath
|
engine: xpath
|
||||||
shortcut: pd
|
shortcut: pd
|
||||||
@@ -2176,12 +2147,6 @@ engines:
|
|||||||
require_api_key: false
|
require_api_key: false
|
||||||
results: JSON
|
results: JSON
|
||||||
|
|
||||||
- name: reddit
|
|
||||||
engine: reddit
|
|
||||||
shortcut: re
|
|
||||||
page_size: 25
|
|
||||||
disabled: true
|
|
||||||
|
|
||||||
- name: reuters
|
- name: reuters
|
||||||
engine: reuters
|
engine: reuters
|
||||||
shortcut: reu
|
shortcut: reu
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ sxng_locales = (
|
|||||||
('bg', 'Български', '', 'Bulgarian', '\U0001f310'),
|
('bg', 'Български', '', 'Bulgarian', '\U0001f310'),
|
||||||
('bg-BG', 'Български', 'България', 'Bulgarian', '\U0001f1e7\U0001f1ec'),
|
('bg-BG', 'Български', 'България', 'Bulgarian', '\U0001f1e7\U0001f1ec'),
|
||||||
('ca', 'Català', '', 'Catalan', '\U0001f310'),
|
('ca', 'Català', '', 'Catalan', '\U0001f310'),
|
||||||
|
('ca-ES', 'Català', 'Espanya', 'Catalan', '\U0001f1ea\U0001f1f8'),
|
||||||
('cs', 'Čeština', '', 'Czech', '\U0001f310'),
|
('cs', 'Čeština', '', 'Czech', '\U0001f310'),
|
||||||
('cs-CZ', 'Čeština', 'Česko', 'Czech', '\U0001f1e8\U0001f1ff'),
|
('cs-CZ', 'Čeština', 'Česko', 'Czech', '\U0001f1e8\U0001f1ff'),
|
||||||
|
('cy', 'Cymraeg', '', 'Welsh', '\U0001f310'),
|
||||||
('da', 'Dansk', '', 'Danish', '\U0001f310'),
|
('da', 'Dansk', '', 'Danish', '\U0001f310'),
|
||||||
('da-DK', 'Dansk', 'Danmark', 'Danish', '\U0001f1e9\U0001f1f0'),
|
('da-DK', 'Dansk', 'Danmark', 'Danish', '\U0001f1e9\U0001f1f0'),
|
||||||
('de', 'Deutsch', '', 'German', '\U0001f310'),
|
('de', 'Deutsch', '', 'German', '\U0001f310'),
|
||||||
@@ -49,6 +51,7 @@ sxng_locales = (
|
|||||||
('es-VE', 'Español', 'Venezuela', 'Spanish', '\U0001f1fb\U0001f1ea'),
|
('es-VE', 'Español', 'Venezuela', 'Spanish', '\U0001f1fb\U0001f1ea'),
|
||||||
('et', 'Eesti', '', 'Estonian', '\U0001f310'),
|
('et', 'Eesti', '', 'Estonian', '\U0001f310'),
|
||||||
('et-EE', 'Eesti', 'Eesti', 'Estonian', '\U0001f1ea\U0001f1ea'),
|
('et-EE', 'Eesti', 'Eesti', 'Estonian', '\U0001f1ea\U0001f1ea'),
|
||||||
|
('fa', 'فارسی', '', 'Persian', '\U0001f310'),
|
||||||
('fi', 'Suomi', '', 'Finnish', '\U0001f310'),
|
('fi', 'Suomi', '', 'Finnish', '\U0001f310'),
|
||||||
('fi-FI', 'Suomi', 'Suomi', 'Finnish', '\U0001f1eb\U0001f1ee'),
|
('fi-FI', 'Suomi', 'Suomi', 'Finnish', '\U0001f1eb\U0001f1ee'),
|
||||||
('fil', 'Filipino', '', 'Filipino', '\U0001f310'),
|
('fil', 'Filipino', '', 'Filipino', '\U0001f310'),
|
||||||
@@ -74,6 +77,10 @@ sxng_locales = (
|
|||||||
('ja-JP', '日本語', '日本', 'Japanese', '\U0001f1ef\U0001f1f5'),
|
('ja-JP', '日本語', '日本', 'Japanese', '\U0001f1ef\U0001f1f5'),
|
||||||
('ko', '한국어', '', 'Korean', '\U0001f310'),
|
('ko', '한국어', '', 'Korean', '\U0001f310'),
|
||||||
('ko-KR', '한국어', '대한민국', 'Korean', '\U0001f1f0\U0001f1f7'),
|
('ko-KR', '한국어', '대한민국', 'Korean', '\U0001f1f0\U0001f1f7'),
|
||||||
|
('lt', 'Lietuvių', '', 'Lithuanian', '\U0001f310'),
|
||||||
|
('lt-LT', 'Lietuvių', 'Lietuva', 'Lithuanian', '\U0001f1f1\U0001f1f9'),
|
||||||
|
('lv', 'Latviešu', '', 'Latvian', '\U0001f310'),
|
||||||
|
('lv-LV', 'Latviešu', 'Latvija', 'Latvian', '\U0001f1f1\U0001f1fb'),
|
||||||
('mi', 'Māori', '', 'Māori', '\U0001f310'),
|
('mi', 'Māori', '', 'Māori', '\U0001f310'),
|
||||||
('mi-NZ', 'Māori', 'Aotearoa', 'Māori', '\U0001f1f3\U0001f1ff'),
|
('mi-NZ', 'Māori', 'Aotearoa', 'Māori', '\U0001f1f3\U0001f1ff'),
|
||||||
('nb', 'Norsk Bokmål', '', 'Norwegian Bokmål', '\U0001f310'),
|
('nb', 'Norsk Bokmål', '', 'Norwegian Bokmål', '\U0001f310'),
|
||||||
@@ -93,6 +100,9 @@ sxng_locales = (
|
|||||||
('ru', 'Русский', '', 'Russian', '\U0001f310'),
|
('ru', 'Русский', '', 'Russian', '\U0001f310'),
|
||||||
('ru-RU', 'Русский', 'Россия', 'Russian', '\U0001f1f7\U0001f1fa'),
|
('ru-RU', 'Русский', 'Россия', 'Russian', '\U0001f1f7\U0001f1fa'),
|
||||||
('sk', 'Slovenčina', '', 'Slovak', '\U0001f310'),
|
('sk', 'Slovenčina', '', 'Slovak', '\U0001f310'),
|
||||||
|
('sk-SK', 'Slovenčina', 'Slovensko', 'Slovak', '\U0001f1f8\U0001f1f0'),
|
||||||
|
('sl', 'Slovenščina', '', 'Slovenian', '\U0001f310'),
|
||||||
|
('sl-SI', 'Slovenščina', 'Slovenija', 'Slovenian', '\U0001f1f8\U0001f1ee'),
|
||||||
('sq', 'Shqip', '', 'Albanian', '\U0001f310'),
|
('sq', 'Shqip', '', 'Albanian', '\U0001f310'),
|
||||||
('sv', 'Svenska', '', 'Swedish', '\U0001f310'),
|
('sv', 'Svenska', '', 'Swedish', '\U0001f310'),
|
||||||
('sv-FI', 'Svenska', 'Finland', 'Swedish', '\U0001f1eb\U0001f1ee'),
|
('sv-FI', 'Svenska', 'Finland', 'Swedish', '\U0001f1eb\U0001f1ee'),
|
||||||
@@ -102,6 +112,7 @@ sxng_locales = (
|
|||||||
('tr', 'Türkçe', '', 'Turkish', '\U0001f310'),
|
('tr', 'Türkçe', '', 'Turkish', '\U0001f310'),
|
||||||
('tr-TR', 'Türkçe', 'Türkiye', 'Turkish', '\U0001f1f9\U0001f1f7'),
|
('tr-TR', 'Türkçe', 'Türkiye', 'Turkish', '\U0001f1f9\U0001f1f7'),
|
||||||
('uk', 'Українська', '', 'Ukrainian', '\U0001f310'),
|
('uk', 'Українська', '', 'Ukrainian', '\U0001f310'),
|
||||||
|
('uk-UA', 'Українська', 'Україна', 'Ukrainian', '\U0001f1fa\U0001f1e6'),
|
||||||
('vi', 'Tiếng Việt', '', 'Vietnamese', '\U0001f310'),
|
('vi', 'Tiếng Việt', '', 'Vietnamese', '\U0001f310'),
|
||||||
('vi-VN', 'Tiếng Việt', 'Việt Nam', 'Vietnamese', '\U0001f1fb\U0001f1f3'),
|
('vi-VN', 'Tiếng Việt', 'Việt Nam', 'Vietnamese', '\U0001f1fb\U0001f1f3'),
|
||||||
('zh', '中文', '', 'Chinese', '\U0001f310'),
|
('zh', '中文', '', 'Chinese', '\U0001f310'),
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from tests import SearxTestCase
|
|||||||
|
|
||||||
|
|
||||||
def random_string(length, choices=string.ascii_letters):
|
def random_string(length, choices=string.ascii_letters):
|
||||||
return ''.join(random.choice(choices) for _ in range(length))
|
return ''.join(random.choices(choices, k=length))
|
||||||
|
|
||||||
|
|
||||||
class TestUtils(SearxTestCase):
|
class TestUtils(SearxTestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user