@@ -0,0 +1,69 @@
1+# SPDX-License-Identifier: AGPL-3.0-or-later
2+"""
3+Freesound (Sound)
4+"""
5+
6+from json import loads
7+from urllib.parse import urlencode
8+from datetime import datetime
9+
10+disabled = True
11+api_key = ""
12+
13+# about
14+about = {
15+ "website": "https://freesound.org",
16+ "wikidata_id": "Q835703",
17+ "official_api_documentation": "https://freesound.org/docs/api",
18+ "use_official_api": True,
19+ "require_api_key": True,
20+ "results": "JSON",
21+}
22+
23+# engine dependent config
24+paging = True
25+
26+# search url
27+url = "https://freesound.org/apiv2/"
28+search_url = (
29+ url
30+ + "search/text/?query={query}&page={page}&fields=name,url,download,created,description,type&token={api_key}"
31+)
32+
33+embedded_url = '<audio controls><source src="{uri}" type="audio/{ftype}"></audio>'
34+
35+
36+# search request
37+def request(query, params):
38+ params["url"] = search_url.format(
39+ query=urlencode({"q": query}),
40+ page=params["pageno"],
41+ api_key=api_key,
42+ )
43+ return params
44+
45+
46+# get response from search request
47+def response(resp):
48+ results = []
49+ search_res = loads(resp.text)
50+ # parse results
51+ for result in search_res.get("results", []):
52+ title = result["name"]
53+ content = result["description"][:128]
54+ publishedDate = datetime.fromisoformat(result["created"])
55+ uri = result["download"]
56+ embedded = embedded_url.format(uri=uri, ftype=result["type"])
57+
58+ # append result
59+ results.append(
60+ {
61+ "url": result["url"],
62+ "title": title,
63+ "publishedDate": publishedDate,
64+ "embedded": embedded,
65+ "content": content,
66+ }
67+ )
68+
69+ return results