Browse Source

[feat] add bilibili support to get get_embeded_stream_url

Austin-Olacsi 1 month ago
parent
commit
73d50f5748
2 changed files with 19 additions and 2 deletions
  1. 2 1
      searx/engines/360search_videos.py
  2. 17 1
      searx/utils.py

+ 2 - 1
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"]),
             }
         )
 

+ 17 - 1
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