From 73d50f57481cfe2951c3231b2f5dfd70c0e6b49f Mon Sep 17 00:00:00 2001 From: Austin-Olacsi <138650713+Austin-Olacsi@users.noreply.github.com> Date: Wed, 5 Mar 2025 18:15:32 -0700 Subject: [PATCH] [feat] add bilibili support to get get_embeded_stream_url --- searx/engines/360search_videos.py | 3 ++- searx/utils.py | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/searx/engines/360search_videos.py b/searx/engines/360search_videos.py index a4a59223d..27b3781b4 100644 --- a/searx/engines/360search_videos.py +++ b/searx/engines/360search_videos.py @@ -6,7 +6,7 @@ from urllib.parse import urlencode from datetime import datetime from searx.exceptions import SearxEngineAPIException -from searx.utils import html_to_text +from searx.utils import html_to_text, get_embeded_stream_url about = { "website": "https://tv.360kan.com/", @@ -58,6 +58,7 @@ def response(resp): 'template': 'videos.html', 'publishedDate': published_date, 'thumbnail': entry["cover_img"], + "iframe_src": get_embeded_stream_url(entry["play_url"]), } ) diff --git a/searx/utils.py b/searx/utils.py index f342c2803..8fdcb0fda 100644 --- a/searx/utils.py +++ b/searx/utils.py @@ -633,7 +633,7 @@ def _get_fasttext_model() -> "fasttext.FastText._FastText": # type: ignore def get_embeded_stream_url(url): """ Converts a standard video URL into its embed format. Supported services include Youtube, - Facebook, Instagram, TikTok, and Dailymotion. + Facebook, Instagram, TikTok, Dailymotion, and Bilibili. """ parsed_url = urlparse(url) iframe_src = None @@ -673,6 +673,22 @@ def get_embeded_stream_url(url): video_id = path_parts[2] iframe_src = 'https://www.dailymotion.com/embed/video/' + video_id + # Bilibili + elif parsed_url.netloc in ['www.bilibili.com', 'bilibili.com'] and parsed_url.path.startswith('/video/'): + path_parts = parsed_url.path.split('/') + + video_id = path_parts[2] + param_key = None + if video_id.startswith('av'): + video_id = video_id[2:] + param_key = 'aid' + elif video_id.startswith('BV'): + param_key = 'bvid' + + iframe_src = ( + f'https://player.bilibili.com/player.html?{param_key}={video_id}&high_quality=1&autoplay=false&danmaku=0' + ) + return iframe_src