Browse Source

Add Freesound engine (#2596)

Add freesound engine with player.

Co-authored-by: Gazoil <maildeguzel@gmail.com>
GazoilKerozen 4 years ago
parent
commit
5f6ac3afa2
2 changed files with 77 additions and 0 deletions
  1. 69 0
      searx/engines/freesound.py
  2. 8 0
      searx/settings.yml

+ 69 - 0
searx/engines/freesound.py

@@ -0,0 +1,69 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+Freesound (Sound)
+"""
+
+from json import loads
+from urllib.parse import urlencode
+from datetime import datetime
+
+disabled = True
+api_key = ""
+
+# about
+about = {
+    "website": "https://freesound.org",
+    "wikidata_id": "Q835703",
+    "official_api_documentation": "https://freesound.org/docs/api",
+    "use_official_api": True,
+    "require_api_key": True,
+    "results": "JSON",
+}
+
+# engine dependent config
+paging = True
+
+# search url
+url = "https://freesound.org/apiv2/"
+search_url = (
+    url
+    + "search/text/?query={query}&page={page}&fields=name,url,download,created,description,type&token={api_key}"
+)
+
+embedded_url = '<audio controls><source src="{uri}" type="audio/{ftype}"></audio>'
+
+
+# search request
+def request(query, params):
+    params["url"] = search_url.format(
+        query=urlencode({"q": query}),
+        page=params["pageno"],
+        api_key=api_key,
+    )
+    return params
+
+
+# get response from search request
+def response(resp):
+    results = []
+    search_res = loads(resp.text)
+    # parse results
+    for result in search_res.get("results", []):
+        title = result["name"]
+        content = result["description"][:128]
+        publishedDate = datetime.fromisoformat(result["created"])
+        uri = result["download"]
+        embedded = embedded_url.format(uri=uri, ftype=result["type"])
+
+        # append result
+        results.append(
+            {
+                "url": result["url"],
+                "title": title,
+                "publishedDate": publishedDate,
+                "embedded": embedded,
+                "content": content,
+            }
+        )
+
+    return results

+ 8 - 0
searx/settings.yml

@@ -431,6 +431,14 @@ engines:
       website: https://directory.fsf.org/
       website: https://directory.fsf.org/
       wikidata_id: Q2470288
       wikidata_id: Q2470288
 
 
+  # - name : freesound
+    # engine : freesound
+    # shortcut : fnd
+    # disabled : True
+    # timeout : 15.0
+    # api_key : MyAPIkey
+    # API key required, see : https://freesound.org/docs/api/overview.html
+
   - name : frinkiac
   - name : frinkiac
     engine : frinkiac
     engine : frinkiac
     shortcut : frk
     shortcut : frk