Browse Source

[feat] implementation of Wikimedia commons for images

Bnyro 1 year ago
parent
commit
9c4e9d3814
2 changed files with 77 additions and 0 deletions
  1. 71 0
      searx/engines/wikicommons.py
  2. 6 0
      searx/settings.yml

+ 71 - 0
searx/engines/wikicommons.py

@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+"""Wikimedia Commons (images)
+
+"""
+
+from urllib.parse import urlencode
+
+# about
+about = {
+    "website": 'https://commons.wikimedia.org/',
+    "wikidata_id": 'Q565',
+    "official_api_documentation": 'https://commons.wikimedia.org/w/api.php',
+    "use_official_api": True,
+    "require_api_key": False,
+    "results": 'JSON',
+}
+
+base_url = "https://commons.wikimedia.org"
+search_prefix = (
+    '?action=query'
+    '&format=json'
+    '&generator=search'
+    '&gsrnamespace=6'
+    '&gsrprop=snippet'
+    '&prop=info|imageinfo'
+    '&iiprop=url|size|mime'
+    '&iiurlheight=180'  # needed for the thumb url
+)
+paging = True
+number_of_results = 10
+
+
+def request(query, params):
+    language = 'en'
+    if params['language'] != 'all':
+        language = params['language'].split('-')[0]
+
+    args = {
+        'uselang': language,
+        'gsrlimit': number_of_results,
+        'gsroffset': number_of_results * (params["pageno"] - 1),
+        'gsrsearch': "filetype:bitmap|drawing " + query,
+    }
+
+    params["url"] = f"{base_url}/w/api.php{search_prefix}&{urlencode(args)}"
+    return params
+
+
+def response(resp):
+    results = []
+    json = resp.json()
+
+    if not json.get("query", {}).get("pages"):
+        return results
+
+    for item in json["query"]["pages"].values():
+        imageinfo = item["imageinfo"][0]
+        title = item["title"].replace("File:", "").rsplit('.', 1)[0]
+        result = {
+            'url': imageinfo["descriptionurl"],
+            'title': title,
+            'content': item["snippet"],
+            'img_src': imageinfo["url"],
+            'img_format': f'{imageinfo["width"]} x {imageinfo["height"]}',
+            'thumbnail_src': imageinfo["thumburl"],
+            'template': 'images.html',
+        }
+        results.append(result)
+
+    return results

+ 6 - 0
searx/settings.yml

@@ -1640,6 +1640,12 @@ engines:
       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