This Python SDK provides access to Bilibili's official and third-party APIs for video, anime, user, channel, and audio data. The library implements asynchronous operations and includes risk control mechanisms for stable data retrieval.
Module Architecture
- Video Module: Retrieves metadata, statistics, and chapter lists using BV/AV identifiers
- User Module: Fetches profile details, upload history, and follower data via user IDs
- Live Module: Monitors stream status, manages real-time chat, and tracks gift donations through WebSocket connections
- Search Module: Supports content discovery across videos, users, and anime catalogs
Implementation Examples
Video Metadata Extraction
import asyncio
from bilibili_api import Video
async def fetch_video_details(video_id):
video_obj = Video(bvid=video_id)
metadata = await video_obj.retrieve_data()
return {
'title': metadata['title'],
'views': metadata['statistics']['views'],
'likes': metadata['statistics']['likes'],
'coins': metadata['statistics']['coins']
}
# Execution example
video_data = asyncio.run(fetch_video_details("BV1uv411q7Mv"))
Batch User Analysis
async def analyze_user_profiles(user_ids):
tasks = [User(uid=uid).fetch_profile() for uid in user_ids]
results = await asyncio.gather(*tasks)
return [process_profile(data) for data in results]
Live Stream Monitoring
from bilibili_api import LiveRoom, sync
def check_stream_status(room_id):
room = LiveRoom(room_id)
status = sync(room.get_current_status())
return {
'is_live': status['live_status'],
'viewer_count': status['online_users'],
'stream_title': status['title']
}
Performance Optimization
Implement credential management for enhanced API access:
from bilibili_api import SessionManager
session = SessionManager(
session_token="YOUR_SESSDATA",
security_token="YOUR_BILI_JCT",
device_id="YOUR_BUVID3"
)
Configure network parameters for unstable connections:
import aiohttp
from bilibili_api import config
config.set_proxy("http://your-proxy:port")
config.set_timeout(aiohttp.ClientTimeout(total=30))
Best Practices
- Implement exponential backoff for API rate limiting
- Use async context managers for resource management
- Validate response structures before data parsing
- Monitor API changes through version tracking