.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
bilibili.py
Go to the documentation of this file.
1
# SPDX-License-Identifier: AGPL-3.0-or-later
2
"""Bilibili is a Chinese video sharing website.
3
4
.. _Bilibili: https://www.bilibili.com
5
"""
6
7
import
random
8
import
string
9
from
urllib.parse
import
urlencode
10
from
datetime
import
datetime, timedelta
11
12
# Engine metadata
13
about = {
14
"website"
:
"https://www.bilibili.com"
,
15
"wikidata_id"
:
"Q3077586"
,
16
"official_api_documentation"
:
None
,
17
"use_official_api"
:
False
,
18
"require_api_key"
:
False
,
19
"results"
:
"JSON"
,
20
}
21
22
# Engine configuration
23
paging =
True
24
results_per_page = 20
25
categories = [
"videos"
]
26
27
# Search URL
28
base_url =
"https://api.bilibili.com/x/web-interface/search/type"
29
30
cookie = {
31
"innersign"
:
"0"
,
32
"buvid3"
:
""
.join(random.choice(string.hexdigits)
for
_
in
range(16)) +
"infoc"
,
33
"i-wanna-go-back"
:
"-1"
,
34
"b_ut"
:
"7"
,
35
"FEED_LIVE_VERSION"
:
"V8"
,
36
"header_theme_version"
:
"undefined"
,
37
"home_feed_column"
:
"4"
,
38
}
39
40
41
def
request
(query, params):
42
query_params = {
43
"__refresh__"
:
"true"
,
44
"page"
: params[
"pageno"
],
45
"page_size"
: results_per_page,
46
"single_column"
:
"0"
,
47
"keyword"
: query,
48
"search_type"
:
"video"
,
49
}
50
51
params[
"url"
] = f
"{base_url}?{urlencode(query_params)}"
52
params[
"cookies"
] = cookie
53
54
return
params
55
56
57
# Format the video duration
58
def
format_duration
(duration):
59
minutes, seconds = map(int, duration.split(
":"
))
60
total_seconds = minutes * 60 + seconds
61
62
formatted_duration = str(timedelta(seconds=total_seconds))[2:]
if
0 <= total_seconds < 3600
else
""
63
64
return
formatted_duration
65
66
67
def
response
(resp):
68
search_res = resp.json()
69
70
results = []
71
72
for
item
in
search_res.get(
"data"
, {}).get(
"result"
, []):
73
title = item[
"title"
]
74
url = item[
"arcurl"
]
75
thumbnail = item[
"pic"
]
76
description = item[
"description"
]
77
author = item[
"author"
]
78
video_id = item[
"aid"
]
79
unix_date = item[
"pubdate"
]
80
81
formatted_date = datetime.utcfromtimestamp(unix_date)
82
formatted_duration =
format_duration
(item[
"duration"
])
83
iframe_url = f
"https://player.bilibili.com/player.html?aid={video_id}&high_quality=1&autoplay=false&danmaku=0"
84
85
results.append(
86
{
87
"title"
: title,
88
"url"
: url,
89
"content"
: description,
90
"author"
: author,
91
"publishedDate"
: formatted_date,
92
"length"
: formatted_duration,
93
"thumbnail"
: thumbnail,
94
"iframe_src"
: iframe_url,
95
"template"
:
"videos.html"
,
96
}
97
)
98
99
return
results
searx.engines.bilibili.format_duration
format_duration(duration)
Definition
bilibili.py:58
searx.engines.bilibili.request
request(query, params)
Definition
bilibili.py:41
searx.engines.bilibili.response
response(resp)
Definition
bilibili.py:67
searxng
searx
engines
bilibili.py
Generated on Wed May 15 2024 21:10:12 for .oO SearXNG Developer Documentation Oo. by
1.10.0