Browse Source

[feat] engines: add uxwing engine for icons (#4819)

- uxwing provides attribution-free icons to use for design projects
- svgrepo was my go-to before, but it's ratelimiting a lot recently
Bnyro 2 days ago
parent
commit
88973f5431
2 changed files with 55 additions and 0 deletions
  1. 50 0
      searx/engines/uxwing.py
  2. 5 0
      searx/settings.yml

+ 50 - 0
searx/engines/uxwing.py

@@ -0,0 +1,50 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""UXwing (images)"""
+
+from urllib.parse import quote_plus
+from lxml import html
+
+from searx.utils import eval_xpath, eval_xpath_list, extract_text
+
+about = {
+    "website": 'https://uxwing.com',
+    "wikidata_id": None,
+    "official_api_documentation": None,
+    "use_official_api": False,
+    "require_api_key": False,
+    "results": 'HTML',
+}
+categories = ['images', 'icons']
+
+base_url = "https://uxwing.com"
+
+
+def request(query, params):
+    params['url'] = f"{base_url}/?s={quote_plus(query)}"
+    return params
+
+
+def response(resp):
+    results = []
+
+    doc = html.fromstring(resp.text)
+    for result in eval_xpath_list(doc, "//article[starts-with(@id, 'post')]"):
+        classes = extract_text(eval_xpath(result, "./@class")).split(" ")
+        tags = []
+        for css_class in classes:
+            for prefix in ("category", "tag"):
+                if css_class.startswith(prefix):
+                    tag = css_class.removeprefix(prefix)
+                    tags.append(tag.replace("-", " ").title())
+
+        results.append(
+            {
+                'template': 'images.html',
+                'url': extract_text(eval_xpath(result, "./a/@href")),
+                'img_src': extract_text(eval_xpath(result, ".//img/@src")),
+                'title': extract_text(eval_xpath(result, ".//img/@alt")),
+                'content': ', '.join(tags),
+            }
+        )
+
+    return results

+ 5 - 0
searx/settings.yml

@@ -2522,6 +2522,11 @@ engines:
     engine: tootfinder
     shortcut: toot
 
+  - name: uxwing
+    engine: uxwing
+    shortcut: ux
+    disabled: true
+
   - name: voidlinux
     engine: voidlinux
     shortcut: void