diff options
| author | 2025-05-18 12:00:19 -0400 | |
|---|---|---|
| committer | 2025-05-18 12:00:19 -0400 | |
| commit | 01f852081b1291da7fc342976bf5228ffb618736 (patch) | |
| tree | 9701e47aaa34e1fd777cea4371d17103f5d90932 /src/portal/patches | |
| parent | cb342b234defc1205de5d8b10ddf79deae0a551a (diff) | |
| download | camu-01f852081b1291da7fc342976bf5228ffb618736.tar.gz camu-01f852081b1291da7fc342976bf5228ffb618736.tar.bz2 camu-01f852081b1291da7fc342976bf5228ffb618736.zip | |
Portal update
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/portal/patches')
| -rw-r--r-- | src/portal/patches/instagrapi_no_android.diff | 17 | ||||
| -rw-r--r-- | src/portal/patches/pixivpy_missing_is_followed.diff | 13 | ||||
| -rw-r--r-- | src/portal/patches/pixivpy_reauth.diff | 83 | ||||
| -rw-r--r-- | src/portal/patches/searxng_disable_engines_default.diff | 3675 | ||||
| -rw-r--r-- | src/portal/patches/snscrape_auth.diff | 43 |
5 files changed, 63 insertions, 3768 deletions
diff --git a/src/portal/patches/instagrapi_no_android.diff b/src/portal/patches/instagrapi_no_android.diff deleted file mode 100644 index 6f4fd34..0000000 --- a/src/portal/patches/instagrapi_no_android.diff +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/instagrapi/mixins/private.py b/instagrapi/mixins/private.py -index 9db04b0..2b17d75 100644 ---- a/instagrapi/mixins/private.py -+++ b/instagrapi/mixins/private.py -@@ -129,9 +129,9 @@ class PrivateRequestMixin: - # X-IG-WWW-Claim: hmac.AR3zruvyGTlwHvVd2ACpGCWLluOppXX4NAVDV-iYslo9CaDd - "X-Bloks-Is-Layout-RTL": "false", - "X-Bloks-Is-Panorama-Enabled": "true", -- "X-IG-Device-ID": self.uuid, -- "X-IG-Family-Device-ID": self.phone_id, -- "X-IG-Android-ID": self.android_device_id, -+ #"X-IG-Device-ID": self.uuid, -+ #"X-IG-Family-Device-ID": self.phone_id, -+ #"X-IG-Android-ID": self.android_device_id, - "X-IG-Timezone-Offset": str(self.timezone_offset), - "X-IG-Connection-Type": "WIFI", - "X-IG-Capabilities": "3brTvx0=", # "3brTvwE=" in instabot diff --git a/src/portal/patches/pixivpy_missing_is_followed.diff b/src/portal/patches/pixivpy_missing_is_followed.diff new file mode 100644 index 0000000..0d9674b --- /dev/null +++ b/src/portal/patches/pixivpy_missing_is_followed.diff @@ -0,0 +1,13 @@ +diff --git a/pixivpy3/models.py b/pixivpy3/models.py +index fa9a950..b2d81a0 100644 +--- a/pixivpy3/models.py ++++ b/pixivpy3/models.py +@@ -113,7 +113,7 @@ class UserInfo(BasePixivpyModel): + account: str + profile_image_urls: ProfileImageUrls + comment: Optional[str] = None # present only on `user_detail` endpoint +- is_followed: Optional[bool] ++ is_followed: Optional[bool] = None + is_access_blocking_user: Optional[bool] = None + + diff --git a/src/portal/patches/pixivpy_reauth.diff b/src/portal/patches/pixivpy_reauth.diff index d9ce0d6..386adb3 100644 --- a/src/portal/patches/pixivpy_reauth.diff +++ b/src/portal/patches/pixivpy_reauth.diff @@ -1,30 +1,8 @@ -diff --git a/pixivpy3/aapi.py b/pixivpy3/aapi.py -index 1492385..ffc88c0 100644 ---- a/pixivpy3/aapi.py -+++ b/pixivpy3/aapi.py -@@ -76,12 +76,11 @@ class AppPixivAPI(BasePixivAPI): - ) -> Response: - headers_ = CaseInsensitiveDict(headers or {}) - if self.hosts != "https://app-api.pixiv.net": -- headers_["host"] = "app-api.pixiv.net" -- if "user-agent" not in headers_: -- # Set User-Agent if not provided -- headers_["app-os"] = "ios" -- headers_["app-os-version"] = "14.6" -- headers_["user-agent"] = "PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)" -+ headers_["Host"] = "app-api.pixiv.net" -+ headers_["App-OS"] = "ios" -+ headers_["App-OS-Version"] = "16.7.2" -+ headers_["App-Version"] = "7.19.6" -+ headers_["User-Agent"] = "PixivIOSApp/7.19.6 (iOS 16.7.2; iPhone13,2)" - - if not req_auth: - return self.requests_call(method, url, headers_, params, data) diff --git a/pixivpy3/api.py b/pixivpy3/api.py -index c26dda2..d0e1c0f 100644 +index 8a246b6..473c620 100644 --- a/pixivpy3/api.py +++ b/pixivpy3/api.py -@@ -26,6 +26,7 @@ class BasePixivAPI: +@@ -24,6 +24,7 @@ class BasePixivAPI: self.user_id: int | str = 0 self.access_token: str | None = None self.refresh_token: str | None = None @@ -32,65 +10,48 @@ index c26dda2..d0e1c0f 100644 self.hosts = "https://app-api.pixiv.net" # self.requests = requests.Session() -@@ -62,6 +63,11 @@ class BasePixivAPI: +@@ -63,6 +64,11 @@ class BasePixivAPI: stream: bool = False, ) -> Response: - """requests http/https call for Pixiv API""" -+ if self.token_expiration is not None and datetime.utcnow().timestamp() >= self.token_expiration: -+ # Token expired refresh auth -+ print('Token expired, refreshing auth') + """Requests http/https call for Pixiv API""" ++ if self.token_expiration and datetime.now().timestamp() >= self.token_expiration: ++ # Token expired refresh auth. ++ print("Token expired, refreshing auth.") + self.token_expiration = None + self.auth() merged_headers = self.additional_headers.copy() if headers: # Use the headers in the parameter to override the -@@ -118,23 +124,22 @@ class BasePixivAPI: +@@ -123,11 +129,12 @@ class BasePixivAPI: headers: ParamDict = None, ) -> ParsedJson: """Login with password, or use the refresh_token to acquire a new bearer token""" -- local_time = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S+00:00") -+ local_time = datetime.utcnow() +- local_time = datetime.now().strftime("%Y-%m-%dT%H:%M:%S+00:00") ++ local_time = datetime.now() + local_time_str = local_time.strftime("%Y-%m-%dT%H:%M:%S+00:00") headers_ = CaseInsensitiveDict(headers or {}) - headers_["x-client-time"] = local_time -- headers_["x-client-hash"] = hashlib.md5((local_time + self.hash_secret).encode("utf-8")).hexdigest() -- # Allow mock UA due to #171: https://github.com/upbit/pixivpy/issues/171 -- if "user-agent" not in headers_: -- headers_["app-os"] = "ios" -- headers_["app-os-version"] = "14.6" -- headers_["user-agent"] = "PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)" -- -+ headers_["X-Client-Time"] = local_time_str -+ headers_["X-Client-Hash"] = hashlib.md5((local_time_str + self.hash_secret).encode("utf-8")).hexdigest() -+ headers_["App-OS"] = "ios" -+ headers_["App-OS-Version"] = "16.7.2" -+ headers_["App-Version"] = "7.19.6" -+ headers_["User-Agent"] = "PixivIOSApp/7.19.6 (iOS 16.7.2; iPhone13,2)" - # noinspection PyUnresolvedReferences - if not hasattr(self, "hosts") or self.hosts == "https://app-api.pixiv.net": - auth_hosts = "https://oauth.secure.pixiv.net" - else: - # noinspection PyUnresolvedReferences - auth_hosts = self.hosts # BAPI解析成IP的场景 -- headers_["host"] = "oauth.secure.pixiv.net" -+ headers_["Host"] = "oauth.secure.pixiv.net" - url = "%s/auth/token" % auth_hosts - data = { - "get_secure_url": 1, -@@ -149,6 +154,8 @@ class BasePixivAPI: ++ headers_["x-client-time"] = local_time_str + headers_["x-client-hash"] = hashlib.md5( +- (local_time + self.hash_secret).encode("utf-8") ++ (local_time_str + self.hash_secret).encode("utf-8") + ).hexdigest() + # Allow mock UA due to #171: https://github.com/upbit/pixivpy/issues/171 + if "user-agent" not in headers_: +@@ -156,6 +163,8 @@ class BasePixivAPI: elif refresh_token or self.refresh_token: data["grant_type"] = "refresh_token" data["refresh_token"] = refresh_token or self.refresh_token + if self.access_token: + data["access_token"] = self.access_token else: - raise PixivError("[ERROR] auth() but no password or refresh_token is set.") - -@@ -174,6 +181,7 @@ class BasePixivAPI: + msg = "[ERROR] auth() but no password or refresh_token is set." + raise PixivError(msg) +@@ -183,6 +192,7 @@ class BasePixivAPI: self.user_id = token.response.user.id self.access_token = token.response.access_token self.refresh_token = token.response.refresh_token + self.token_expiration = local_time.timestamp() + token.response.expires_in except json.JSONDecodeError: + msg = f"Get access_token error! Response: {token}" raise PixivError( - "Get access_token error! Response: %s" % token, diff --git a/src/portal/patches/searxng_disable_engines_default.diff b/src/portal/patches/searxng_disable_engines_default.diff deleted file mode 100644 index 923519c..0000000 --- a/src/portal/patches/searxng_disable_engines_default.diff +++ /dev/null @@ -1,3675 +0,0 @@ -diff --git a/searx/settings.yml b/searx/settings.yml -index 6946b89d..92378207 100644 ---- a/searx/settings.yml -+++ b/searx/settings.yml -@@ -294,468 +294,6 @@ categories_as_tabs: - social media: - - engines: -- - name: 9gag -- engine: 9gag -- shortcut: 9g -- disabled: true -- -- - name: annas archive -- engine: annas_archive -- disabled: true -- shortcut: aa -- -- # - name: annas articles -- # engine: annas_archive -- # shortcut: aaa -- # # https://docs.searxng.org/dev/engines/online/annas_archive.html -- # aa_content: 'journal_article' # book_any .. magazine, standards_document -- # aa_ext: 'pdf' # pdf, epub, .. -- # aa_sort: 'newest' # newest, oldest, largest, smallest -- -- - name: apk mirror -- engine: apkmirror -- timeout: 4.0 -- shortcut: apkm -- disabled: true -- -- - name: apple app store -- engine: apple_app_store -- shortcut: aps -- disabled: true -- -- # Requires Tor -- - name: ahmia -- engine: ahmia -- categories: onions -- enable_http: true -- shortcut: ah -- -- - name: anaconda -- engine: xpath -- paging: true -- first_page_num: 0 -- search_url: https://anaconda.org/search?q={query}&page={pageno} -- results_xpath: //tbody/tr -- url_xpath: ./td/h5/a[last()]/@href -- title_xpath: ./td/h5 -- content_xpath: ./td[h5]/text() -- categories: it -- timeout: 6.0 -- shortcut: conda -- disabled: true -- -- - name: arch linux wiki -- engine: archlinux -- shortcut: al -- -- - name: artic -- engine: artic -- shortcut: arc -- timeout: 4.0 -- -- - name: arxiv -- engine: arxiv -- shortcut: arx -- timeout: 4.0 -- -- # tmp suspended: dh key too small -- # - name: base -- # engine: base -- # shortcut: bs -- -- - name: bandcamp -- engine: bandcamp -- shortcut: bc -- categories: music -- -- - name: wikipedia -- engine: wikipedia -- shortcut: wp -- # add "list" to the array to get results in the results list -- display_type: ["infobox"] -- base_url: 'https://{language}.wikipedia.org/' -- categories: [general] -- -- - name: bilibili -- engine: bilibili -- shortcut: bil -- disabled: true -- -- - name: bing -- engine: bing -- shortcut: bi -- disabled: true -- -- - name: bing images -- engine: bing_images -- shortcut: bii -- -- - name: bing news -- engine: bing_news -- shortcut: bin -- -- - name: bing videos -- engine: bing_videos -- shortcut: biv -- -- - name: bitbucket -- engine: xpath -- paging: true -- search_url: https://bitbucket.org/repo/all/{pageno}?name={query} -- url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href -- title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] -- content_xpath: //article[@class="repo-summary"]/p -- categories: [it, repos] -- timeout: 4.0 -- disabled: true -- shortcut: bb -- about: -- website: https://bitbucket.org/ -- wikidata_id: Q2493781 -- official_api_documentation: https://developer.atlassian.com/bitbucket -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: btdigg -- engine: btdigg -- shortcut: bt -- disabled: true -- -- - name: ccc-tv -- engine: xpath -- paging: false -- search_url: https://media.ccc.de/search/?q={query} -- url_xpath: //div[@class="caption"]/h3/a/@href -- title_xpath: //div[@class="caption"]/h3/a/text() -- content_xpath: //div[@class="caption"]/h4/@title -- categories: videos -- disabled: true -- shortcut: c3tv -- about: -- website: https://media.ccc.de/ -- wikidata_id: Q80729951 -- official_api_documentation: https://github.com/voc/voctoweb -- use_official_api: false -- require_api_key: false -- results: HTML -- # We don't set language: de here because media.ccc.de is not just -- # for a German audience. It contains many English videos and many -- # German videos have English subtitles. -- -- - name: openverse -- engine: openverse -- categories: images -- shortcut: opv -- -- - name: chefkoch -- engine: chefkoch -- shortcut: chef -- # to show premium or plus results too: -- # skip_premium: false -- -- # - name: core.ac.uk -- # engine: core -- # categories: science -- # shortcut: cor -- # # get your API key from: https://core.ac.uk/api-keys/register/ -- # api_key: 'unset' -- -- - name: crossref -- engine: crossref -- shortcut: cr -- timeout: 30 -- disabled: true -- -- - name: crowdview -- engine: json_engine -- shortcut: cv -- categories: general -- paging: false -- search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} -- results_query: results -- url_query: link -- title_query: title -- content_query: snippet -- disabled: true -- about: -- website: https://crowdview.ai/ -- -- - name: yep -- engine: json_engine -- shortcut: yep -- categories: general -- disabled: true -- paging: false -- content_html_to_text: true -- title_html_to_text: true -- search_url: https://api.yep.com/fs/1/?type=web&q={query}&no_correct=false&limit=100 -- results_query: 1/results -- title_query: title -- url_query: url -- content_query: snippet -- about: -- website: https://yep.com -- use_official_api: false -- require_api_key: false -- results: JSON -- -- - name: curlie -- engine: xpath -- shortcut: cl -- categories: general -- disabled: true -- paging: true -- lang_all: '' -- search_url: https://curlie.org/search?q={query}&lang={lang}&start={pageno}&stime=92452189 -- page_size: 20 -- results_xpath: //div[@id="site-list-content"]/div[@class="site-item"] -- url_xpath: ./div[@class="title-and-desc"]/a/@href -- title_xpath: ./div[@class="title-and-desc"]/a/div -- content_xpath: ./div[@class="title-and-desc"]/div[@class="site-descr"] -- about: -- website: https://curlie.org/ -- wikidata_id: Q60715723 -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: currency -- engine: currency_convert -- categories: general -- shortcut: cc -- -- - name: deezer -- engine: deezer -- shortcut: dz -- disabled: true -- -- - name: deviantart -- engine: deviantart -- shortcut: da -- timeout: 3.0 -- -- - name: ddg definitions -- engine: duckduckgo_definitions -- shortcut: ddd -- weight: 2 -- disabled: true -- tests: *tests_infobox -- -- # cloudflare protected -- # - name: digbt -- # engine: digbt -- # shortcut: dbt -- # timeout: 6.0 -- # disabled: true -- -- - name: docker hub -- engine: docker_hub -- shortcut: dh -- categories: [it, packages] -- -- - name: erowid -- engine: xpath -- paging: true -- first_page_num: 0 -- page_size: 30 -- search_url: https://www.erowid.org/search.php?q={query}&s={pageno} -- url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href -- title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() -- content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] -- categories: [] -- shortcut: ew -- disabled: true -- about: -- website: https://www.erowid.org/ -- wikidata_id: Q1430691 -- official_api_documentation: -- use_official_api: false -- require_api_key: false -- results: HTML -- -- # - name: elasticsearch -- # shortcut: es -- # engine: elasticsearch -- # base_url: http://localhost:9200 -- # username: elastic -- # password: changeme -- # index: my-index -- # # available options: match, simple_query_string, term, terms, custom -- # query_type: match -- # # if query_type is set to custom, provide your query here -- # #custom_query_json: {"query":{"match_all": {}}} -- # #show_metadata: false -- # disabled: true -- -- - name: wikidata -- engine: wikidata -- shortcut: wd -- timeout: 3.0 -- weight: 2 -- # add "list" to the array to get results in the results list -- display_type: ["infobox"] -- tests: *tests_infobox -- categories: [general] -- -- - name: duckduckgo -- engine: duckduckgo -- shortcut: ddg -- -- - name: duckduckgo images -- engine: duckduckgo_images -- shortcut: ddi -- timeout: 3.0 -- disabled: true -- -- - name: duckduckgo weather -- engine: duckduckgo_weather -- shortcut: ddw -- disabled: true -- -- - name: apple maps -- engine: apple_maps -- shortcut: apm -- disabled: true -- timeout: 5.0 -- -- - name: emojipedia -- engine: emojipedia -- timeout: 4.0 -- shortcut: em -- disabled: true -- -- - name: tineye -- engine: tineye -- shortcut: tin -- timeout: 9.0 -- disabled: true -- -- - name: etymonline -- engine: xpath -- paging: true -- search_url: https://etymonline.com/search?page={pageno}&q={query} -- url_xpath: //a[contains(@class, "word__name--")]/@href -- title_xpath: //a[contains(@class, "word__name--")] -- content_xpath: //section[contains(@class, "word__defination")] -- first_page_num: 1 -- shortcut: et -- categories: [dictionaries] -- about: -- website: https://www.etymonline.com/ -- wikidata_id: Q1188617 -- official_api_documentation: -- use_official_api: false -- require_api_key: false -- results: HTML -- -- # - name: ebay -- # engine: ebay -- # shortcut: eb -- # base_url: 'https://www.ebay.com' -- # disabled: true -- # timeout: 5 -- -- - name: 1x -- engine: www1x -- shortcut: 1x -- timeout: 3.0 -- disabled: true -- -- - name: fdroid -- engine: fdroid -- shortcut: fd -- disabled: true -- -- - name: flickr -- categories: images -- shortcut: fl -- # You can use the engine using the official stable API, but you need an API -- # key, see: https://www.flickr.com/services/apps/create/ -- # engine: flickr -- # api_key: 'apikey' # required! -- # Or you can use the html non-stable engine, activated by default -- engine: flickr_noapi -- -- - name: free software directory -- engine: mediawiki -- shortcut: fsd -- categories: [it, software wikis] -- base_url: https://directory.fsf.org/ -- search_type: title -- timeout: 5.0 -- disabled: true -- about: -- website: https://directory.fsf.org/ -- wikidata_id: Q2470288 -- -- # - name: freesound -- # engine: freesound -- # shortcut: fnd -- # disabled: true -- # timeout: 15.0 -- # API key required, see: https://freesound.org/docs/api/overview.html -- # api_key: MyAPIkey -- -- - name: frinkiac -- engine: frinkiac -- shortcut: frk -- disabled: true -- -- - name: genius -- engine: genius -- shortcut: gen -- -- - name: gentoo -- engine: gentoo -- shortcut: ge -- timeout: 10.0 -- -- - name: gitlab -- engine: json_engine -- paging: true -- search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno} -- url_query: web_url -- title_query: name_with_namespace -- content_query: description -- page_size: 20 -- categories: [it, repos] -- shortcut: gl -- timeout: 10.0 -- disabled: true -- about: -- website: https://about.gitlab.com/ -- wikidata_id: Q16639197 -- official_api_documentation: https://docs.gitlab.com/ee/api/ -- use_official_api: false -- require_api_key: false -- results: JSON -- -- - name: github -- engine: github -- shortcut: gh -- -- # This a Gitea service. If you would like to use a different instance, -- # change codeberg.org to URL of the desired Gitea host. Or you can create a -- # new engine by copying this and changing the name, shortcut and search_url. -- -- - name: codeberg -- engine: json_engine -- search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10 -- url_query: html_url -- title_query: name -- content_query: description -- categories: [it, repos] -- shortcut: cb -- disabled: true -- about: -- website: https://codeberg.org/ -- wikidata_id: -- official_api_documentation: https://try.gitea.io/api/swagger -- use_official_api: false -- require_api_key: false -- results: JSON -- - - name: google - engine: google - shortcut: go -@@ -774,1372 +312,1837 @@ engines: - # result_container: - # - ['one_title_contains', 'Salvador'] - -- - name: google news -- engine: google_news -- shortcut: gon -- # additional_tests: -- # android: *test_android -- -- - name: google videos -- engine: google_videos -- shortcut: gov -- # additional_tests: -- # android: *test_android -- -- - name: google scholar -- engine: google_scholar -- shortcut: gos -- -- - name: google play apps -- engine: google_play -- categories: [files, apps] -- shortcut: gpa -- play_categ: apps -- disabled: true -- -- - name: google play movies -- engine: google_play -- categories: videos -- shortcut: gpm -- play_categ: movies -- disabled: true -- -- - name: material icons -- engine: material_icons -- categories: images -- shortcut: mi -- disabled: true -- -- - name: gpodder -- engine: json_engine -- shortcut: gpod -- timeout: 4.0 -- paging: false -- search_url: https://gpodder.net/search.json?q={query} -- url_query: url -- title_query: title -- content_query: description -- page_size: 19 -- categories: music -- disabled: true -- about: -- website: https://gpodder.net -- wikidata_id: Q3093354 -- official_api_documentation: https://gpoddernet.readthedocs.io/en/latest/api/ -- use_official_api: false -- requires_api_key: false -- results: JSON -- -- - name: habrahabr -- engine: xpath -- paging: true -- search_url: https://habr.com/en/search/page{pageno}/?q={query} -- results_xpath: //article[contains(@class, "tm-articles-list__item")] -- url_xpath: .//a[@class="tm-title__link"]/@href -- title_xpath: .//a[@class="tm-title__link"] -- content_xpath: .//div[contains(@class, "article-formatted-body")] -- categories: it -- timeout: 4.0 -- disabled: true -- shortcut: habr -- about: -- website: https://habr.com/ -- wikidata_id: Q4494434 -- official_api_documentation: https://habr.com/en/docs/help/api/ -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: hoogle -- engine: xpath -- paging: true -- search_url: https://hoogle.haskell.org/?hoogle={query}&start={pageno} -- results_xpath: '//div[@class="result"]' -- title_xpath: './/div[@class="ans"]//a' -- url_xpath: './/div[@class="ans"]//a/@href' -- content_xpath: './/div[@class="from"]' -- page_size: 20 -- categories: [it, packages] -- shortcut: ho -- about: -- website: https://hoogle.haskell.org/ -- wikidata_id: Q34010 -- official_api_documentation: https://hackage.haskell.org/api -- use_official_api: false -- require_api_key: false -- results: JSON -- -- - name: imdb -- engine: imdb -- shortcut: imdb -- timeout: 6.0 -- disabled: true -- -- - name: ina -- engine: ina -- shortcut: in -- timeout: 6.0 -- disabled: true -- -- - name: invidious -- engine: invidious -- # Instanes will be selected randomly, see https://api.invidious.io/ for -- # instances that are stable (good uptime) and close to you. -- base_url: -- - https://invidious.io.lol -- - https://invidious.fdn.fr -- - https://yt.artemislena.eu -- - https://invidious.tiekoetter.com -- - https://invidious.flokinet.to -- - https://vid.puffyan.us -- - https://invidious.privacydev.net -- - https://inv.tux.pizza -- shortcut: iv -- timeout: 3.0 -- disabled: true -- -- - name: jisho -- engine: jisho -- shortcut: js -- timeout: 3.0 -- disabled: true -- -- - name: kickass -- engine: kickass -- shortcut: kc -- timeout: 4.0 -- disabled: true -- -- - name: lemmy communities -- engine: lemmy -- lemmy_type: Communities -- shortcut: leco -- -- - name: lemmy users -- engine: lemmy -- network: lemmy communities -- lemmy_type: Users -- shortcut: leus -- -- - name: lemmy posts -- engine: lemmy -- network: lemmy communities -- lemmy_type: Posts -- shortcut: lepo -- -- - name: lemmy comments -- engine: lemmy -- network: lemmy communities -- lemmy_type: Comments -- shortcut: lecom -- -- - name: library genesis -- engine: xpath -- search_url: https://libgen.fun/search.php?req={query} -- url_xpath: //a[contains(@href,"get.php?md5")]/@href -- title_xpath: //a[contains(@href,"book/")]/text()[1] -- content_xpath: //td/a[1][contains(@href,"=author")]/text() -- categories: files -- timeout: 7.0 -- disabled: true -- shortcut: lg -- about: -- website: https://libgen.fun/ -- wikidata_id: Q22017206 -- official_api_documentation: -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: z-library -- engine: zlibrary -- shortcut: zlib -- categories: files -- timeout: 7.0 -- -- - name: library of congress -- engine: loc -- shortcut: loc -- categories: images -- -- - name: lingva -- engine: lingva -- shortcut: lv -- # set lingva instance in url, by default it will use the official instance -- # url: https://lingva.ml -- -- - name: lobste.rs -- engine: xpath -- search_url: https://lobste.rs/search?utf8=%E2%9C%93&q={query}&what=stories&order=relevance -- results_xpath: //li[contains(@class, "story")] -- url_xpath: .//a[@class="u-url"]/@href -- title_xpath: .//a[@class="u-url"] -- content_xpath: .//a[@class="domain"] -- categories: it -- shortcut: lo -- timeout: 5.0 -- disabled: true -- about: -- website: https://lobste.rs/ -- wikidata_id: Q60762874 -- official_api_documentation: -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: azlyrics -- shortcut: lyrics -- engine: xpath -- timeout: 4.0 -- disabled: true -- categories: [music, lyrics] -- paging: true -- search_url: https://search.azlyrics.com/search.php?q={query}&w=lyrics&p={pageno} -- url_xpath: //td[@class="text-left visitedlyr"]/a/@href -- title_xpath: //span/b/text() -- content_xpath: //td[@class="text-left visitedlyr"]/a/small -- about: -- website: https://azlyrics.com -- wikidata_id: Q66372542 -- official_api_documentation: -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: metacpan -- engine: metacpan -- shortcut: cpan -- disabled: true -- number_of_results: 20 -- -- # - name: meilisearch -- # engine: meilisearch -- # shortcut: mes -- # enable_http: true -- # base_url: http://localhost:7700 -- # index: my-index -- -- - name: mixcloud -- engine: mixcloud -- shortcut: mc -- -- # MongoDB engine -- # Required dependency: pymongo -- # - name: mymongo -- # engine: mongodb -- # shortcut: md -- # exact_match_only: false -- # host: '127.0.0.1' -- # port: 27017 -- # enable_http: true -- # results_per_page: 20 -- # database: 'business' -- # collection: 'reviews' # name of the db collection -- # key: 'name' # key in the collection to search for -- -- - name: mwmbl -- engine: mwmbl -- # api_url: https://api.mwmbl.org -- shortcut: mwm -- disabled: true -- -- - name: npm -- engine: json_engine -- paging: true -- first_page_num: 0 -- search_url: https://api.npms.io/v2/search?q={query}&size=25&from={pageno} -- results_query: results -- url_query: package/links/npm -- title_query: package/name -- content_query: package/description -- page_size: 25 -- categories: [it, packages] -- disabled: true -- timeout: 5.0 -- shortcut: npm -- about: -- website: https://npms.io/ -- wikidata_id: Q7067518 -- official_api_documentation: https://api-docs.npms.io/ -- use_official_api: false -- require_api_key: false -- results: JSON -- -- - name: nyaa -- engine: nyaa -- shortcut: nt -- disabled: true -- -- - name: mankier -- engine: json_engine -- search_url: https://www.mankier.com/api/v2/mans/?q={query} -- results_query: results -- url_query: url -- title_query: name -- content_query: description -- categories: it -- shortcut: man -- about: -- website: https://www.mankier.com/ -- official_api_documentation: https://www.mankier.com/api -- use_official_api: true -- require_api_key: false -- results: JSON -- -- - name: odysee -- engine: odysee -- shortcut: od -- disabled: true -- -- - name: openairedatasets -- engine: json_engine -- paging: true -- search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} -- results_query: response/results/result -- url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ -- title_query: metadata/oaf:entity/oaf:result/title/$ -- content_query: metadata/oaf:entity/oaf:result/description/$ -- content_html_to_text: true -- categories: "science" -- shortcut: oad -- timeout: 5.0 -- about: -- website: https://www.openaire.eu/ -- wikidata_id: Q25106053 -- official_api_documentation: https://api.openaire.eu/ -- use_official_api: false -- require_api_key: false -- results: JSON -- -- - name: openairepublications -- engine: json_engine -- paging: true -- search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} -- results_query: response/results/result -- url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ -- title_query: metadata/oaf:entity/oaf:result/title/$ -- content_query: metadata/oaf:entity/oaf:result/description/$ -- content_html_to_text: true -- categories: science -- shortcut: oap -- timeout: 5.0 -- about: -- website: https://www.openaire.eu/ -- wikidata_id: Q25106053 -- official_api_documentation: https://api.openaire.eu/ -- use_official_api: false -- require_api_key: false -- results: JSON -- -- # - name: opensemanticsearch -- # engine: opensemantic -- # shortcut: oss -- # base_url: 'http://localhost:8983/solr/opensemanticsearch/' -- -- - name: openstreetmap -- engine: openstreetmap -- shortcut: osm -- -- - name: openrepos -- engine: xpath -- paging: true -- search_url: https://openrepos.net/search/node/{query}?page={pageno} -- url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href -- title_xpath: //li[@class="search-result"]//h3[@class="title"]/a -- content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] -- categories: files -- timeout: 4.0 -- disabled: true -- shortcut: or -- about: -- website: https://openrepos.net/ -- wikidata_id: -- official_api_documentation: -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: packagist -- engine: json_engine -- paging: true -- search_url: https://packagist.org/search.json?q={query}&page={pageno} -- results_query: results -- url_query: url -- title_query: name -- content_query: description -- categories: [it, packages] -- disabled: true -- timeout: 5.0 -- shortcut: pack -- about: -- website: https://packagist.org -- wikidata_id: Q108311377 -- official_api_documentation: https://packagist.org/apidoc -- use_official_api: true -- require_api_key: false -- results: JSON -- -- - name: pdbe -- engine: pdbe -- shortcut: pdb -- # Hide obsolete PDB entries. Default is not to hide obsolete structures -- # hide_obsolete: false -- -- - name: photon -- engine: photon -- shortcut: ph -- -- - name: piped -- engine: piped -- shortcut: ppd -- categories: videos -- piped_filter: videos -- timeout: 3.0 -- -- # URL to use as link and for embeds -- frontend_url: https://srv.piped.video -- # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ -- backend_url: -- - https://pipedapi.kavin.rocks -- - https://pipedapi-libre.kavin.rocks -- - https://pipedapi.adminforge.de -- -- - name: piped.music -- engine: piped -- network: piped -- shortcut: ppdm -- categories: music -- piped_filter: music_songs -- timeout: 3.0 -- -- - name: piratebay -- engine: piratebay -- shortcut: tpb -- # You may need to change this URL to a proxy if piratebay is blocked in your -- # country -- url: https://thepiratebay.org/ -- timeout: 3.0 -- -- # Required dependency: psychopg2 -- # - name: postgresql -- # engine: postgresql -- # database: postgres -- # username: postgres -- # password: postgres -- # limit: 10 -- # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' -- # shortcut : psql -- -- - name: pub.dev -- engine: xpath -- shortcut: pd -- search_url: https://pub.dev/packages?q={query}&page={pageno} -- paging: true -- results_xpath: //div[contains(@class,"packages-item")] -- url_xpath: ./div/h3/a/@href -- title_xpath: ./div/h3/a -- content_xpath: ./div/div/div[contains(@class,"packages-description")]/span -- categories: [packages, it] -- timeout: 3.0 -- disabled: true -- first_page_num: 1 -- about: -- website: https://pub.dev/ -- official_api_documentation: https://pub.dev/help/api -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: pubmed -- engine: pubmed -- shortcut: pub -- timeout: 3.0 -- -- - name: pypi -- shortcut: pypi -- engine: xpath -- paging: true -- search_url: https://pypi.org/search/?q={query}&page={pageno} -- results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"] -- url_xpath: ./@href -- title_xpath: ./h3/span[@class="package-snippet__name"] -- content_xpath: ./p -- suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"] -- first_page_num: 1 -- categories: [it, packages] -- about: -- website: https://pypi.org -- wikidata_id: Q2984686 -- official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: qwant -- qwant_categ: web -- engine: qwant -- shortcut: qw -- categories: [general, web] -- additional_tests: -- rosebud: *test_rosebud -- -- - name: qwant news -- qwant_categ: news -- engine: qwant -- shortcut: qwn -- categories: news -- network: qwant -- -- - name: qwant images -- qwant_categ: images -- engine: qwant -- shortcut: qwi -- categories: [images, web] -- network: qwant -- -- - name: qwant videos -- qwant_categ: videos -- engine: qwant -- shortcut: qwv -- categories: [videos, web] -- network: qwant -- -- # - name: library -- # engine: recoll -- # shortcut: lib -- # base_url: 'https://recoll.example.org/' -- # search_dir: '' -- # mount_prefix: /export -- # dl_prefix: 'https://download.example.org' -- # timeout: 30.0 -- # categories: files -- # disabled: true -- -- # - name: recoll library reference -- # engine: recoll -- # base_url: 'https://recoll.example.org/' -- # search_dir: reference -- # mount_prefix: /export -- # dl_prefix: 'https://download.example.org' -- # shortcut: libr -- # timeout: 30.0 -- # categories: files -- # disabled: true -- -- - name: reddit -- engine: reddit -- shortcut: re -- page_size: 25 -- -- # Required dependency: redis -- # - name: myredis -- # shortcut : rds -- # engine: redis_server -- # exact_match_only: false -- # host: '127.0.0.1' -- # port: 6379 -- # enable_http: true -- # password: '' -- # db: 0 -+ - name: bing images -+ engine: bing_images -+ shortcut: bii - -- # tmp suspended: bad certificate -- # - name: scanr structures -- # shortcut: scs -- # engine: scanr_structures -+ # - name: 9gag -+ # engine: 9gag -+ # shortcut: 9g - # disabled: true -- -- - name: sepiasearch -- engine: sepiasearch -- shortcut: sep -- -- - name: soundcloud -- engine: soundcloud -- shortcut: sc -- -- - name: stackoverflow -- engine: stackexchange -- shortcut: st -- api_site: 'stackoverflow' -- categories: [it, q&a] -- -- - name: askubuntu -- engine: stackexchange -- shortcut: ubuntu -- api_site: 'askubuntu' -- categories: [it, q&a] -- -- - name: internetarchivescholar -- engine: internet_archive_scholar -- shortcut: ias -- timeout: 5.0 -- -- - name: superuser -- engine: stackexchange -- shortcut: su -- api_site: 'superuser' -- categories: [it, q&a] -- -- - name: searchcode code -- engine: searchcode_code -- shortcut: scc -- disabled: true -- -- - name: framalibre -- engine: framalibre -- shortcut: frl -- disabled: true -- -- # - name: searx -- # engine: searx_engine -- # shortcut: se -- # instance_urls : -- # - http://127.0.0.1:8888/ -- # - ... -- # disabled: true -- -- - name: semantic scholar -- engine: semantic_scholar -- disabled: true -- shortcut: se -- -- # Spotify needs API credentials -- # - name: spotify -- # engine: spotify -- # shortcut: stf -- # api_client_id: ******* -- # api_client_secret: ******* -- -- # - name: solr -- # engine: solr -- # shortcut: slr -- # base_url: http://localhost:8983 -- # collection: collection_name -- # sort: '' # sorting: asc or desc -- # field_list: '' # comma separated list of field names to display on the UI -- # default_fields: '' # default field to query -- # query_fields: '' # query fields -- # enable_http: true -- -- # - name: springer nature -- # engine: springer -- # # get your API key from: https://dev.springernature.com/signup -- # # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601" -- # api_key: 'unset' -- # shortcut: springer -- # timeout: 15.0 -- -- - name: startpage -- engine: startpage -- shortcut: sp -- timeout: 6.0 -- disabled: true -- additional_tests: -- rosebud: *test_rosebud -- -- - name: tokyotoshokan -- engine: tokyotoshokan -- shortcut: tt -- timeout: 6.0 -- disabled: true -- -- - name: solidtorrents -- engine: solidtorrents -- shortcut: solid -- timeout: 4.0 -- base_url: -- - https://solidtorrents.to -- - https://bitsearch.to -- -- # For this demo of the sqlite engine download: -- # https://liste.mediathekview.de/filmliste-v2.db.bz2 -- # and unpack into searx/data/filmliste-v2.db -- # Query to test: "!demo concert" -- # -- # - name: demo -- # engine: sqlite -- # shortcut: demo -- # categories: general -- # result_template: default.html -- # database: searx/data/filmliste-v2.db -- # query_str: >- -- # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, -- # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, -- # description AS content -- # FROM film -- # WHERE title LIKE :wildcard OR description LIKE :wildcard -- # ORDER BY duration DESC -- -- - name: tagesschau -- engine: tagesschau -- shortcut: ts -- disabled: true -- -- - name: tmdb -- engine: xpath -- paging: true -- search_url: https://www.themoviedb.org/search?page={pageno}&query={query} -- results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] -- url_xpath: .//div[contains(@class,"poster")]/a/@href -- thumbnail_xpath: .//img/@src -- title_xpath: .//div[contains(@class,"title")]//h2 -- content_xpath: .//div[contains(@class,"overview")] -- shortcut: tm -- disabled: true -- -- # Requires Tor -- - name: torch -- engine: xpath -- paging: true -- search_url: -- http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and -- results_xpath: //table//tr -- url_xpath: ./td[2]/a -- title_xpath: ./td[2]/b -- content_xpath: ./td[2]/small -- categories: onions -- enable_http: true -- shortcut: tch -- -- # torznab engine lets you query any torznab compatible indexer. Using this -- # engine in combination with Jackett opens the possibility to query a lot of -- # public and private indexers directly from SearXNG. More details at: -- # https://docs.searxng.org/dev/engines/online/torznab.html -- # -- # - name: Torznab EZTV -- # engine: torznab -- # shortcut: eztv -- # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab -- # enable_http: true # if using localhost -- # api_key: xxxxxxxxxxxxxxx -- # show_magnet_links: true -- # show_torrent_files: false -- # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories -- # torznab_categories: # optional -- # - 2000 -- # - 5000 -- -- - name: twitter -- shortcut: tw -- engine: twitter -- disabled: true -- -- # tmp suspended - too slow, too many errors -- # - name: urbandictionary -- # engine : xpath -- # search_url : https://www.urbandictionary.com/define.php?term={query} -- # url_xpath : //*[@class="word"]/@href -- # title_xpath : //*[@class="def-header"] -- # content_xpath: //*[@class="meaning"] -- # shortcut: ud -- -- - name: unsplash -- engine: unsplash -- shortcut: us -- -- - name: yahoo -- engine: yahoo -- shortcut: yh -- disabled: true -- -- - name: yahoo news -- engine: yahoo_news -- shortcut: yhn -- -- - name: youtube -- shortcut: yt -- # You can use the engine using the official stable API, but you need an API -- # key See: https://console.developers.google.com/project -- # -- # engine: youtube_api -- # api_key: 'apikey' # required! -- # -- # Or you can use the html non-stable engine, activated by default -- engine: youtube_noapi -- -- - name: dailymotion -- engine: dailymotion -- shortcut: dm -- -- - name: vimeo -- engine: vimeo -- shortcut: vm -- -- - name: wiby -- engine: json_engine -- paging: true -- search_url: https://wiby.me/json/?q={query}&p={pageno} -- url_query: URL -- title_query: Title -- content_query: Snippet -- categories: [general, web] -- shortcut: wib -- disabled: true -- about: -- website: https://wiby.me/ -- -- - name: alexandria -- engine: json_engine -- shortcut: alx -- categories: general -- paging: true -- search_url: https://api.alexandria.org/?a=1&q={query}&p={pageno} -- results_query: results -- title_query: title -- url_query: url -- content_query: snippet -- timeout: 1.5 -- disabled: true -- about: -- website: https://alexandria.org/ -- official_api_documentation: https://github.com/alexandria-org/alexandria-api/raw/master/README.md -- use_official_api: true -- require_api_key: false -- results: JSON -- -- - name: wikibooks -- engine: mediawiki -- weight: 0.5 -- shortcut: wb -- categories: [general, wikimedia] -- base_url: "https://{language}.wikibooks.org/" -- search_type: text -- disabled: true -- about: -- website: https://www.wikibooks.org/ -- wikidata_id: Q367 -- -- - name: wikinews -- engine: mediawiki -- shortcut: wn -- categories: [news, wikimedia] -- base_url: "https://{language}.wikinews.org/" -- search_type: text -- srsort: create_timestamp_desc -- about: -- website: https://www.wikinews.org/ -- wikidata_id: Q964 -- -- - name: wikiquote -- engine: mediawiki -- weight: 0.5 -- shortcut: wq -- categories: [general, wikimedia] -- base_url: "https://{language}.wikiquote.org/" -- search_type: text -- disabled: true -- additional_tests: -- rosebud: *test_rosebud -- about: -- website: https://www.wikiquote.org/ -- wikidata_id: Q369 -- -- - name: wikisource -- engine: mediawiki -- weight: 0.5 -- shortcut: ws -- categories: [general, wikimedia] -- base_url: "https://{language}.wikisource.org/" -- search_type: text -- disabled: true -- about: -- website: https://www.wikisource.org/ -- wikidata_id: Q263 -- -- - name: wikispecies -- engine: mediawiki -- shortcut: wsp -- categories: [general, science, wikimedia] -- base_url: "https://species.wikimedia.org/" -- search_type: text -- disabled: true -- about: -- website: https://species.wikimedia.org/ -- wikidata_id: Q13679 -- -- - name: wiktionary -- engine: mediawiki -- shortcut: wt -- categories: [dictionaries, wikimedia] -- base_url: "https://{language}.wiktionary.org/" -- search_type: text -- about: -- website: https://www.wiktionary.org/ -- wikidata_id: Q151 -- -- - name: wikiversity -- engine: mediawiki -- weight: 0.5 -- shortcut: wv -- categories: [general, wikimedia] -- base_url: "https://{language}.wikiversity.org/" -- search_type: text -- disabled: true -- about: -- website: https://www.wikiversity.org/ -- wikidata_id: Q370 -- -- - name: wikivoyage -- engine: mediawiki -- weight: 0.5 -- shortcut: wy -- categories: [general, wikimedia] -- base_url: "https://{language}.wikivoyage.org/" -- search_type: text -- disabled: true -- about: -- website: https://www.wikivoyage.org/ -- wikidata_id: Q373 -- -- - name: wikicommons.images -- engine: wikicommons -- shortcut: wc -- categories: images -- number_of_results: 10 -- -- - name: wolframalpha -- shortcut: wa -- # You can use the engine using the official stable API, but you need an API -- # key. See: https://products.wolframalpha.com/api/ -- # -- # engine: wolframalpha_api -- # api_key: '' -- # -- # Or you can use the html non-stable engine, activated by default -- engine: wolframalpha_noapi -- timeout: 6.0 -- categories: general -- disabled: true -- -- - name: dictzone -- engine: dictzone -- shortcut: dc -- -- - name: mymemory translated -- engine: translated -- shortcut: tl -- timeout: 5.0 -- # You can use without an API key, but you are limited to 1000 words/day -- # See: https://mymemory.translated.net/doc/usagelimits.php -- # api_key: '' -- -- # Required dependency: mysql-connector-python -- # - name: mysql -- # engine: mysql_server -- # database: mydatabase -- # username: user -- # password: pass -- # limit: 10 -- # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' -- # shortcut: mysql -- -- - name: 1337x -- engine: 1337x -- shortcut: 1337x -- disabled: true -- -- - name: duden -- engine: duden -- shortcut: du -- disabled: true -- -- - name: seznam -- shortcut: szn -- engine: seznam -- disabled: true -- -- # - name: deepl -- # engine: deepl -- # shortcut: dpl -- # # You can use the engine using the official stable API, but you need an API key -- # # See: https://www.deepl.com/pro-api?cta=header-pro-api -- # api_key: '' # required! -- # timeout: 5.0 -- # disabled: true -- -- - name: mojeek -- shortcut: mjk -- engine: xpath -- paging: true -- categories: [general, web] -- search_url: https://www.mojeek.com/search?q={query}&s={pageno}&lang={lang}&lb={lang} -- results_xpath: //ul[@class="results-standard"]/li/a[@class="ob"] -- url_xpath: ./@href -- title_xpath: ../h2/a -- content_xpath: ..//p[@class="s"] -- suggestion_xpath: //div[@class="top-info"]/p[@class="top-info spell"]/em/a -- first_page_num: 0 -- page_size: 10 -- disabled: true -- about: -- website: https://www.mojeek.com/ -- wikidata_id: Q60747299 -- official_api_documentation: https://www.mojeek.com/services/api.html/ -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: moviepilot -- engine: moviepilot -- shortcut: mp -- disabled: true -- -- - name: naver -- shortcut: nvr -- categories: [general, web] -- engine: xpath -- paging: true -- search_url: https://search.naver.com/search.naver?where=webkr&sm=osp_hty&ie=UTF-8&query={query}&start={pageno} -- url_xpath: //a[@class="link_tit"]/@href -- title_xpath: //a[@class="link_tit"] -- content_xpath: //a[@class="total_dsc"]/div -- first_page_num: 1 -- page_size: 10 -- disabled: true -- about: -- website: https://www.naver.com/ -- wikidata_id: Q485639 -- official_api_documentation: https://developers.naver.com/docs/nmt/examples/ -- use_official_api: false -- require_api_key: false -- results: HTML -- language: ko -- -- - name: rubygems -- shortcut: rbg -- engine: xpath -- paging: true -- search_url: https://rubygems.org/search?page={pageno}&query={query} -- results_xpath: /html/body/main/div/a[@class="gems__gem"] -- url_xpath: ./@href -- title_xpath: ./span/h2 -- content_xpath: ./span/p -- suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a -- first_page_num: 1 -- categories: [it, packages] -- disabled: true -- about: -- website: https://rubygems.org/ -- wikidata_id: Q1853420 -- official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: peertube -- engine: peertube -- shortcut: ptb -- paging: true -- # alternatives see: https://instances.joinpeertube.org/instances -- # base_url: https://tube.4aem.com -- categories: videos -- disabled: true -- timeout: 6.0 -- -- - name: mediathekviewweb -- engine: mediathekviewweb -- shortcut: mvw -- disabled: true -- -- # - name: yacy -- # engine: yacy -- # shortcut: ya -- # base_url: http://localhost:8090 -- # # required if you aren't using HTTPS for your local yacy instance' -- # enable_http: true -- # timeout: 3.0 -- # # Yacy search mode. 'global' or 'local'. -- # search_mode: 'global' -- -- - name: rumble -- engine: rumble -- shortcut: ru -- base_url: https://rumble.com/ -- paging: true -- categories: videos -- disabled: true -- -- - name: wordnik -- engine: wordnik -- shortcut: def -- base_url: https://www.wordnik.com/ -- categories: [dictionaries] -- timeout: 5.0 -- -- - name: woxikon.de synonyme -- engine: xpath -- shortcut: woxi -- categories: [dictionaries] -- timeout: 5.0 -- disabled: true -- search_url: https://synonyme.woxikon.de/synonyme/{query}.php -- url_xpath: //div[@class="upper-synonyms"]/a/@href -- content_xpath: //div[@class="synonyms-list-group"] -- title_xpath: //div[@class="upper-synonyms"]/a -- no_result_for_http_status: [404] -- about: -- website: https://www.woxikon.de/ -- wikidata_id: # No Wikidata ID -- use_official_api: false -- require_api_key: false -- results: HTML -- language: de -- -- - name: seekr news -- engine: seekr -- shortcut: senews -- categories: news -- seekr_category: news -- disabled: true -- -- - name: seekr images -- engine: seekr -- network: seekr news -- shortcut: seimg -- categories: images -- seekr_category: images -- disabled: true -- -- - name: seekr videos -- engine: seekr -- network: seekr news -- shortcut: sevid -- categories: videos -- seekr_category: videos -- disabled: true -- -- - name: sjp.pwn -- engine: sjp -- shortcut: sjp -- base_url: https://sjp.pwn.pl/ -- timeout: 5.0 -- disabled: true -- -- - name: svgrepo -- engine: svgrepo -- shortcut: svg -- timeout: 10.0 -- disabled: true -- -- - name: wallhaven -- engine: wallhaven -- # api_key: abcdefghijklmnopqrstuvwxyz -- shortcut: wh -- -- # wikimini: online encyclopedia for children -- # The fulltext and title parameter is necessary for Wikimini because -- # sometimes it will not show the results and redirect instead -- - name: wikimini -- engine: xpath -- shortcut: wkmn -- search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search -- url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href -- title_xpath: //li//div[@class="mw-search-result-heading"]/a -- content_xpath: //li/div[@class="searchresult"] -- categories: general -- disabled: true -- about: -- website: https://wikimini.org/ -- wikidata_id: Q3568032 -- use_official_api: false -- require_api_key: false -- results: HTML -- language: fr -- -- - name: wttr.in -- engine: wttr -- shortcut: wttr -- timeout: 9.0 -- -- - name: yummly -- engine: yummly -- shortcut: yum -- disabled: true -- -- - name: brave -- engine: brave -- shortcut: br -- time_range_support: true -- paging: true -- categories: [general, web] -- brave_category: search -- # brave_spellcheck: true -- -- - name: brave.images -- engine: brave -- network: brave -- shortcut: brimg -- categories: [images, web] -- brave_category: images -- -- - name: brave.videos -- engine: brave -- network: brave -- shortcut: brvid -- categories: [videos, web] -- brave_category: videos -- -- - name: brave.news -- engine: brave -- network: brave -- shortcut: brnews -- categories: news -- brave_category: news -- -- - name: lib.rs -- shortcut: lrs -- engine: xpath -- search_url: https://lib.rs/search?q={query} -- results_xpath: /html/body/main/div/ol/li/a -- url_xpath: ./@href -- title_xpath: ./div[@class="h"]/h4 -- content_xpath: ./div[@class="h"]/p -- categories: [it, packages] -- disabled: true -- about: -- website: https://lib.rs -- wikidata_id: Q113486010 -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: sourcehut -- shortcut: srht -- engine: xpath -- paging: true -- search_url: https://sr.ht/projects?page={pageno}&search={query} -- results_xpath: (//div[@class="event-list"])[1]/div[@class="event"] -- url_xpath: ./h4/a[2]/@href -- title_xpath: ./h4/a[2] -- content_xpath: ./p -- first_page_num: 1 -- categories: [it, repos] -- disabled: true -- about: -- website: https://sr.ht -- wikidata_id: Q78514485 -- official_api_documentation: https://man.sr.ht/ -- use_official_api: false -- require_api_key: false -- results: HTML -- -- - name: goo -- shortcut: goo -- engine: xpath -- paging: true -- search_url: https://search.goo.ne.jp/web.jsp?MT={query}&FR={pageno}0 -- url_xpath: //div[@class="result"]/p[@class='title fsL1']/a/@href -- title_xpath: //div[@class="result"]/p[@class='title fsL1']/a -- content_xpath: //p[contains(@class,'url fsM')]/following-sibling::p -- first_page_num: 0 -- categories: [general, web] -- disabled: true -- timeout: 4.0 -- about: -- website: https://search.goo.ne.jp -- wikidata_id: Q249044 -- use_official_api: false -- require_api_key: false -- results: HTML -- language: ja -- -- - name: bt4g -- engine: bt4g -- shortcut: bt4g -- -- - name: pkg.go.dev -- engine: xpath -- shortcut: pgo -- search_url: https://pkg.go.dev/search?limit=100&m=package&q={query} -- results_xpath: /html/body/main/div[contains(@class,"SearchResults")]/div[not(@class)]/div[@class="SearchSnippet"] -- url_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a/@href -- title_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a -- content_xpath: ./p[@class="SearchSnippet-synopsis"] -- categories: [packages, it] -- timeout: 3.0 -- disabled: true -- about: -- website: https://pkg.go.dev/ -- use_official_api: false -- require_api_key: false -- results: HTML -- --# Doku engine lets you access to any Doku wiki instance: --# A public one or a privete/corporate one. --# - name: ubuntuwiki --# engine: doku --# shortcut: uw --# base_url: 'https://doc.ubuntu-fr.org' -- --# Be careful when enabling this engine if you are --# running a public instance. Do not expose any sensitive --# information. You can restrict access by configuring a list --# of access tokens under tokens. --# - name: git grep --# engine: command --# command: ['git', 'grep', '{{QUERY}}'] --# shortcut: gg --# tokens: [] --# disabled: true --# delimiter: --# chars: ':' --# keys: ['filepath', 'code'] -- --# Be careful when enabling this engine if you are --# running a public instance. Do not expose any sensitive --# information. You can restrict access by configuring a list --# of access tokens under tokens. --# - name: locate --# engine: command --# command: ['locate', '{{QUERY}}'] --# shortcut: loc --# tokens: [] --# disabled: true --# delimiter: --# chars: ' ' --# keys: ['line'] -- --# Be careful when enabling this engine if you are --# running a public instance. Do not expose any sensitive --# information. You can restrict access by configuring a list --# of access tokens under tokens. --# - name: find --# engine: command --# command: ['find', '.', '-name', '{{QUERY}}'] --# query_type: path --# shortcut: fnd --# tokens: [] --# disabled: true --# delimiter: --# chars: ' ' --# keys: ['line'] -- --# Be careful when enabling this engine if you are --# running a public instance. Do not expose any sensitive --# information. You can restrict access by configuring a list --# of access tokens under tokens. --# - name: pattern search in files --# engine: command --# command: ['fgrep', '{{QUERY}}'] --# shortcut: fgr --# tokens: [] --# disabled: true --# delimiter: --# chars: ' ' --# keys: ['line'] -- --# Be careful when enabling this engine if you are --# running a public instance. Do not expose any sensitive --# information. You can restrict access by configuring a list --# of access tokens under tokens. --# - name: regex search in files --# engine: command --# command: ['grep', '{{QUERY}}'] --# shortcut: gr --# tokens: [] --# disabled: true --# delimiter: --# chars: ' ' --# keys: ['line'] -+ # -+ # - name: annas archive -+ # engine: annas_archive -+ # disabled: true -+ # shortcut: aa -+ # -+ # # - name: annas articles -+ # # engine: annas_archive -+ # # shortcut: aaa -+ # # # https://docs.searxng.org/dev/engines/online/annas_archive.html -+ # # aa_content: 'journal_article' # book_any .. magazine, standards_document -+ # # aa_ext: 'pdf' # pdf, epub, .. -+ # # aa_sort: 'newest' # newest, oldest, largest, smallest -+ # -+ # - name: apk mirror -+ # engine: apkmirror -+ # timeout: 4.0 -+ # shortcut: apkm -+ # disabled: true -+ # -+ # - name: apple app store -+ # engine: apple_app_store -+ # shortcut: aps -+ # disabled: true -+ # -+ # # Requires Tor -+ # - name: ahmia -+ # engine: ahmia -+ # categories: onions -+ # enable_http: true -+ # shortcut: ah -+ # -+ # - name: anaconda -+ # engine: xpath -+ # paging: true -+ # first_page_num: 0 -+ # search_url: https://anaconda.org/search?q={query}&page={pageno} -+ # results_xpath: //tbody/tr -+ # url_xpath: ./td/h5/a[last()]/@href -+ # title_xpath: ./td/h5 -+ # content_xpath: ./td[h5]/text() -+ # categories: it -+ # timeout: 6.0 -+ # shortcut: conda -+ # disabled: true -+ # -+ # - name: arch linux wiki -+ # engine: archlinux -+ # shortcut: al -+ # -+ # - name: artic -+ # engine: artic -+ # shortcut: arc -+ # timeout: 4.0 -+ # -+ # - name: arxiv -+ # engine: arxiv -+ # shortcut: arx -+ # timeout: 4.0 -+ # -+ # # tmp suspended: dh key too small -+ # # - name: base -+ # # engine: base -+ # # shortcut: bs -+ # -+ # - name: bandcamp -+ # engine: bandcamp -+ # shortcut: bc -+ # categories: music -+ # -+ # - name: wikipedia -+ # engine: wikipedia -+ # shortcut: wp -+ # # add "list" to the array to get results in the results list -+ # display_type: ["infobox"] -+ # base_url: 'https://{language}.wikipedia.org/' -+ # categories: [general] -+ # -+ # - name: bilibili -+ # engine: bilibili -+ # shortcut: bil -+ # disabled: true -+ # -+ # - name: bing -+ # engine: bing -+ # shortcut: bi -+ # disabled: true -+ # -+ # -+ # - name: bing news -+ # engine: bing_news -+ # shortcut: bin -+ # -+ # - name: bing videos -+ # engine: bing_videos -+ # shortcut: biv -+ # -+ # - name: bitbucket -+ # engine: xpath -+ # paging: true -+ # search_url: https://bitbucket.org/repo/all/{pageno}?name={query} -+ # url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href -+ # title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] -+ # content_xpath: //article[@class="repo-summary"]/p -+ # categories: [it, repos] -+ # timeout: 4.0 -+ # disabled: true -+ # shortcut: bb -+ # about: -+ # website: https://bitbucket.org/ -+ # wikidata_id: Q2493781 -+ # official_api_documentation: https://developer.atlassian.com/bitbucket -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: btdigg -+ # engine: btdigg -+ # shortcut: bt -+ # disabled: true -+ # -+ # - name: ccc-tv -+ # engine: xpath -+ # paging: false -+ # search_url: https://media.ccc.de/search/?q={query} -+ # url_xpath: //div[@class="caption"]/h3/a/@href -+ # title_xpath: //div[@class="caption"]/h3/a/text() -+ # content_xpath: //div[@class="caption"]/h4/@title -+ # categories: videos -+ # disabled: true -+ # shortcut: c3tv -+ # about: -+ # website: https://media.ccc.de/ -+ # wikidata_id: Q80729951 -+ # official_api_documentation: https://github.com/voc/voctoweb -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # # We don't set language: de here because media.ccc.de is not just -+ # # for a German audience. It contains many English videos and many -+ # # German videos have English subtitles. -+ # -+ # - name: openverse -+ # engine: openverse -+ # categories: images -+ # shortcut: opv -+ # -+ # - name: chefkoch -+ # engine: chefkoch -+ # shortcut: chef -+ # # to show premium or plus results too: -+ # # skip_premium: false -+ # -+ # # - name: core.ac.uk -+ # # engine: core -+ # # categories: science -+ # # shortcut: cor -+ # # # get your API key from: https://core.ac.uk/api-keys/register/ -+ # # api_key: 'unset' -+ # -+ # - name: crossref -+ # engine: crossref -+ # shortcut: cr -+ # timeout: 30 -+ # disabled: true -+ # -+ # - name: crowdview -+ # engine: json_engine -+ # shortcut: cv -+ # categories: general -+ # paging: false -+ # search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} -+ # results_query: results -+ # url_query: link -+ # title_query: title -+ # content_query: snippet -+ # disabled: true -+ # about: -+ # website: https://crowdview.ai/ -+ # -+ # - name: yep -+ # engine: json_engine -+ # shortcut: yep -+ # categories: general -+ # disabled: true -+ # paging: false -+ # content_html_to_text: true -+ # title_html_to_text: true -+ # search_url: https://api.yep.com/fs/1/?type=web&q={query}&no_correct=false&limit=100 -+ # results_query: 1/results -+ # title_query: title -+ # url_query: url -+ # content_query: snippet -+ # about: -+ # website: https://yep.com -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: curlie -+ # engine: xpath -+ # shortcut: cl -+ # categories: general -+ # disabled: true -+ # paging: true -+ # lang_all: '' -+ # search_url: https://curlie.org/search?q={query}&lang={lang}&start={pageno}&stime=92452189 -+ # page_size: 20 -+ # results_xpath: //div[@id="site-list-content"]/div[@class="site-item"] -+ # url_xpath: ./div[@class="title-and-desc"]/a/@href -+ # title_xpath: ./div[@class="title-and-desc"]/a/div -+ # content_xpath: ./div[@class="title-and-desc"]/div[@class="site-descr"] -+ # about: -+ # website: https://curlie.org/ -+ # wikidata_id: Q60715723 -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: currency -+ # engine: currency_convert -+ # categories: general -+ # shortcut: cc -+ # -+ # - name: deezer -+ # engine: deezer -+ # shortcut: dz -+ # disabled: true -+ # -+ # - name: deviantart -+ # engine: deviantart -+ # shortcut: da -+ # timeout: 3.0 -+ # -+ # - name: ddg definitions -+ # engine: duckduckgo_definitions -+ # shortcut: ddd -+ # weight: 2 -+ # disabled: true -+ # tests: *tests_infobox -+ # -+ # # cloudflare protected -+ # # - name: digbt -+ # # engine: digbt -+ # # shortcut: dbt -+ # # timeout: 6.0 -+ # # disabled: true -+ # -+ # - name: docker hub -+ # engine: docker_hub -+ # shortcut: dh -+ # categories: [it, packages] -+ # -+ # - name: erowid -+ # engine: xpath -+ # paging: true -+ # first_page_num: 0 -+ # page_size: 30 -+ # search_url: https://www.erowid.org/search.php?q={query}&s={pageno} -+ # url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href -+ # title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() -+ # content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] -+ # categories: [] -+ # shortcut: ew -+ # disabled: true -+ # about: -+ # website: https://www.erowid.org/ -+ # wikidata_id: Q1430691 -+ # official_api_documentation: -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # # - name: elasticsearch -+ # # shortcut: es -+ # # engine: elasticsearch -+ # # base_url: http://localhost:9200 -+ # # username: elastic -+ # # password: changeme -+ # # index: my-index -+ # # # available options: match, simple_query_string, term, terms, custom -+ # # query_type: match -+ # # # if query_type is set to custom, provide your query here -+ # # #custom_query_json: {"query":{"match_all": {}}} -+ # # #show_metadata: false -+ # # disabled: true -+ # -+ # - name: wikidata -+ # engine: wikidata -+ # shortcut: wd -+ # timeout: 3.0 -+ # weight: 2 -+ # # add "list" to the array to get results in the results list -+ # display_type: ["infobox"] -+ # tests: *tests_infobox -+ # categories: [general] -+ # -+ # - name: duckduckgo -+ # engine: duckduckgo -+ # shortcut: ddg -+ # -+ # - name: duckduckgo images -+ # engine: duckduckgo_images -+ # shortcut: ddi -+ # timeout: 3.0 -+ # disabled: true -+ # -+ # - name: duckduckgo weather -+ # engine: duckduckgo_weather -+ # shortcut: ddw -+ # disabled: true -+ # -+ # - name: apple maps -+ # engine: apple_maps -+ # shortcut: apm -+ # disabled: true -+ # timeout: 5.0 -+ # -+ # - name: emojipedia -+ # engine: emojipedia -+ # timeout: 4.0 -+ # shortcut: em -+ # disabled: true -+ # -+ # - name: tineye -+ # engine: tineye -+ # shortcut: tin -+ # timeout: 9.0 -+ # disabled: true -+ # -+ # - name: etymonline -+ # engine: xpath -+ # paging: true -+ # search_url: https://etymonline.com/search?page={pageno}&q={query} -+ # url_xpath: //a[contains(@class, "word__name--")]/@href -+ # title_xpath: //a[contains(@class, "word__name--")] -+ # content_xpath: //section[contains(@class, "word__defination")] -+ # first_page_num: 1 -+ # shortcut: et -+ # categories: [dictionaries] -+ # about: -+ # website: https://www.etymonline.com/ -+ # wikidata_id: Q1188617 -+ # official_api_documentation: -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # # - name: ebay -+ # # engine: ebay -+ # # shortcut: eb -+ # # base_url: 'https://www.ebay.com' -+ # # disabled: true -+ # # timeout: 5 -+ # -+ # - name: 1x -+ # engine: www1x -+ # shortcut: 1x -+ # timeout: 3.0 -+ # disabled: true -+ # -+ # - name: fdroid -+ # engine: fdroid -+ # shortcut: fd -+ # disabled: true -+ # -+ # - name: flickr -+ # categories: images -+ # shortcut: fl -+ # # You can use the engine using the official stable API, but you need an API -+ # # key, see: https://www.flickr.com/services/apps/create/ -+ # # engine: flickr -+ # # api_key: 'apikey' # required! -+ # # Or you can use the html non-stable engine, activated by default -+ # engine: flickr_noapi -+ # -+ # - name: free software directory -+ # engine: mediawiki -+ # shortcut: fsd -+ # categories: [it, software wikis] -+ # base_url: https://directory.fsf.org/ -+ # search_type: title -+ # timeout: 5.0 -+ # disabled: true -+ # about: -+ # website: https://directory.fsf.org/ -+ # wikidata_id: Q2470288 -+ # -+ # # - name: freesound -+ # # engine: freesound -+ # # shortcut: fnd -+ # # disabled: true -+ # # timeout: 15.0 -+ # # API key required, see: https://freesound.org/docs/api/overview.html -+ # # api_key: MyAPIkey -+ # -+ # - name: frinkiac -+ # engine: frinkiac -+ # shortcut: frk -+ # disabled: true -+ # -+ # - name: genius -+ # engine: genius -+ # shortcut: gen -+ # -+ # - name: gentoo -+ # engine: gentoo -+ # shortcut: ge -+ # timeout: 10.0 -+ # -+ # - name: gitlab -+ # engine: json_engine -+ # paging: true -+ # search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno} -+ # url_query: web_url -+ # title_query: name_with_namespace -+ # content_query: description -+ # page_size: 20 -+ # categories: [it, repos] -+ # shortcut: gl -+ # timeout: 10.0 -+ # disabled: true -+ # about: -+ # website: https://about.gitlab.com/ -+ # wikidata_id: Q16639197 -+ # official_api_documentation: https://docs.gitlab.com/ee/api/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: github -+ # engine: github -+ # shortcut: gh -+ # -+ # # This a Gitea service. If you would like to use a different instance, -+ # # change codeberg.org to URL of the desired Gitea host. Or you can create a -+ # # new engine by copying this and changing the name, shortcut and search_url. -+ # -+ # - name: codeberg -+ # engine: json_engine -+ # search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10 -+ # url_query: html_url -+ # title_query: name -+ # content_query: description -+ # categories: [it, repos] -+ # shortcut: cb -+ # disabled: true -+ # about: -+ # website: https://codeberg.org/ -+ # wikidata_id: -+ # official_api_documentation: https://try.gitea.io/api/swagger -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # -+ # -+ # - name: google news -+ # engine: google_news -+ # shortcut: gon -+ # # additional_tests: -+ # # android: *test_android -+ # -+ # - name: google videos -+ # engine: google_videos -+ # shortcut: gov -+ # # additional_tests: -+ # # android: *test_android -+ # -+ # - name: google scholar -+ # engine: google_scholar -+ # shortcut: gos -+ # -+ # - name: google play apps -+ # engine: google_play -+ # categories: [files, apps] -+ # shortcut: gpa -+ # play_categ: apps -+ # disabled: true -+ # -+ # - name: google play movies -+ # engine: google_play -+ # categories: videos -+ # shortcut: gpm -+ # play_categ: movies -+ # disabled: true -+ # -+ # - name: material icons -+ # engine: material_icons -+ # categories: images -+ # shortcut: mi -+ # disabled: true -+ # -+ # - name: gpodder -+ # engine: json_engine -+ # shortcut: gpod -+ # timeout: 4.0 -+ # paging: false -+ # search_url: https://gpodder.net/search.json?q={query} -+ # url_query: url -+ # title_query: title -+ # content_query: description -+ # page_size: 19 -+ # categories: music -+ # disabled: true -+ # about: -+ # website: https://gpodder.net -+ # wikidata_id: Q3093354 -+ # official_api_documentation: https://gpoddernet.readthedocs.io/en/latest/api/ -+ # use_official_api: false -+ # requires_api_key: false -+ # results: JSON -+ # -+ # - name: habrahabr -+ # engine: xpath -+ # paging: true -+ # search_url: https://habr.com/en/search/page{pageno}/?q={query} -+ # results_xpath: //article[contains(@class, "tm-articles-list__item")] -+ # url_xpath: .//a[@class="tm-title__link"]/@href -+ # title_xpath: .//a[@class="tm-title__link"] -+ # content_xpath: .//div[contains(@class, "article-formatted-body")] -+ # categories: it -+ # timeout: 4.0 -+ # disabled: true -+ # shortcut: habr -+ # about: -+ # website: https://habr.com/ -+ # wikidata_id: Q4494434 -+ # official_api_documentation: https://habr.com/en/docs/help/api/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: hoogle -+ # engine: xpath -+ # paging: true -+ # search_url: https://hoogle.haskell.org/?hoogle={query}&start={pageno} -+ # results_xpath: '//div[@class="result"]' -+ # title_xpath: './/div[@class="ans"]//a' -+ # url_xpath: './/div[@class="ans"]//a/@href' -+ # content_xpath: './/div[@class="from"]' -+ # page_size: 20 -+ # categories: [it, packages] -+ # shortcut: ho -+ # about: -+ # website: https://hoogle.haskell.org/ -+ # wikidata_id: Q34010 -+ # official_api_documentation: https://hackage.haskell.org/api -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: imdb -+ # engine: imdb -+ # shortcut: imdb -+ # timeout: 6.0 -+ # disabled: true -+ # -+ # - name: ina -+ # engine: ina -+ # shortcut: in -+ # timeout: 6.0 -+ # disabled: true -+ # -+ # - name: invidious -+ # engine: invidious -+ # # Instanes will be selected randomly, see https://api.invidious.io/ for -+ # # instances that are stable (good uptime) and close to you. -+ # base_url: -+ # - https://invidious.io.lol -+ # - https://invidious.fdn.fr -+ # - https://yt.artemislena.eu -+ # - https://invidious.tiekoetter.com -+ # - https://invidious.flokinet.to -+ # - https://vid.puffyan.us -+ # - https://invidious.privacydev.net -+ # - https://inv.tux.pizza -+ # shortcut: iv -+ # timeout: 3.0 -+ # disabled: true -+ # -+ # - name: jisho -+ # engine: jisho -+ # shortcut: js -+ # timeout: 3.0 -+ # disabled: true -+ # -+ # - name: kickass -+ # engine: kickass -+ # shortcut: kc -+ # timeout: 4.0 -+ # disabled: true -+ # -+ # - name: lemmy communities -+ # engine: lemmy -+ # lemmy_type: Communities -+ # shortcut: leco -+ # -+ # - name: lemmy users -+ # engine: lemmy -+ # network: lemmy communities -+ # lemmy_type: Users -+ # shortcut: leus -+ # -+ # - name: lemmy posts -+ # engine: lemmy -+ # network: lemmy communities -+ # lemmy_type: Posts -+ # shortcut: lepo -+ # -+ # - name: lemmy comments -+ # engine: lemmy -+ # network: lemmy communities -+ # lemmy_type: Comments -+ # shortcut: lecom -+ # -+ # - name: library genesis -+ # engine: xpath -+ # search_url: https://libgen.fun/search.php?req={query} -+ # url_xpath: //a[contains(@href,"get.php?md5")]/@href -+ # title_xpath: //a[contains(@href,"book/")]/text()[1] -+ # content_xpath: //td/a[1][contains(@href,"=author")]/text() -+ # categories: files -+ # timeout: 7.0 -+ # disabled: true -+ # shortcut: lg -+ # about: -+ # website: https://libgen.fun/ -+ # wikidata_id: Q22017206 -+ # official_api_documentation: -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: z-library -+ # engine: zlibrary -+ # shortcut: zlib -+ # categories: files -+ # timeout: 7.0 -+ # -+ # - name: library of congress -+ # engine: loc -+ # shortcut: loc -+ # categories: images -+ # -+ # - name: lingva -+ # engine: lingva -+ # shortcut: lv -+ # # set lingva instance in url, by default it will use the official instance -+ # # url: https://lingva.ml -+ # -+ # - name: lobste.rs -+ # engine: xpath -+ # search_url: https://lobste.rs/search?utf8=%E2%9C%93&q={query}&what=stories&order=relevance -+ # results_xpath: //li[contains(@class, "story")] -+ # url_xpath: .//a[@class="u-url"]/@href -+ # title_xpath: .//a[@class="u-url"] -+ # content_xpath: .//a[@class="domain"] -+ # categories: it -+ # shortcut: lo -+ # timeout: 5.0 -+ # disabled: true -+ # about: -+ # website: https://lobste.rs/ -+ # wikidata_id: Q60762874 -+ # official_api_documentation: -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: azlyrics -+ # shortcut: lyrics -+ # engine: xpath -+ # timeout: 4.0 -+ # disabled: true -+ # categories: [music, lyrics] -+ # paging: true -+ # search_url: https://search.azlyrics.com/search.php?q={query}&w=lyrics&p={pageno} -+ # url_xpath: //td[@class="text-left visitedlyr"]/a/@href -+ # title_xpath: //span/b/text() -+ # content_xpath: //td[@class="text-left visitedlyr"]/a/small -+ # about: -+ # website: https://azlyrics.com -+ # wikidata_id: Q66372542 -+ # official_api_documentation: -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: metacpan -+ # engine: metacpan -+ # shortcut: cpan -+ # disabled: true -+ # number_of_results: 20 -+ # -+ # # - name: meilisearch -+ # # engine: meilisearch -+ # # shortcut: mes -+ # # enable_http: true -+ # # base_url: http://localhost:7700 -+ # # index: my-index -+ # -+ # - name: mixcloud -+ # engine: mixcloud -+ # shortcut: mc -+ # -+ # # MongoDB engine -+ # # Required dependency: pymongo -+ # # - name: mymongo -+ # # engine: mongodb -+ # # shortcut: md -+ # # exact_match_only: false -+ # # host: '127.0.0.1' -+ # # port: 27017 -+ # # enable_http: true -+ # # results_per_page: 20 -+ # # database: 'business' -+ # # collection: 'reviews' # name of the db collection -+ # # key: 'name' # key in the collection to search for -+ # -+ # - name: mwmbl -+ # engine: mwmbl -+ # # api_url: https://api.mwmbl.org -+ # shortcut: mwm -+ # disabled: true -+ # -+ # - name: npm -+ # engine: json_engine -+ # paging: true -+ # first_page_num: 0 -+ # search_url: https://api.npms.io/v2/search?q={query}&size=25&from={pageno} -+ # results_query: results -+ # url_query: package/links/npm -+ # title_query: package/name -+ # content_query: package/description -+ # page_size: 25 -+ # categories: [it, packages] -+ # disabled: true -+ # timeout: 5.0 -+ # shortcut: npm -+ # about: -+ # website: https://npms.io/ -+ # wikidata_id: Q7067518 -+ # official_api_documentation: https://api-docs.npms.io/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: nyaa -+ # engine: nyaa -+ # shortcut: nt -+ # disabled: true -+ # -+ # - name: mankier -+ # engine: json_engine -+ # search_url: https://www.mankier.com/api/v2/mans/?q={query} -+ # results_query: results -+ # url_query: url -+ # title_query: name -+ # content_query: description -+ # categories: it -+ # shortcut: man -+ # about: -+ # website: https://www.mankier.com/ -+ # official_api_documentation: https://www.mankier.com/api -+ # use_official_api: true -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: odysee -+ # engine: odysee -+ # shortcut: od -+ # disabled: true -+ # -+ # - name: openairedatasets -+ # engine: json_engine -+ # paging: true -+ # search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} -+ # results_query: response/results/result -+ # url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ -+ # title_query: metadata/oaf:entity/oaf:result/title/$ -+ # content_query: metadata/oaf:entity/oaf:result/description/$ -+ # content_html_to_text: true -+ # categories: "science" -+ # shortcut: oad -+ # timeout: 5.0 -+ # about: -+ # website: https://www.openaire.eu/ -+ # wikidata_id: Q25106053 -+ # official_api_documentation: https://api.openaire.eu/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: openairepublications -+ # engine: json_engine -+ # paging: true -+ # search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} -+ # results_query: response/results/result -+ # url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ -+ # title_query: metadata/oaf:entity/oaf:result/title/$ -+ # content_query: metadata/oaf:entity/oaf:result/description/$ -+ # content_html_to_text: true -+ # categories: science -+ # shortcut: oap -+ # timeout: 5.0 -+ # about: -+ # website: https://www.openaire.eu/ -+ # wikidata_id: Q25106053 -+ # official_api_documentation: https://api.openaire.eu/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: JSON -+ # -+ # # - name: opensemanticsearch -+ # # engine: opensemantic -+ # # shortcut: oss -+ # # base_url: 'http://localhost:8983/solr/opensemanticsearch/' -+ # -+ # - name: openstreetmap -+ # engine: openstreetmap -+ # shortcut: osm -+ # -+ # - name: openrepos -+ # engine: xpath -+ # paging: true -+ # search_url: https://openrepos.net/search/node/{query}?page={pageno} -+ # url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href -+ # title_xpath: //li[@class="search-result"]//h3[@class="title"]/a -+ # content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] -+ # categories: files -+ # timeout: 4.0 -+ # disabled: true -+ # shortcut: or -+ # about: -+ # website: https://openrepos.net/ -+ # wikidata_id: -+ # official_api_documentation: -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: packagist -+ # engine: json_engine -+ # paging: true -+ # search_url: https://packagist.org/search.json?q={query}&page={pageno} -+ # results_query: results -+ # url_query: url -+ # title_query: name -+ # content_query: description -+ # categories: [it, packages] -+ # disabled: true -+ # timeout: 5.0 -+ # shortcut: pack -+ # about: -+ # website: https://packagist.org -+ # wikidata_id: Q108311377 -+ # official_api_documentation: https://packagist.org/apidoc -+ # use_official_api: true -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: pdbe -+ # engine: pdbe -+ # shortcut: pdb -+ # # Hide obsolete PDB entries. Default is not to hide obsolete structures -+ # # hide_obsolete: false -+ # -+ # - name: photon -+ # engine: photon -+ # shortcut: ph -+ # -+ # - name: piped -+ # engine: piped -+ # shortcut: ppd -+ # categories: videos -+ # piped_filter: videos -+ # timeout: 3.0 -+ # -+ # # URL to use as link and for embeds -+ # frontend_url: https://srv.piped.video -+ # # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ -+ # backend_url: -+ # - https://pipedapi.kavin.rocks -+ # - https://pipedapi-libre.kavin.rocks -+ # - https://pipedapi.adminforge.de -+ # -+ # - name: piped.music -+ # engine: piped -+ # network: piped -+ # shortcut: ppdm -+ # categories: music -+ # piped_filter: music_songs -+ # timeout: 3.0 -+ # -+ # - name: piratebay -+ # engine: piratebay -+ # shortcut: tpb -+ # # You may need to change this URL to a proxy if piratebay is blocked in your -+ # # country -+ # url: https://thepiratebay.org/ -+ # timeout: 3.0 -+ # -+ # # Required dependency: psychopg2 -+ # # - name: postgresql -+ # # engine: postgresql -+ # # database: postgres -+ # # username: postgres -+ # # password: postgres -+ # # limit: 10 -+ # # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' -+ # # shortcut : psql -+ # -+ # - name: pub.dev -+ # engine: xpath -+ # shortcut: pd -+ # search_url: https://pub.dev/packages?q={query}&page={pageno} -+ # paging: true -+ # results_xpath: //div[contains(@class,"packages-item")] -+ # url_xpath: ./div/h3/a/@href -+ # title_xpath: ./div/h3/a -+ # content_xpath: ./div/div/div[contains(@class,"packages-description")]/span -+ # categories: [packages, it] -+ # timeout: 3.0 -+ # disabled: true -+ # first_page_num: 1 -+ # about: -+ # website: https://pub.dev/ -+ # official_api_documentation: https://pub.dev/help/api -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: pubmed -+ # engine: pubmed -+ # shortcut: pub -+ # timeout: 3.0 -+ # -+ # - name: pypi -+ # shortcut: pypi -+ # engine: xpath -+ # paging: true -+ # search_url: https://pypi.org/search/?q={query}&page={pageno} -+ # results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"] -+ # url_xpath: ./@href -+ # title_xpath: ./h3/span[@class="package-snippet__name"] -+ # content_xpath: ./p -+ # suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"] -+ # first_page_num: 1 -+ # categories: [it, packages] -+ # about: -+ # website: https://pypi.org -+ # wikidata_id: Q2984686 -+ # official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: qwant -+ # qwant_categ: web -+ # engine: qwant -+ # shortcut: qw -+ # categories: [general, web] -+ # additional_tests: -+ # rosebud: *test_rosebud -+ # -+ # - name: qwant news -+ # qwant_categ: news -+ # engine: qwant -+ # shortcut: qwn -+ # categories: news -+ # network: qwant -+ # -+ # - name: qwant images -+ # qwant_categ: images -+ # engine: qwant -+ # shortcut: qwi -+ # categories: [images, web] -+ # network: qwant -+ # -+ # - name: qwant videos -+ # qwant_categ: videos -+ # engine: qwant -+ # shortcut: qwv -+ # categories: [videos, web] -+ # network: qwant -+ # -+ # # - name: library -+ # # engine: recoll -+ # # shortcut: lib -+ # # base_url: 'https://recoll.example.org/' -+ # # search_dir: '' -+ # # mount_prefix: /export -+ # # dl_prefix: 'https://download.example.org' -+ # # timeout: 30.0 -+ # # categories: files -+ # # disabled: true -+ # -+ # # - name: recoll library reference -+ # # engine: recoll -+ # # base_url: 'https://recoll.example.org/' -+ # # search_dir: reference -+ # # mount_prefix: /export -+ # # dl_prefix: 'https://download.example.org' -+ # # shortcut: libr -+ # # timeout: 30.0 -+ # # categories: files -+ # # disabled: true -+ # -+ # - name: reddit -+ # engine: reddit -+ # shortcut: re -+ # page_size: 25 -+ # -+ # # Required dependency: redis -+ # # - name: myredis -+ # # shortcut : rds -+ # # engine: redis_server -+ # # exact_match_only: false -+ # # host: '127.0.0.1' -+ # # port: 6379 -+ # # enable_http: true -+ # # password: '' -+ # # db: 0 -+ # -+ # # tmp suspended: bad certificate -+ # # - name: scanr structures -+ # # shortcut: scs -+ # # engine: scanr_structures -+ # # disabled: true -+ # -+ # - name: sepiasearch -+ # engine: sepiasearch -+ # shortcut: sep -+ # -+ # - name: soundcloud -+ # engine: soundcloud -+ # shortcut: sc -+ # -+ # - name: stackoverflow -+ # engine: stackexchange -+ # shortcut: st -+ # api_site: 'stackoverflow' -+ # categories: [it, q&a] -+ # -+ # - name: askubuntu -+ # engine: stackexchange -+ # shortcut: ubuntu -+ # api_site: 'askubuntu' -+ # categories: [it, q&a] -+ # -+ # - name: internetarchivescholar -+ # engine: internet_archive_scholar -+ # shortcut: ias -+ # timeout: 5.0 -+ # -+ # - name: superuser -+ # engine: stackexchange -+ # shortcut: su -+ # api_site: 'superuser' -+ # categories: [it, q&a] -+ # -+ # - name: searchcode code -+ # engine: searchcode_code -+ # shortcut: scc -+ # disabled: true -+ # -+ # - name: framalibre -+ # engine: framalibre -+ # shortcut: frl -+ # disabled: true -+ # -+ # # - name: searx -+ # # engine: searx_engine -+ # # shortcut: se -+ # # instance_urls : -+ # # - http://127.0.0.1:8888/ -+ # # - ... -+ # # disabled: true -+ # -+ # - name: semantic scholar -+ # engine: semantic_scholar -+ # disabled: true -+ # shortcut: se -+ # -+ # # Spotify needs API credentials -+ # # - name: spotify -+ # # engine: spotify -+ # # shortcut: stf -+ # # api_client_id: ******* -+ # # api_client_secret: ******* -+ # -+ # # - name: solr -+ # # engine: solr -+ # # shortcut: slr -+ # # base_url: http://localhost:8983 -+ # # collection: collection_name -+ # # sort: '' # sorting: asc or desc -+ # # field_list: '' # comma separated list of field names to display on the UI -+ # # default_fields: '' # default field to query -+ # # query_fields: '' # query fields -+ # # enable_http: true -+ # -+ # # - name: springer nature -+ # # engine: springer -+ # # # get your API key from: https://dev.springernature.com/signup -+ # # # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601" -+ # # api_key: 'unset' -+ # # shortcut: springer -+ # # timeout: 15.0 -+ # -+ # - name: startpage -+ # engine: startpage -+ # shortcut: sp -+ # timeout: 6.0 -+ # disabled: true -+ # additional_tests: -+ # rosebud: *test_rosebud -+ # -+ # - name: tokyotoshokan -+ # engine: tokyotoshokan -+ # shortcut: tt -+ # timeout: 6.0 -+ # disabled: true -+ # -+ # - name: solidtorrents -+ # engine: solidtorrents -+ # shortcut: solid -+ # timeout: 4.0 -+ # base_url: -+ # - https://solidtorrents.to -+ # - https://bitsearch.to -+ # -+ # # For this demo of the sqlite engine download: -+ # # https://liste.mediathekview.de/filmliste-v2.db.bz2 -+ # # and unpack into searx/data/filmliste-v2.db -+ # # Query to test: "!demo concert" -+ # # -+ # # - name: demo -+ # # engine: sqlite -+ # # shortcut: demo -+ # # categories: general -+ # # result_template: default.html -+ # # database: searx/data/filmliste-v2.db -+ # # query_str: >- -+ # # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, -+ # # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, -+ # # description AS content -+ # # FROM film -+ # # WHERE title LIKE :wildcard OR description LIKE :wildcard -+ # # ORDER BY duration DESC -+ # -+ # - name: tagesschau -+ # engine: tagesschau -+ # shortcut: ts -+ # disabled: true -+ # -+ # - name: tmdb -+ # engine: xpath -+ # paging: true -+ # search_url: https://www.themoviedb.org/search?page={pageno}&query={query} -+ # results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] -+ # url_xpath: .//div[contains(@class,"poster")]/a/@href -+ # thumbnail_xpath: .//img/@src -+ # title_xpath: .//div[contains(@class,"title")]//h2 -+ # content_xpath: .//div[contains(@class,"overview")] -+ # shortcut: tm -+ # disabled: true -+ # -+ # # Requires Tor -+ # - name: torch -+ # engine: xpath -+ # paging: true -+ # search_url: -+ # http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and -+ # results_xpath: //table//tr -+ # url_xpath: ./td[2]/a -+ # title_xpath: ./td[2]/b -+ # content_xpath: ./td[2]/small -+ # categories: onions -+ # enable_http: true -+ # shortcut: tch -+ # -+ # # torznab engine lets you query any torznab compatible indexer. Using this -+ # # engine in combination with Jackett opens the possibility to query a lot of -+ # # public and private indexers directly from SearXNG. More details at: -+ # # https://docs.searxng.org/dev/engines/online/torznab.html -+ # # -+ # # - name: Torznab EZTV -+ # # engine: torznab -+ # # shortcut: eztv -+ # # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab -+ # # enable_http: true # if using localhost -+ # # api_key: xxxxxxxxxxxxxxx -+ # # show_magnet_links: true -+ # # show_torrent_files: false -+ # # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories -+ # # torznab_categories: # optional -+ # # - 2000 -+ # # - 5000 -+ # -+ # - name: twitter -+ # shortcut: tw -+ # engine: twitter -+ # disabled: true -+ # -+ # # tmp suspended - too slow, too many errors -+ # # - name: urbandictionary -+ # # engine : xpath -+ # # search_url : https://www.urbandictionary.com/define.php?term={query} -+ # # url_xpath : //*[@class="word"]/@href -+ # # title_xpath : //*[@class="def-header"] -+ # # content_xpath: //*[@class="meaning"] -+ # # shortcut: ud -+ # -+ # - name: unsplash -+ # engine: unsplash -+ # shortcut: us -+ # -+ # - name: yahoo -+ # engine: yahoo -+ # shortcut: yh -+ # disabled: true -+ # -+ # - name: yahoo news -+ # engine: yahoo_news -+ # shortcut: yhn -+ # -+ # - name: youtube -+ # shortcut: yt -+ # # You can use the engine using the official stable API, but you need an API -+ # # key See: https://console.developers.google.com/project -+ # # -+ # # engine: youtube_api -+ # # api_key: 'apikey' # required! -+ # # -+ # # Or you can use the html non-stable engine, activated by default -+ # engine: youtube_noapi -+ # -+ # - name: dailymotion -+ # engine: dailymotion -+ # shortcut: dm -+ # -+ # - name: vimeo -+ # engine: vimeo -+ # shortcut: vm -+ # -+ # - name: wiby -+ # engine: json_engine -+ # paging: true -+ # search_url: https://wiby.me/json/?q={query}&p={pageno} -+ # url_query: URL -+ # title_query: Title -+ # content_query: Snippet -+ # categories: [general, web] -+ # shortcut: wib -+ # disabled: true -+ # about: -+ # website: https://wiby.me/ -+ # -+ # - name: alexandria -+ # engine: json_engine -+ # shortcut: alx -+ # categories: general -+ # paging: true -+ # search_url: https://api.alexandria.org/?a=1&q={query}&p={pageno} -+ # results_query: results -+ # title_query: title -+ # url_query: url -+ # content_query: snippet -+ # timeout: 1.5 -+ # disabled: true -+ # about: -+ # website: https://alexandria.org/ -+ # official_api_documentation: https://github.com/alexandria-org/alexandria-api/raw/master/README.md -+ # use_official_api: true -+ # require_api_key: false -+ # results: JSON -+ # -+ # - name: wikibooks -+ # engine: mediawiki -+ # weight: 0.5 -+ # shortcut: wb -+ # categories: [general, wikimedia] -+ # base_url: "https://{language}.wikibooks.org/" -+ # search_type: text -+ # disabled: true -+ # about: -+ # website: https://www.wikibooks.org/ -+ # wikidata_id: Q367 -+ # -+ # - name: wikinews -+ # engine: mediawiki -+ # shortcut: wn -+ # categories: [news, wikimedia] -+ # base_url: "https://{language}.wikinews.org/" -+ # search_type: text -+ # srsort: create_timestamp_desc -+ # about: -+ # website: https://www.wikinews.org/ -+ # wikidata_id: Q964 -+ # -+ # - name: wikiquote -+ # engine: mediawiki -+ # weight: 0.5 -+ # shortcut: wq -+ # categories: [general, wikimedia] -+ # base_url: "https://{language}.wikiquote.org/" -+ # search_type: text -+ # disabled: true -+ # additional_tests: -+ # rosebud: *test_rosebud -+ # about: -+ # website: https://www.wikiquote.org/ -+ # wikidata_id: Q369 -+ # -+ # - name: wikisource -+ # engine: mediawiki -+ # weight: 0.5 -+ # shortcut: ws -+ # categories: [general, wikimedia] -+ # base_url: "https://{language}.wikisource.org/" -+ # search_type: text -+ # disabled: true -+ # about: -+ # website: https://www.wikisource.org/ -+ # wikidata_id: Q263 -+ # -+ # - name: wikispecies -+ # engine: mediawiki -+ # shortcut: wsp -+ # categories: [general, science, wikimedia] -+ # base_url: "https://species.wikimedia.org/" -+ # search_type: text -+ # disabled: true -+ # about: -+ # website: https://species.wikimedia.org/ -+ # wikidata_id: Q13679 -+ # -+ # - name: wiktionary -+ # engine: mediawiki -+ # shortcut: wt -+ # categories: [dictionaries, wikimedia] -+ # base_url: "https://{language}.wiktionary.org/" -+ # search_type: text -+ # about: -+ # website: https://www.wiktionary.org/ -+ # wikidata_id: Q151 -+ # -+ # - name: wikiversity -+ # engine: mediawiki -+ # weight: 0.5 -+ # shortcut: wv -+ # categories: [general, wikimedia] -+ # base_url: "https://{language}.wikiversity.org/" -+ # search_type: text -+ # disabled: true -+ # about: -+ # website: https://www.wikiversity.org/ -+ # wikidata_id: Q370 -+ # -+ # - name: wikivoyage -+ # engine: mediawiki -+ # weight: 0.5 -+ # shortcut: wy -+ # categories: [general, wikimedia] -+ # base_url: "https://{language}.wikivoyage.org/" -+ # search_type: text -+ # disabled: true -+ # about: -+ # website: https://www.wikivoyage.org/ -+ # wikidata_id: Q373 -+ # -+ # - name: wikicommons.images -+ # engine: wikicommons -+ # shortcut: wc -+ # categories: images -+ # number_of_results: 10 -+ # -+ # - name: wolframalpha -+ # shortcut: wa -+ # # You can use the engine using the official stable API, but you need an API -+ # # key. See: https://products.wolframalpha.com/api/ -+ # # -+ # # engine: wolframalpha_api -+ # # api_key: '' -+ # # -+ # # Or you can use the html non-stable engine, activated by default -+ # engine: wolframalpha_noapi -+ # timeout: 6.0 -+ # categories: general -+ # disabled: true -+ # -+ # - name: dictzone -+ # engine: dictzone -+ # shortcut: dc -+ # -+ # - name: mymemory translated -+ # engine: translated -+ # shortcut: tl -+ # timeout: 5.0 -+ # # You can use without an API key, but you are limited to 1000 words/day -+ # # See: https://mymemory.translated.net/doc/usagelimits.php -+ # # api_key: '' -+ # -+ # # Required dependency: mysql-connector-python -+ # # - name: mysql -+ # # engine: mysql_server -+ # # database: mydatabase -+ # # username: user -+ # # password: pass -+ # # limit: 10 -+ # # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' -+ # # shortcut: mysql -+ # -+ # - name: 1337x -+ # engine: 1337x -+ # shortcut: 1337x -+ # disabled: true -+ # -+ # - name: duden -+ # engine: duden -+ # shortcut: du -+ # disabled: true -+ # -+ # - name: seznam -+ # shortcut: szn -+ # engine: seznam -+ # disabled: true -+ # -+ # # - name: deepl -+ # # engine: deepl -+ # # shortcut: dpl -+ # # # You can use the engine using the official stable API, but you need an API key -+ # # # See: https://www.deepl.com/pro-api?cta=header-pro-api -+ # # api_key: '' # required! -+ # # timeout: 5.0 -+ # # disabled: true -+ # -+ # - name: mojeek -+ # shortcut: mjk -+ # engine: xpath -+ # paging: true -+ # categories: [general, web] -+ # search_url: https://www.mojeek.com/search?q={query}&s={pageno}&lang={lang}&lb={lang} -+ # results_xpath: //ul[@class="results-standard"]/li/a[@class="ob"] -+ # url_xpath: ./@href -+ # title_xpath: ../h2/a -+ # content_xpath: ..//p[@class="s"] -+ # suggestion_xpath: //div[@class="top-info"]/p[@class="top-info spell"]/em/a -+ # first_page_num: 0 -+ # page_size: 10 -+ # disabled: true -+ # about: -+ # website: https://www.mojeek.com/ -+ # wikidata_id: Q60747299 -+ # official_api_documentation: https://www.mojeek.com/services/api.html/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: moviepilot -+ # engine: moviepilot -+ # shortcut: mp -+ # disabled: true -+ # -+ # - name: naver -+ # shortcut: nvr -+ # categories: [general, web] -+ # engine: xpath -+ # paging: true -+ # search_url: https://search.naver.com/search.naver?where=webkr&sm=osp_hty&ie=UTF-8&query={query}&start={pageno} -+ # url_xpath: //a[@class="link_tit"]/@href -+ # title_xpath: //a[@class="link_tit"] -+ # content_xpath: //a[@class="total_dsc"]/div -+ # first_page_num: 1 -+ # page_size: 10 -+ # disabled: true -+ # about: -+ # website: https://www.naver.com/ -+ # wikidata_id: Q485639 -+ # official_api_documentation: https://developers.naver.com/docs/nmt/examples/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # language: ko -+ # -+ # - name: rubygems -+ # shortcut: rbg -+ # engine: xpath -+ # paging: true -+ # search_url: https://rubygems.org/search?page={pageno}&query={query} -+ # results_xpath: /html/body/main/div/a[@class="gems__gem"] -+ # url_xpath: ./@href -+ # title_xpath: ./span/h2 -+ # content_xpath: ./span/p -+ # suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a -+ # first_page_num: 1 -+ # categories: [it, packages] -+ # disabled: true -+ # about: -+ # website: https://rubygems.org/ -+ # wikidata_id: Q1853420 -+ # official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: peertube -+ # engine: peertube -+ # shortcut: ptb -+ # paging: true -+ # # alternatives see: https://instances.joinpeertube.org/instances -+ # # base_url: https://tube.4aem.com -+ # categories: videos -+ # disabled: true -+ # timeout: 6.0 -+ # -+ # - name: mediathekviewweb -+ # engine: mediathekviewweb -+ # shortcut: mvw -+ # disabled: true -+ # -+ # # - name: yacy -+ # # engine: yacy -+ # # shortcut: ya -+ # # base_url: http://localhost:8090 -+ # # # required if you aren't using HTTPS for your local yacy instance' -+ # # enable_http: true -+ # # timeout: 3.0 -+ # # # Yacy search mode. 'global' or 'local'. -+ # # search_mode: 'global' -+ # -+ # - name: rumble -+ # engine: rumble -+ # shortcut: ru -+ # base_url: https://rumble.com/ -+ # paging: true -+ # categories: videos -+ # disabled: true -+ # -+ # - name: wordnik -+ # engine: wordnik -+ # shortcut: def -+ # base_url: https://www.wordnik.com/ -+ # categories: [dictionaries] -+ # timeout: 5.0 -+ # -+ # - name: woxikon.de synonyme -+ # engine: xpath -+ # shortcut: woxi -+ # categories: [dictionaries] -+ # timeout: 5.0 -+ # disabled: true -+ # search_url: https://synonyme.woxikon.de/synonyme/{query}.php -+ # url_xpath: //div[@class="upper-synonyms"]/a/@href -+ # content_xpath: //div[@class="synonyms-list-group"] -+ # title_xpath: //div[@class="upper-synonyms"]/a -+ # no_result_for_http_status: [404] -+ # about: -+ # website: https://www.woxikon.de/ -+ # wikidata_id: # No Wikidata ID -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # language: de -+ # -+ # - name: seekr news -+ # engine: seekr -+ # shortcut: senews -+ # categories: news -+ # seekr_category: news -+ # disabled: true -+ # -+ # - name: seekr images -+ # engine: seekr -+ # network: seekr news -+ # shortcut: seimg -+ # categories: images -+ # seekr_category: images -+ # disabled: true -+ # -+ # - name: seekr videos -+ # engine: seekr -+ # network: seekr news -+ # shortcut: sevid -+ # categories: videos -+ # seekr_category: videos -+ # disabled: true -+ # -+ # - name: sjp.pwn -+ # engine: sjp -+ # shortcut: sjp -+ # base_url: https://sjp.pwn.pl/ -+ # timeout: 5.0 -+ # disabled: true -+ # -+ # - name: svgrepo -+ # engine: svgrepo -+ # shortcut: svg -+ # timeout: 10.0 -+ # disabled: true -+ # -+ # - name: wallhaven -+ # engine: wallhaven -+ # # api_key: abcdefghijklmnopqrstuvwxyz -+ # shortcut: wh -+ # -+ # # wikimini: online encyclopedia for children -+ # # The fulltext and title parameter is necessary for Wikimini because -+ # # sometimes it will not show the results and redirect instead -+ # - name: wikimini -+ # engine: xpath -+ # shortcut: wkmn -+ # search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search -+ # url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href -+ # title_xpath: //li//div[@class="mw-search-result-heading"]/a -+ # content_xpath: //li/div[@class="searchresult"] -+ # categories: general -+ # disabled: true -+ # about: -+ # website: https://wikimini.org/ -+ # wikidata_id: Q3568032 -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # language: fr -+ # -+ # - name: wttr.in -+ # engine: wttr -+ # shortcut: wttr -+ # timeout: 9.0 -+ # -+ # - name: yummly -+ # engine: yummly -+ # shortcut: yum -+ # disabled: true -+ # -+ # - name: brave -+ # engine: brave -+ # shortcut: br -+ # time_range_support: true -+ # paging: true -+ # categories: [general, web] -+ # brave_category: search -+ # # brave_spellcheck: true -+ # -+ # - name: brave.images -+ # engine: brave -+ # network: brave -+ # shortcut: brimg -+ # categories: [images, web] -+ # brave_category: images -+ # -+ # - name: brave.videos -+ # engine: brave -+ # network: brave -+ # shortcut: brvid -+ # categories: [videos, web] -+ # brave_category: videos -+ # -+ # - name: brave.news -+ # engine: brave -+ # network: brave -+ # shortcut: brnews -+ # categories: news -+ # brave_category: news -+ # -+ # - name: lib.rs -+ # shortcut: lrs -+ # engine: xpath -+ # search_url: https://lib.rs/search?q={query} -+ # results_xpath: /html/body/main/div/ol/li/a -+ # url_xpath: ./@href -+ # title_xpath: ./div[@class="h"]/h4 -+ # content_xpath: ./div[@class="h"]/p -+ # categories: [it, packages] -+ # disabled: true -+ # about: -+ # website: https://lib.rs -+ # wikidata_id: Q113486010 -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: sourcehut -+ # shortcut: srht -+ # engine: xpath -+ # paging: true -+ # search_url: https://sr.ht/projects?page={pageno}&search={query} -+ # results_xpath: (//div[@class="event-list"])[1]/div[@class="event"] -+ # url_xpath: ./h4/a[2]/@href -+ # title_xpath: ./h4/a[2] -+ # content_xpath: ./p -+ # first_page_num: 1 -+ # categories: [it, repos] -+ # disabled: true -+ # about: -+ # website: https://sr.ht -+ # wikidata_id: Q78514485 -+ # official_api_documentation: https://man.sr.ht/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ # - name: goo -+ # shortcut: goo -+ # engine: xpath -+ # paging: true -+ # search_url: https://search.goo.ne.jp/web.jsp?MT={query}&FR={pageno}0 -+ # url_xpath: //div[@class="result"]/p[@class='title fsL1']/a/@href -+ # title_xpath: //div[@class="result"]/p[@class='title fsL1']/a -+ # content_xpath: //p[contains(@class,'url fsM')]/following-sibling::p -+ # first_page_num: 0 -+ # categories: [general, web] -+ # disabled: true -+ # timeout: 4.0 -+ # about: -+ # website: https://search.goo.ne.jp -+ # wikidata_id: Q249044 -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # language: ja -+ # -+ # - name: bt4g -+ # engine: bt4g -+ # shortcut: bt4g -+ # -+ # - name: pkg.go.dev -+ # engine: xpath -+ # shortcut: pgo -+ # search_url: https://pkg.go.dev/search?limit=100&m=package&q={query} -+ # results_xpath: /html/body/main/div[contains(@class,"SearchResults")]/div[not(@class)]/div[@class="SearchSnippet"] -+ # url_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a/@href -+ # title_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a -+ # content_xpath: ./p[@class="SearchSnippet-synopsis"] -+ # categories: [packages, it] -+ # timeout: 3.0 -+ # disabled: true -+ # about: -+ # website: https://pkg.go.dev/ -+ # use_official_api: false -+ # require_api_key: false -+ # results: HTML -+ # -+ ## Doku engine lets you access to any Doku wiki instance: -+ ## A public one or a privete/corporate one. -+ ## - name: ubuntuwiki -+ ## engine: doku -+ ## shortcut: uw -+ ## base_url: 'https://doc.ubuntu-fr.org' -+ # -+ ## Be careful when enabling this engine if you are -+ ## running a public instance. Do not expose any sensitive -+ ## information. You can restrict access by configuring a list -+ ## of access tokens under tokens. -+ ## - name: git grep -+ ## engine: command -+ ## command: ['git', 'grep', '{{QUERY}}'] -+ ## shortcut: gg -+ ## tokens: [] -+ ## disabled: true -+ ## delimiter: -+ ## chars: ':' -+ ## keys: ['filepath', 'code'] -+ # -+ ## Be careful when enabling this engine if you are -+ ## running a public instance. Do not expose any sensitive -+ ## information. You can restrict access by configuring a list -+ ## of access tokens under tokens. -+ ## - name: locate -+ ## engine: command -+ ## command: ['locate', '{{QUERY}}'] -+ ## shortcut: loc -+ ## tokens: [] -+ ## disabled: true -+ ## delimiter: -+ ## chars: ' ' -+ ## keys: ['line'] -+ # -+ ## Be careful when enabling this engine if you are -+ ## running a public instance. Do not expose any sensitive -+ ## information. You can restrict access by configuring a list -+ ## of access tokens under tokens. -+ ## - name: find -+ ## engine: command -+ ## command: ['find', '.', '-name', '{{QUERY}}'] -+ ## query_type: path -+ ## shortcut: fnd -+ ## tokens: [] -+ ## disabled: true -+ ## delimiter: -+ ## chars: ' ' -+ ## keys: ['line'] -+ # -+ ## Be careful when enabling this engine if you are -+ ## running a public instance. Do not expose any sensitive -+ ## information. You can restrict access by configuring a list -+ ## of access tokens under tokens. -+ ## - name: pattern search in files -+ ## engine: command -+ ## command: ['fgrep', '{{QUERY}}'] -+ ## shortcut: fgr -+ ## tokens: [] -+ ## disabled: true -+ ## delimiter: -+ ## chars: ' ' -+ ## keys: ['line'] -+ # -+ ## Be careful when enabling this engine if you are -+ ## running a public instance. Do not expose any sensitive -+ ## information. You can restrict access by configuring a list -+ ## of access tokens under tokens. -+ ## - name: regex search in files -+ ## engine: command -+ ## command: ['grep', '{{QUERY}}'] -+ ## shortcut: gr -+ ## tokens: [] -+ ## disabled: true -+ ## delimiter: -+ ## chars: ' ' -+ ## keys: ['line'] - - doi_resolvers: - oadoi.org: 'https://oadoi.org/' diff --git a/src/portal/patches/snscrape_auth.diff b/src/portal/patches/snscrape_auth.diff index efdc6e0..c1fe487 100644 --- a/src/portal/patches/snscrape_auth.diff +++ b/src/portal/patches/snscrape_auth.diff @@ -1,5 +1,5 @@ diff --git a/snscrape/modules/twitter.py b/snscrape/modules/twitter.py -index d1719a8..43d9076 100644 +index d1719a8..5892340 100644 --- a/snscrape/modules/twitter.py +++ b/snscrape/modules/twitter.py @@ -92,6 +92,7 @@ import typing @@ -7,16 +7,16 @@ index d1719a8..43d9076 100644 import urllib3.util.ssl_ import warnings +import hashlib - - + + _logger = logging.getLogger(__name__) @@ -99,10 +100,12 @@ _API_AUTHORIZATION_HEADER = 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOu _globalGuestTokenManager = None _GUEST_TOKEN_VALIDITY = 10800 _CIPHERS_CHROME = 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA' +_AGE_RESTRICTED_MSG = 'Age-restricted adult content. This content might not be appropriate for people under 18 years old. To view this media, you’ll need to log in to Twitter. Learn more' - - + + @dataclasses.dataclass class Tweet(snscrape.base.Item): + rawResponses: typing.Dict[str, str] @@ -26,11 +26,11 @@ index d1719a8..43d9076 100644 @@ -793,17 +796,23 @@ class _TwitterAPIType(enum.Enum): V2 = 0 # Introduced with the redesign GRAPHQL = 1 - + +class _TwitterAPIAuthType(enum.Enum): + GUEST_TOKEN = 0 + OAUTH2 = 1 - + class _TwitterAPIScraper(snscrape.base.Scraper): - def __init__(self, baseUrl, *, guestTokenManager = None, maxEmptyPages = 0, **kwargs): + def __init__(self, baseUrl, *, guestTokenManager = None, maxEmptyPages = 0, cookies = None, **kwargs): @@ -58,12 +58,12 @@ index d1719a8..43d9076 100644 + self._lastResponse = None + self._lastResponseHash = None + self._lastSentResponseHash = None - + def _check_guest_token_response(self, r): if r.status_code != 200: @@ -820,6 +834,8 @@ class _TwitterAPIScraper(snscrape.base.Scraper): return True, None - + def _ensure_guest_token(self, url = None): + if not self._guestTokenManager: + return @@ -72,14 +72,14 @@ index d1719a8..43d9076 100644 r = self._get(self._baseUrl if url is None else url, responseOkCallback = self._check_guest_token_response) @@ -843,18 +859,42 @@ class _TwitterAPIScraper(snscrape.base.Scraper): self._apiHeaders['x-guest-token'] = self._guestTokenManager.token - + def _unset_guest_token(self, blockUntil): + if not self._guestTokenManager: + return self._guestTokenManager.reset(blockUntil = blockUntil) del self._session.cookies['gt'] del self._apiHeaders['x-guest-token'] - + + def _ensure_oauth(self): + if not self._cookies: + return @@ -135,7 +135,7 @@ index d1719a8..43d9076 100644 return False, msg + ''' return True, None - + def _get_api_data(self, endpoint, apiType, params, instructionsPath = None): - self._ensure_guest_token() + self._ensure_auth_updated() @@ -152,12 +152,12 @@ index d1719a8..43d9076 100644 + hasher.update(json.dumps(self._lastResponse).encode('utf-8')) + self._lastResponseHash = hasher.hexdigest() return r._snscrapeObj - + def _iter_api_data(self, endpoint, apiType, params, paginationParams = None, cursor = None, direction = _ScrollDirection.BOTTOM, instructionsPath = None): @@ -988,8 +1043,50 @@ class _TwitterAPIScraper(snscrape.base.Scraper): def _get_tweet_id(self, tweet): return tweet['id'] if 'id' in tweet else int(tweet['id_str']) - + + def _entry_is_age_restricted(self, entry): + if entry['entryId'].startswith('tombstone-') and entry['content']['entryType'] == 'TimelineTimelineItem': + if entry['content']['itemContent']['tombstoneInfo']['richText']['text'] == _AGE_RESTRICTED_MSG: @@ -205,9 +205,22 @@ index d1719a8..43d9076 100644 kwargs['id'] = tweetId if noteTweet and 'text' in noteTweet: kwargs['rawContent'] = noteTweet['text'] +@@ -1005,9 +1102,9 @@ class _TwitterAPIScraper(snscrape.base.Scraper): + kwargs['date'] = email.utils.parsedate_to_datetime(tweet['created_at']) + if links: + kwargs['links'] = [TextLink( +- text = u.get('display_url'), +- url = u['expanded_url'], +- tcourl = u['url'], ++ text = u.get('display_url', ''), ++ url = u.get('expanded_url', ''), ++ tcourl = u.get('url', ''), + indices = tuple(u['indices']), + ) for u in links] + kwargs['url'] = f'https://twitter.com/{getattr(user, "username", "i/web")}/status/{tweetId}' @@ -1789,7 +1886,7 @@ class TwitterUserScraper(TwitterSearchScraper): self._baseUrl = f'https://twitter.com/{self._user}' if not self._isUserId else f'https://twitter.com/i/user/{self._user}' - + def _get_entity(self): - self._ensure_guest_token() + self._ensure_auth_updated() |