Browse Source

fix Semantic Scholar engine

Noémi Ványi 4 years ago
parent
commit
f596f5767b
2 changed files with 46 additions and 8 deletions
  1. 43 0
      searx/engines/semantic_scholar.py
  2. 3 8
      searx/settings.yml

+ 43 - 0
searx/engines/semantic_scholar.py

@@ -0,0 +1,43 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+ Semantic Scholar (Science)
+"""
+
+from json import dumps, loads
+
+
+search_url = 'https://www.semanticscholar.org/api/1/search'
+
+
+def request(query, params):
+    params['url'] = search_url
+    params['method'] = 'POST'
+    params['headers']['content-type'] = 'application/json'
+    params['data'] = dumps({
+        "queryString": query,
+        "page": params['pageno'],
+        "pageSize": 10,
+        "sort": "relevance",
+        "useFallbackRankerService": False,
+        "useFallbackSearchCluster": False,
+        "performTitleMatch": True,
+        "getQuerySuggestions": False,
+        "authors": [],
+        "coAuthors": [],
+        "venues": [],
+        "performTitleMatch": True,
+    })
+    return params
+
+
+def response(resp):
+    res = loads(resp.text)
+    results = []
+    for result in res['results']:
+        results.append({
+            'url': result['primaryPaperLink']['url'],
+            'title': result['title']['text'],
+            'content': result['paperAbstractTruncated']
+        })
+
+    return results

+ 3 - 8
searx/settings.yml

@@ -918,13 +918,8 @@ engines:
 #    disabled : True
 
   - name : semantic scholar
-    engine : xpath
-    paging : True
-    search_url : https://www.semanticscholar.org/search?q={query}&sort=relevance&page={pageno}&ae=false
-    results_xpath : //article
-    url_xpath : .//div[@class="search-result-title"]/a/@href
-    title_xpath : .//div[@class="search-result-title"]/a
-    content_xpath : .//div[@class="search-result-abstract"]
+    engine : semantic_scholar
+    disabled : True
     shortcut : se
     categories : science
     about:
@@ -933,7 +928,7 @@ engines:
       official_api_documentation: https://api.semanticscholar.org/
       use_official_api: false
       require_api_key: false
-      results: HTML
+      results: JSON
 
 # Spotify needs API credentials
 #  - name : spotify