on master help sign in
add peertube engine (#2109)
commita1ce141c99bd31017a131eb6bc57107b886f1442 authorMichael Ilsaas <mikeri@mikeri.net> dateSat 8 Aug 2020, 19:22 (6 years ago) parentc3054a1
4 files changed+299−1
AUTHORS.rst+1 searx/data/engines_languages.json+195−1 searx/engines/peertube.py+95 searx/settings.yml+8
AUTHORS.rst+1
@@ -133,3 +133,4 @@ generally made searx better:
133133- @gordon-quad
134134- Sophie Tauchert @999eagle
135135- @bauruine
136+- Michael Ilsaas `<https://mikeri.net>`_
searx/data/engines_languages.json+195−1
@@ -25033,6 +25033,200 @@
2503325033 "name": "\u4e2d\u6587 (\u7e41\u9ad4)"
2503425034 }
2503525035 },
25036+ "peertube": [
25037+ "aa",
25038+ "ab",
25039+ "af",
25040+ "ak",
25041+ "am",
25042+ "an",
25043+ "ar",
25044+ "as",
25045+ "ase",
25046+ "av",
25047+ "avk",
25048+ "ay",
25049+ "az",
25050+ "ba",
25051+ "be",
25052+ "bfi",
25053+ "bg",
25054+ "bi",
25055+ "bm",
25056+ "bn",
25057+ "bo",
25058+ "br",
25059+ "bs",
25060+ "bzs",
25061+ "ca",
25062+ "ce",
25063+ "ch",
25064+ "co",
25065+ "cr",
25066+ "cs",
25067+ "cse",
25068+ "csl",
25069+ "cv",
25070+ "cy",
25071+ "da",
25072+ "de",
25073+ "dsl",
25074+ "dv",
25075+ "dz",
25076+ "ee",
25077+ "el",
25078+ "en",
25079+ "eo",
25080+ "es",
25081+ "et",
25082+ "eu",
25083+ "fa",
25084+ "ff",
25085+ "fi",
25086+ "fj",
25087+ "fo",
25088+ "fr",
25089+ "fsl",
25090+ "fy",
25091+ "ga",
25092+ "gd",
25093+ "gl",
25094+ "gn",
25095+ "gsg",
25096+ "gu",
25097+ "gv",
25098+ "ha",
25099+ "he",
25100+ "hi",
25101+ "ho",
25102+ "hr",
25103+ "ht",
25104+ "hu",
25105+ "hy",
25106+ "hz",
25107+ "id",
25108+ "ig",
25109+ "ii",
25110+ "ik",
25111+ "is",
25112+ "it",
25113+ "iu",
25114+ "ja",
25115+ "jbo",
25116+ "jsl",
25117+ "jv",
25118+ "ka",
25119+ "kg",
25120+ "ki",
25121+ "kj",
25122+ "kk",
25123+ "kl",
25124+ "km",
25125+ "kn",
25126+ "ko",
25127+ "kr",
25128+ "ks",
25129+ "ku",
25130+ "kv",
25131+ "kw",
25132+ "ky",
25133+ "lb",
25134+ "lg",
25135+ "li",
25136+ "ln",
25137+ "lo",
25138+ "lt",
25139+ "lu",
25140+ "lv",
25141+ "mg",
25142+ "mh",
25143+ "mi",
25144+ "mk",
25145+ "ml",
25146+ "mn",
25147+ "mr",
25148+ "ms",
25149+ "mt",
25150+ "my",
25151+ "na",
25152+ "nb",
25153+ "nd",
25154+ "ne",
25155+ "ng",
25156+ "nl",
25157+ "nn",
25158+ "no",
25159+ "nr",
25160+ "nv",
25161+ "ny",
25162+ "oc",
25163+ "oj",
25164+ "om",
25165+ "or",
25166+ "os",
25167+ "pa",
25168+ "pks",
25169+ "pl",
25170+ "ps",
25171+ "pt",
25172+ "qu",
25173+ "rm",
25174+ "rn",
25175+ "ro",
25176+ "rsl",
25177+ "ru",
25178+ "rw",
25179+ "sc",
25180+ "sd",
25181+ "sdl",
25182+ "se",
25183+ "sfs",
25184+ "sg",
25185+ "sh",
25186+ "si",
25187+ "sk",
25188+ "sl",
25189+ "sm",
25190+ "sn",
25191+ "so",
25192+ "sq",
25193+ "sr",
25194+ "ss",
25195+ "st",
25196+ "su",
25197+ "sv",
25198+ "sw",
25199+ "swl",
25200+ "ta",
25201+ "te",
25202+ "tg",
25203+ "th",
25204+ "ti",
25205+ "tk",
25206+ "tl",
25207+ "tlh",
25208+ "tn",
25209+ "to",
25210+ "tr",
25211+ "ts",
25212+ "tt",
25213+ "tw",
25214+ "ty",
25215+ "ug",
25216+ "uk",
25217+ "ur",
25218+ "uz",
25219+ "ve",
25220+ "vi",
25221+ "wa",
25222+ "wo",
25223+ "xh",
25224+ "yi",
25225+ "yo",
25226+ "za",
25227+ "zh",
25228+ "zu"
25229+ ],
2503625230 "qwant": [
2503725231 "bg-BG",
2503825232 "br-FR",
@@ -28331,4 +28525,4 @@
2833128525 "zh-CHS",
2833228526 "zh-CHT"
2833328527 ]
28334−}
28528+}
searx/engines/peertube.pynew file+95
@@ -0,0 +1,95 @@
1+"""
2+ peertube (Videos)
3+
4+ @website https://www.peertube.live
5+ @provide-api yes (https://docs.joinpeertube.org/api-rest-reference.html)
6+
7+ @using-api yes
8+ @results JSON
9+ @stable yes
10+ @parse url, title, thumbnail, publishedDate, embedded
11+
12+ @todo implement time range support
13+"""
14+
15+from json import loads
16+from datetime import datetime
17+from searx.url_utils import urlencode
18+from searx.utils import html_to_text
19+
20+# engine dependent config
21+categories = ["videos"]
22+paging = True
23+language_support = True
24+base_url = "https://peer.tube/"
25+supported_languages_url = base_url + "api/v1/videos/languages"
26+
27+
28+# do search-request
29+def request(query, params):
30+ pageno = (params["pageno"] - 1) * 15
31+ search_url = base_url + "api/v1/search/videos/?pageno={pageno}&{query}"
32+ query_dict = {"search": query}
33+ language = params["language"].split("-")[0]
34+ # pylint: disable=undefined-variable
35+ if "all" != language and language in supported_languages:
36+ query_dict["languageOneOf"] = language
37+ params["url"] = search_url.format(
38+ query=urlencode(query_dict), pageno=pageno
39+ )
40+ return params
41+
42+
43+def _get_offset_from_pageno(pageno):
44+ return (pageno - 1) * 15 + 1
45+
46+
47+# get response from search-request
48+def response(resp):
49+ results = []
50+
51+ search_res = loads(resp.text)
52+
53+ embedded_url = (
54+ '<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" '
55+ + 'src="'
56+ + base_url
57+ + '{embed_path}" frameborder="0" allowfullscreen></iframe>'
58+ )
59+ # return empty array if there are no results
60+ if "data" not in search_res:
61+ return []
62+
63+ # parse results
64+ for res in search_res["data"]:
65+ title = res["name"]
66+ url = base_url + "/videos/watch/" + res["uuid"]
67+ description = res["description"]
68+ if description:
69+ content = html_to_text(res["description"])
70+ else:
71+ content = None
72+ thumbnail = base_url + res["thumbnailPath"]
73+ publishedDate = datetime.strptime(res["publishedAt"], "%Y-%m-%dT%H:%M:%S.%fZ")
74+ embedded = embedded_url.format(embed_path=res["embedPath"][1:])
75+
76+ results.append(
77+ {
78+ "template": "videos.html",
79+ "url": url,
80+ "title": title,
81+ "content": content,
82+ "publishedDate": publishedDate,
83+ "embedded": embedded,
84+ "thumbnail": thumbnail,
85+ }
86+ )
87+
88+ # return results
89+ return results
90+
91+
92+def _fetch_supported_languages(resp):
93+ ret_val = {}
94+ peertube_languages = list(loads(resp.text).keys())
95+ return peertube_languages
searx/settings.yml+8
@@ -877,6 +877,14 @@ engines:
877877 categories: it
878878 disabled : True
879879
880+ - name : peertube
881+ engine: peertube
882+ shortcut: ptb
883+ paging : True
884+ base_url : https://peer.tube/
885+ categories: videos
886+ disabled : True
887+
880888# - name : yacy
881889# engine : yacy
882890# shortcut : ya