forked from Ponysearch/Ponysearch
add peertube engine (#2109)
This commit is contained in:
parent
c3054a10a6
commit
a1ce141c99
4 changed files with 299 additions and 1 deletions
|
@ -133,3 +133,4 @@ generally made searx better:
|
||||||
- @gordon-quad
|
- @gordon-quad
|
||||||
- Sophie Tauchert @999eagle
|
- Sophie Tauchert @999eagle
|
||||||
- @bauruine
|
- @bauruine
|
||||||
|
- Michael Ilsaas `<https://mikeri.net>`_
|
||||||
|
|
|
@ -25033,6 +25033,200 @@
|
||||||
"name": "\u4e2d\u6587 (\u7e41\u9ad4)"
|
"name": "\u4e2d\u6587 (\u7e41\u9ad4)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"peertube": [
|
||||||
|
"aa",
|
||||||
|
"ab",
|
||||||
|
"af",
|
||||||
|
"ak",
|
||||||
|
"am",
|
||||||
|
"an",
|
||||||
|
"ar",
|
||||||
|
"as",
|
||||||
|
"ase",
|
||||||
|
"av",
|
||||||
|
"avk",
|
||||||
|
"ay",
|
||||||
|
"az",
|
||||||
|
"ba",
|
||||||
|
"be",
|
||||||
|
"bfi",
|
||||||
|
"bg",
|
||||||
|
"bi",
|
||||||
|
"bm",
|
||||||
|
"bn",
|
||||||
|
"bo",
|
||||||
|
"br",
|
||||||
|
"bs",
|
||||||
|
"bzs",
|
||||||
|
"ca",
|
||||||
|
"ce",
|
||||||
|
"ch",
|
||||||
|
"co",
|
||||||
|
"cr",
|
||||||
|
"cs",
|
||||||
|
"cse",
|
||||||
|
"csl",
|
||||||
|
"cv",
|
||||||
|
"cy",
|
||||||
|
"da",
|
||||||
|
"de",
|
||||||
|
"dsl",
|
||||||
|
"dv",
|
||||||
|
"dz",
|
||||||
|
"ee",
|
||||||
|
"el",
|
||||||
|
"en",
|
||||||
|
"eo",
|
||||||
|
"es",
|
||||||
|
"et",
|
||||||
|
"eu",
|
||||||
|
"fa",
|
||||||
|
"ff",
|
||||||
|
"fi",
|
||||||
|
"fj",
|
||||||
|
"fo",
|
||||||
|
"fr",
|
||||||
|
"fsl",
|
||||||
|
"fy",
|
||||||
|
"ga",
|
||||||
|
"gd",
|
||||||
|
"gl",
|
||||||
|
"gn",
|
||||||
|
"gsg",
|
||||||
|
"gu",
|
||||||
|
"gv",
|
||||||
|
"ha",
|
||||||
|
"he",
|
||||||
|
"hi",
|
||||||
|
"ho",
|
||||||
|
"hr",
|
||||||
|
"ht",
|
||||||
|
"hu",
|
||||||
|
"hy",
|
||||||
|
"hz",
|
||||||
|
"id",
|
||||||
|
"ig",
|
||||||
|
"ii",
|
||||||
|
"ik",
|
||||||
|
"is",
|
||||||
|
"it",
|
||||||
|
"iu",
|
||||||
|
"ja",
|
||||||
|
"jbo",
|
||||||
|
"jsl",
|
||||||
|
"jv",
|
||||||
|
"ka",
|
||||||
|
"kg",
|
||||||
|
"ki",
|
||||||
|
"kj",
|
||||||
|
"kk",
|
||||||
|
"kl",
|
||||||
|
"km",
|
||||||
|
"kn",
|
||||||
|
"ko",
|
||||||
|
"kr",
|
||||||
|
"ks",
|
||||||
|
"ku",
|
||||||
|
"kv",
|
||||||
|
"kw",
|
||||||
|
"ky",
|
||||||
|
"lb",
|
||||||
|
"lg",
|
||||||
|
"li",
|
||||||
|
"ln",
|
||||||
|
"lo",
|
||||||
|
"lt",
|
||||||
|
"lu",
|
||||||
|
"lv",
|
||||||
|
"mg",
|
||||||
|
"mh",
|
||||||
|
"mi",
|
||||||
|
"mk",
|
||||||
|
"ml",
|
||||||
|
"mn",
|
||||||
|
"mr",
|
||||||
|
"ms",
|
||||||
|
"mt",
|
||||||
|
"my",
|
||||||
|
"na",
|
||||||
|
"nb",
|
||||||
|
"nd",
|
||||||
|
"ne",
|
||||||
|
"ng",
|
||||||
|
"nl",
|
||||||
|
"nn",
|
||||||
|
"no",
|
||||||
|
"nr",
|
||||||
|
"nv",
|
||||||
|
"ny",
|
||||||
|
"oc",
|
||||||
|
"oj",
|
||||||
|
"om",
|
||||||
|
"or",
|
||||||
|
"os",
|
||||||
|
"pa",
|
||||||
|
"pks",
|
||||||
|
"pl",
|
||||||
|
"ps",
|
||||||
|
"pt",
|
||||||
|
"qu",
|
||||||
|
"rm",
|
||||||
|
"rn",
|
||||||
|
"ro",
|
||||||
|
"rsl",
|
||||||
|
"ru",
|
||||||
|
"rw",
|
||||||
|
"sc",
|
||||||
|
"sd",
|
||||||
|
"sdl",
|
||||||
|
"se",
|
||||||
|
"sfs",
|
||||||
|
"sg",
|
||||||
|
"sh",
|
||||||
|
"si",
|
||||||
|
"sk",
|
||||||
|
"sl",
|
||||||
|
"sm",
|
||||||
|
"sn",
|
||||||
|
"so",
|
||||||
|
"sq",
|
||||||
|
"sr",
|
||||||
|
"ss",
|
||||||
|
"st",
|
||||||
|
"su",
|
||||||
|
"sv",
|
||||||
|
"sw",
|
||||||
|
"swl",
|
||||||
|
"ta",
|
||||||
|
"te",
|
||||||
|
"tg",
|
||||||
|
"th",
|
||||||
|
"ti",
|
||||||
|
"tk",
|
||||||
|
"tl",
|
||||||
|
"tlh",
|
||||||
|
"tn",
|
||||||
|
"to",
|
||||||
|
"tr",
|
||||||
|
"ts",
|
||||||
|
"tt",
|
||||||
|
"tw",
|
||||||
|
"ty",
|
||||||
|
"ug",
|
||||||
|
"uk",
|
||||||
|
"ur",
|
||||||
|
"uz",
|
||||||
|
"ve",
|
||||||
|
"vi",
|
||||||
|
"wa",
|
||||||
|
"wo",
|
||||||
|
"xh",
|
||||||
|
"yi",
|
||||||
|
"yo",
|
||||||
|
"za",
|
||||||
|
"zh",
|
||||||
|
"zu"
|
||||||
|
],
|
||||||
"qwant": [
|
"qwant": [
|
||||||
"bg-BG",
|
"bg-BG",
|
||||||
"br-FR",
|
"br-FR",
|
||||||
|
|
95
searx/engines/peertube.py
Normal file
95
searx/engines/peertube.py
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
"""
|
||||||
|
peertube (Videos)
|
||||||
|
|
||||||
|
@website https://www.peertube.live
|
||||||
|
@provide-api yes (https://docs.joinpeertube.org/api-rest-reference.html)
|
||||||
|
|
||||||
|
@using-api yes
|
||||||
|
@results JSON
|
||||||
|
@stable yes
|
||||||
|
@parse url, title, thumbnail, publishedDate, embedded
|
||||||
|
|
||||||
|
@todo implement time range support
|
||||||
|
"""
|
||||||
|
|
||||||
|
from json import loads
|
||||||
|
from datetime import datetime
|
||||||
|
from searx.url_utils import urlencode
|
||||||
|
from searx.utils import html_to_text
|
||||||
|
|
||||||
|
# engine dependent config
|
||||||
|
categories = ["videos"]
|
||||||
|
paging = True
|
||||||
|
language_support = True
|
||||||
|
base_url = "https://peer.tube/"
|
||||||
|
supported_languages_url = base_url + "api/v1/videos/languages"
|
||||||
|
|
||||||
|
|
||||||
|
# do search-request
|
||||||
|
def request(query, params):
|
||||||
|
pageno = (params["pageno"] - 1) * 15
|
||||||
|
search_url = base_url + "api/v1/search/videos/?pageno={pageno}&{query}"
|
||||||
|
query_dict = {"search": query}
|
||||||
|
language = params["language"].split("-")[0]
|
||||||
|
# pylint: disable=undefined-variable
|
||||||
|
if "all" != language and language in supported_languages:
|
||||||
|
query_dict["languageOneOf"] = language
|
||||||
|
params["url"] = search_url.format(
|
||||||
|
query=urlencode(query_dict), pageno=pageno
|
||||||
|
)
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def _get_offset_from_pageno(pageno):
|
||||||
|
return (pageno - 1) * 15 + 1
|
||||||
|
|
||||||
|
|
||||||
|
# get response from search-request
|
||||||
|
def response(resp):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
search_res = loads(resp.text)
|
||||||
|
|
||||||
|
embedded_url = (
|
||||||
|
'<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" '
|
||||||
|
+ 'src="'
|
||||||
|
+ base_url
|
||||||
|
+ '{embed_path}" frameborder="0" allowfullscreen></iframe>'
|
||||||
|
)
|
||||||
|
# return empty array if there are no results
|
||||||
|
if "data" not in search_res:
|
||||||
|
return []
|
||||||
|
|
||||||
|
# parse results
|
||||||
|
for res in search_res["data"]:
|
||||||
|
title = res["name"]
|
||||||
|
url = base_url + "/videos/watch/" + res["uuid"]
|
||||||
|
description = res["description"]
|
||||||
|
if description:
|
||||||
|
content = html_to_text(res["description"])
|
||||||
|
else:
|
||||||
|
content = None
|
||||||
|
thumbnail = base_url + res["thumbnailPath"]
|
||||||
|
publishedDate = datetime.strptime(res["publishedAt"], "%Y-%m-%dT%H:%M:%S.%fZ")
|
||||||
|
embedded = embedded_url.format(embed_path=res["embedPath"][1:])
|
||||||
|
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
"template": "videos.html",
|
||||||
|
"url": url,
|
||||||
|
"title": title,
|
||||||
|
"content": content,
|
||||||
|
"publishedDate": publishedDate,
|
||||||
|
"embedded": embedded,
|
||||||
|
"thumbnail": thumbnail,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# return results
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def _fetch_supported_languages(resp):
|
||||||
|
ret_val = {}
|
||||||
|
peertube_languages = list(loads(resp.text).keys())
|
||||||
|
return peertube_languages
|
|
@ -877,6 +877,14 @@ engines:
|
||||||
categories: it
|
categories: it
|
||||||
disabled : True
|
disabled : True
|
||||||
|
|
||||||
|
- name : peertube
|
||||||
|
engine: peertube
|
||||||
|
shortcut: ptb
|
||||||
|
paging : True
|
||||||
|
base_url : https://peer.tube/
|
||||||
|
categories: videos
|
||||||
|
disabled : True
|
||||||
|
|
||||||
# - name : yacy
|
# - name : yacy
|
||||||
# engine : yacy
|
# engine : yacy
|
||||||
# shortcut : ya
|
# shortcut : ya
|
||||||
|
|
Loading…
Reference in a new issue