50 if isinstance(base_url, list):
51 params[
"base_url"] = random.choice(base_url)
53 params[
"base_url"] = base_url
55 search_url = params[
"base_url"] +
"/api/v1/search?q={query}"
56 params[
"url"] = search_url.format(query=quote_plus(query)) +
"&page={pageno}".format(pageno=params[
"pageno"])
58 if params[
"time_range"]
in time_range_dict:
59 params[
"url"] +=
"&date={timerange}".format(timerange=time_range_dict[params[
"time_range"]])
61 if params[
"language"] !=
"all":
62 lang = params[
"language"].split(
"-")
64 params[
"url"] +=
"&range={lrange}".format(lrange=lang[1])
72 search_results = resp.json()
73 base_invidious_url = resp.search_params[
'base_url'] +
"/watch?v="
75 for result
in search_results:
76 rtype = result.get(
"type",
None)
78 videoid = result.get(
"videoId",
None)
82 url = base_invidious_url + videoid
83 thumbs = result.get(
"videoThumbnails", [])
84 thumb = next((th
for th
in thumbs
if th[
"quality"] ==
"sddefault"),
None)
86 thumbnail = thumb.get(
"url",
"")
92 if thumbnail
and not urlparse(thumbnail).netloc:
93 thumbnail = resp.search_params[
'base_url'] + thumbnail
95 publishedDate = parser.parse(time.ctime(result.get(
"published", 0)))
96 length = time.gmtime(result.get(
"lengthSeconds"))
98 length = time.strftime(
"%H:%M:%S", length)
100 length = time.strftime(
"%M:%S", length)
105 "title": result.get(
"title",
""),
106 "content": result.get(
"description",
""),
108 "views": humanize_number(result[
'viewCount']),
109 "template":
"videos.html",
110 "author": result.get(
"author"),
111 "publishedDate": publishedDate,
112 "iframe_src": resp.search_params[
'base_url'] +
'/embed/' + videoid,
113 "thumbnail": thumbnail,