51 if isinstance(base_url, list):
52 params[
"base_url"] = random.choice(base_url)
54 params[
"base_url"] = base_url
56 search_url = params[
"base_url"] +
"/api/v1/search?q={query}"
57 params[
"url"] = search_url.format(query=quote_plus(query)) +
"&page={pageno}".format(pageno=params[
"pageno"])
59 if params[
"time_range"]
in time_range_dict:
60 params[
"url"] +=
"&date={timerange}".format(timerange=time_range_dict[params[
"time_range"]])
62 if params[
"language"] !=
"all":
63 lang = params[
"language"].split(
"-")
65 params[
"url"] +=
"&range={lrange}".format(lrange=lang[1])
73 search_results = resp.json()
74 base_invidious_url = resp.search_params[
'base_url'] +
"/watch?v="
76 for result
in search_results:
77 rtype = result.get(
"type",
None)
79 videoid = result.get(
"videoId",
None)
83 url = base_invidious_url + videoid
84 thumbs = result.get(
"videoThumbnails", [])
85 thumb = next((th
for th
in thumbs
if th[
"quality"] ==
"sddefault"),
None)
87 thumbnail = thumb.get(
"url",
"")
93 if thumbnail
and not urlparse(thumbnail).netloc:
94 thumbnail = resp.search_params[
'base_url'] + thumbnail
96 publishedDate = parser.parse(time.ctime(result.get(
"published", 0)))
97 length = time.gmtime(result.get(
"lengthSeconds"))
99 length = time.strftime(
"%H:%M:%S", length)
101 length = time.strftime(
"%M:%S", length)
106 "title": result.get(
"title",
""),
107 "content": result.get(
"description",
""),
109 "views": humanize_number(result[
'viewCount']),
110 "template":
"videos.html",
111 "author": result.get(
"author"),
112 "publishedDate": publishedDate,
113 "iframe_src": resp.search_params[
'base_url'] +
'/embed/' + videoid,
114 "thumbnail": thumbnail,