Browse Source

[mod] yacy: use official instance by default and fix crashes

Bnyro 1 year ago
parent
commit
fa5b2a7948
2 changed files with 64 additions and 27 deletions
  1. 44 18
      searx/engines/yacy.py
  2. 20 9
      searx/settings.yml

+ 44 - 18
searx/engines/yacy.py

@@ -18,17 +18,27 @@ Configuration
 
 The engine has the following (additional) settings:
 
+- :py:obj:`http_digest_auth_user`
+- :py:obj:`http_digest_auth_pass`
+- :py:obj:`search_mode`
+- :py:obj:`search_type`
+
 .. code:: yaml
 
-   - name: yacy
-     engine: yacy
-     shortcut: ya
-     base_url: http://localhost:8090
-     # Yacy search mode. 'global' or 'local'.
-     search_mode: 'global'
-     number_of_results: 5
-     http_digest_auth_user: ""
-     http_digest_auth_pass: ""
+  - name: yacy
+    engine: yacy
+    categories: general
+    search_type: text
+    base_url: https://yacy.searchlab.eu
+    shortcut: ya
+
+  - name: yacy images
+    engine: yacy
+    categories: images
+    search_type: image
+    base_url: https://yacy.searchlab.eu
+    shortcut: yai
+    disabled: true
 
 
 Implementations
@@ -55,11 +65,14 @@ about = {
 }
 
 # engine dependent config
-categories = ['general', 'images']  # TODO , 'music', 'videos', 'files'
+categories = ['general']
 paging = True
-number_of_results = 5
+number_of_results = 10
 http_digest_auth_user = ""
+"""HTTP digest user for the local YACY instance"""
 http_digest_auth_pass = ""
+"""HTTP digest password for the local YACY instance"""
+
 search_mode = 'global'
 """Yacy search mode ``global`` or ``local``.  By default, Yacy operates in ``global``
 mode.
@@ -70,8 +83,13 @@ mode.
 ``local``
   Privacy or Stealth mode, restricts the search to local yacy instance.
 """
+search_type = 'text'
+"""One of ``text``, ``image`` / The search-types ``app``, ``audio`` and
+``video`` are not yet implemented (Pull-Requests are welcome).
+"""
+
 # search-url
-base_url = 'http://localhost:8090'
+base_url = 'https://yacy.searchlab.eu'
 search_url = (
     '/yacysearch.json?{query}'
     '&startRecord={offset}'
@@ -80,13 +98,19 @@ search_url = (
     '&resource={resource}'
 )
 
-# yacy specific type-definitions
-search_types = {'general': 'text', 'images': 'image', 'files': 'app', 'music': 'audio', 'videos': 'video'}
+
+def init(_):
+    valid_types = [
+        'text',
+        'image',
+        # 'app', 'audio', 'video',
+    ]
+    if search_type not in valid_types:
+        raise ValueError('search_type "%s" is  not one of %s' % (search_type, valid_types))
 
 
 def request(query, params):
     offset = (params['pageno'] - 1) * number_of_results
-    search_type = search_types.get(params.get('category'), '0')
 
     params['url'] = base_url + search_url.format(
         query=urlencode({'query': query}),
@@ -122,7 +146,7 @@ def response(resp):
 
     for result in search_results[0].get('items', []):
         # parse image results
-        if resp.search_params.get('category') == 'images':
+        if search_type == 'image':
             result_url = ''
             if 'url' in result:
                 result_url = result['url']
@@ -144,12 +168,14 @@ def response(resp):
 
         # parse general results
         else:
-            publishedDate = parser.parse(result['pubDate'])
+            publishedDate = None
+            if 'pubDate' in result:
+                publishedDate = parser.parse(result['pubDate'])
 
             # append result
             results.append(
                 {
-                    'url': result['link'],
+                    'url': result['link'] or '',
                     'title': result['title'],
                     'content': html_to_text(result['description']),
                     'publishedDate': publishedDate,

+ 20 - 9
searx/settings.yml

@@ -1898,15 +1898,26 @@ engines:
     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: yacy
+    engine: yacy
+    categories: general
+    search_type: text
+    base_url: https://yacy.searchlab.eu
+    shortcut: ya
+    disabled: true
+    # required if you aren't using HTTPS for your local yacy instance
+    # https://docs.searxng.org/dev/engines/online/yacy.html
+    # enable_http: true
+    # timeout: 3.0
+    # search_mode: 'global'
+
+  - name: yacy images
+    engine: yacy
+    categories: images
+    search_type: image
+    base_url: https://yacy.searchlab.eu
+    shortcut: yai
+    disabled: true
 
   - name: rumble
     engine: rumble