| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | # Invidious (Videos)## @website     https://invidio.us/# @provide-api yes (https://github.com/omarroth/invidious/wiki/API)## @using-api   yes# @results     JSON# @stable      yes# @parse       url, title, content, publishedDate, thumbnail, embeddedfrom searx.url_utils import quote_plusfrom dateutil import parserimport time# engine dependent configcategories = ["videos", "music"]paging = Truelanguage_support = Truetime_range_support = True# search-urlbase_url = "https://invidio.us/"# do search-requestdef request(query, params):    time_range_dict = {        "day": "today",        "week": "week",        "month": "month",        "year": "year",    }    search_url = base_url + "api/v1/search?q={query}"    params["url"] = search_url.format(        query=quote_plus(query)    ) + "&page={pageno}".format(pageno=params["pageno"])    if params["time_range"] in time_range_dict:        params["url"] += "&date={timerange}".format(            timerange=time_range_dict[params["time_range"]]        )    if params["language"] != "all":        lang = params["language"].split("-")        if len(lang) == 2:            params["url"] += "&range={lrange}".format(lrange=lang[1])    return params# get response from search-requestdef response(resp):    results = []    search_results = resp.json()    embedded_url = (        '<iframe width="540" height="304" '        + 'data-src="'        + base_url        + 'embed/{videoid}" '        + 'frameborder="0" allowfullscreen></iframe>'    )    base_invidious_url = base_url + "watch?v="    for result in search_results:        rtype = result.get("type", None)        if rtype == "video":            videoid = result.get("videoId", None)            if not videoid:                continue            url = base_invidious_url + videoid            embedded = embedded_url.format(videoid=videoid)            thumbs = result.get("videoThumbnails", [])            thumb = next(                (th for th in thumbs if th["quality"] == "sddefault"), None            )            if thumb:                thumbnail = thumb.get("url", "")            else:                thumbnail = ""            publishedDate = parser.parse(                time.ctime(result.get("published", 0))            )            results.append(                {                    "url": url,                    "title": result.get("title", ""),                    "content": result.get("description", ""),                    "template": "videos.html",                    "publishedDate": publishedDate,                    "embedded": embedded,                    "thumbnail": thumbnail,                }            )    return results
 |