| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | 
"""Bilibili is a Chinese video sharing website... _Bilibili: https://www.bilibili.com"""import randomimport stringfrom urllib.parse import urlencodefrom datetime import datetime, timedeltafrom searx import utilsabout = {    "website": "https://www.bilibili.com",    "wikidata_id": "Q3077586",    "official_api_documentation": None,    "use_official_api": False,    "require_api_key": False,    "results": "JSON",}paging = Trueresults_per_page = 20categories = ["videos"]base_url = "https://api.bilibili.com/x/web-interface/search/type"cookie = {    "innersign": "0",    "buvid3": "".join(random.choice(string.hexdigits) for _ in range(16)) + "infoc",    "i-wanna-go-back": "-1",    "b_ut": "7",    "FEED_LIVE_VERSION": "V8",    "header_theme_version": "undefined",    "home_feed_column": "4",}def request(query, params):    query_params = {        "__refresh__": "true",        "page": params["pageno"],        "page_size": results_per_page,        "single_column": "0",        "keyword": query,        "search_type": "video",    }    params["url"] = f"{base_url}?{urlencode(query_params)}"    params["cookies"] = cookie    return paramsdef format_duration(duration):    if not ":" in duration:        return None    minutes, seconds = map(int, duration.split(":"))    total_seconds = minutes * 60 + seconds    formatted_duration = str(timedelta(seconds=total_seconds))[2:] if 0 <= total_seconds < 3600 else ""    return formatted_durationdef response(resp):    search_res = resp.json()    results = []    for item in search_res.get("data", {}).get("result", []):        title = utils.html_to_text(item["title"])        url = item["arcurl"]        thumbnail = item["pic"]        description = item["description"]        author = item["author"]        video_id = item["aid"]        unix_date = item["pubdate"]        formatted_date = datetime.fromtimestamp(unix_date)        formatted_duration = format_duration(item["duration"])        iframe_url = f"https://player.bilibili.com/player.html?aid={video_id}&high_quality=1&autoplay=false&danmaku=0"        results.append(            {                "title": title,                "url": url,                "content": description,                "author": author,                "publishedDate": formatted_date,                "length": formatted_duration,                "thumbnail": thumbnail,                "iframe_src": iframe_url,                "template": "videos.html",            }        )    return results
 |