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
|
||||
- Sophie Tauchert @999eagle
|
||||
- @bauruine
|
||||
- Michael Ilsaas `<https://mikeri.net>`_
|
||||
|
|
|
@ -25033,6 +25033,200 @@
|
|||
"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": [
|
||||
"bg-BG",
|
||||
"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
|
||||
disabled : True
|
||||
|
||||
- name : peertube
|
||||
engine: peertube
|
||||
shortcut: ptb
|
||||
paging : True
|
||||
base_url : https://peer.tube/
|
||||
categories: videos
|
||||
disabled : True
|
||||
|
||||
# - name : yacy
|
||||
# engine : yacy
|
||||
# shortcut : ya
|
||||
|
|
Loading…
Reference in a new issue