add peertube engine (#2109)

This commit is contained in:
Michael Ilsaas 2020-08-08 19:22:53 +02:00 committed by GitHub
parent c3054a10a6
commit a1ce141c99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 299 additions and 1 deletions

View file

@ -133,3 +133,4 @@ generally made searx better:
- @gordon-quad
- Sophie Tauchert @999eagle
- @bauruine
- Michael Ilsaas `<https://mikeri.net>`_

View file

@ -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
View 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

View file

@ -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