Closed z0z0r4 closed 1 year ago
端午我来实现这个
创建放映室 POST https://api.bilibili.com/pgc/freya/web/room/create
data
season_id: 45303
episode_id: 752900
is_open: 0
platform: web
csrf: 24ac5ad5da36e98b3f5b23b01e56bfa0
resp
{
"code": 0,
"data": {
"com_room_id": 0,
"enter_id": "",
"episode_id": 752900,
"init_sequence_id": 0,
"is_new": 1,
"latest_seq_id": 0,
"report_time": 5,
"room_id": 102337299,
"room_mode": 0,
"season_id": 45303
},
"message": "success"
}
完全看不懂 from_type
和 fail_fast
的意义
"match": {
"url": "https://api.bilibili.com/pgc/freya/web/room/match",
"method": "POST",
"verify": true,
"data": {
"fail_fast": "int",
"season_id": "int: 季id",
"from_type": "int",
"season_type": "int",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "匹配放映室"
}
活见鬼,接口返回错误代码:6006079,信息:啊哦,放映室走失了,创建一个吧。
毁灭吧,这玩意有人接就接,没人接就爆炸吧,死活报错,复制的PS都没用,只有浏览器里重播才有200OK,封装个毛
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.51"
$session.Cookies.Add((New-Object System.Net.Cookie("i-wanna-go-back", "-1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("buvid_fp_plain", "undefined", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("nostalgia_conf", "-1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("LIVE_BUVID", "AUTO7316682671482426", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("CURRENT_BLACKGAP", "0", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("rpdid", "|(J~RYkk||lm0J'uYYmJm|YR|", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_uuid", "5410110B84-74DE-97AA-8C1F-F51074171311558203infoc", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("PVID", "2", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("hit-new-style-dyn", "0", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("hit-dyn-v2", "1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("dy_spec_agreed", "1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("buvid3", "931081E9D-AE3E-9F5F-9109F-6E1521591018836102infoc", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("is-2022-channel", "1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("blackside_state", "1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("header_theme_version", "CLOSE", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("CURRENT_PID", "58478c40-d092-11ed-a0b0-b75f1eda933b", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("opus-goback", "1", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("CURRENT_QUALITY", "112", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("FEED_LIVE_VERSION", "V8", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("DedeUserID", "558830935", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("DedeUserID__ckMd5", "2123f10c198e6caa", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("b_ut", "5", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("SESSDATA", "", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("bili_jct", "", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("fingerprint", "0287102c9275fb2a803d40bb46099b92", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("buvid_fp", "0287102c9275fb2a803d40bb46099b92", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("b_nut", "1687423841", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("i-wanna-go-feeds", "2", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("home_feed_column", "5", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("browser_resolution", "1536-714", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("b_lsid", "10F81FA4A_188E795A66F", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("bp_video_offset_558830935", "810346138723942400", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("sid", "5tm3u9nl", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("CURRENT_FNVAL", "80", "/", ".bilibili.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("buvid4", "ArNV1JztoIl6FXo4yYsDmg%3D%3D", "/", ".bilibili.com")))
Invoke-WebRequest -UseBasicParsing -Uri "https://api.bilibili.com/pgc/freya/web/room/info?room_id=102415923&platform=web" `
-WebSession $session `
-Headers @{
"authority"="api.bilibili.com"
"method"="GET"
"path"="/pgc/freya/web/room/info?room_id=102415923&platform=web"
"scheme"="https"
"accept"="application/json, text/plain, */*"
"accept-encoding"="gzip, deflate, br"
"accept-language"="zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
"cache-control"="no-cache"
"origin"="https://www.bilibili.com"
"pragma"="no-cache"
"referer"="https://www.bilibili.com/"
"sec-ch-ua"="`"Not.A/Brand`";v=`"8`", `"Chromium`";v=`"114`", `"Microsoft Edge`";v=`"114`""
"sec-ch-ua-mobile"="?0"
"sec-ch-ua-platform"="`"Windows`""
"sec-fetch-dest"="empty"
"sec-fetch-mode"="cors"
"sec-fetch-site"="same-site"
}
StatusCode : 200
StatusDescription : OK
Content : !${"code":6006079,"message":"åå¦ï¼æ¾æï¼å»ºä¸ä¸ªå
# bilibili_api/watchroom.py
"""
bilibili_api.watchroom
放映室相关 API
"""
from .utils.network_httpx import request
from .utils.utils import get_api
from .credential import Credential
API = get_api("watchroom")
class WatchRoom:
"""
放映室类
AttributesL
credential (Credential): 凭据类
room_id (int) : 放映室 id
"""
def __init__(self, room_id: int, credential: Credential):
self.room_id: int = room_id
self.credential: Credential = credential
async def get_info(self) -> dict:
"""
获取放映室信息
Returns:
dict: 调用 API 返回的结果
"""
api = API["info"]["info"]
params = {"room_id": self.room_id, "platform": "web"}
return await request(
"GET", api["url"], params=params, credential=self.credential
)
async def open(self) -> None:
"""
开放放映室
"""
api = API["operate"]["open"]
data = {"room_id": self.room_id, "is_open": 1, "csrf": self.credential.bili_jct, "platform": "web"}
await request("POST", url=api["url"], data=data, credential=self.credential)
async def close(self) -> None:
"""
关闭放映室
"""
api = API["operate"]["open"]
data = {"room_id": self.room_id, "is_open": 0}
await request("POST", api["url"], data=data, credential=self.credential)
bilibili_api/data/api/watchroom.json
{
"info": {
"info": {
"url": "https://api.bilibili.com/pgc/freya/web/room/info",
"method": "GET",
"verify": true,
"params": {
"room_id": "int: 放映室id",
"platform": "str: web"
},
"comment": "放映室信息"
}
},
"operate": {
"match": {
"url": "https://api.bilibili.com/pgc/freya/web/room/match",
"method": "POST",
"verify": true,
"data": {
"fail_fast": "int",
"season_id": "int: 番剧的 season_id",
"from_type": "int",
"season_type": "int",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "匹配放映室"
},
"create": {
"url": "https://api.bilibili.com/pgc/freya/web/room/create",
"method": "POST",
"verify": true,
"data": {
"season_id": "int: 番剧的 season_id",
"episode_id": "int: 剧集id",
"is_open": "int: 是否公开 0 不公开 1 公开",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "创建放映室"
},
"join": {
"url": "https://api.bilibili.com/pgc/freya/web/room/join",
"method": "POST",
"verify": true,
"data": {
"room_id": "int: 放映室id",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "加入放映室"
},
"open": {
"url": "https://api.bilibili.com/pgc/freya/web/room/modify/info",
"method": "POST",
"verify": true,
"data": {
"room_id": "int: 放映室id",
"is_open": "int: 是否公开 0 不公开 1 公开",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "开启放映室"
},
"progress": {
"url": "https://api.bilibili.com/pgc/freya/web/room/modify/progress",
"method": "POST",
"verify": true,
"data": {
"room_id": "int: 放映室id",
"status": "状态 1 播放中 0 暂停中 2 已结束",
"progress": "int: 进度 s",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "修改放映室进度"
},
"kickout": {
"url": "https://api.bilibili.com/pgc/freya/web/room/kickout",
"method": "POST",
"verify": true,
"data": {
"room_id": "int: 放映室id",
"mid": "int: 被踢出用户uid",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "踢出放映室"
},
"season": {
"url": "https://api.bilibili.com/pgc/freya/web/room/modify/season",
"method": "POST",
"verify": true,
"data": {
"room_id": "int: 放映室id",
"season_id": "int: 番剧的 season_id",
"episode_id": "int: 剧集id",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "修改放映室播放内容"
},
"send": {
"url": "https://api.bilibili.com/pgc/freya/web/im/msg/send",
"method": "POST",
"verify": true,
"data": {
"room_id": "int: 放映室id",
"content_type": "int: 0",
"content": "str: 发送内容",
"req_id": "int: 时间戳",
"platform": "str: web",
"csrf": "str: csrf"
},
"comment": "发送弹幕"
}
}
}
接口如果涉及房主是自己或者需要房主权限的情况下,必须验证buvid3为开房的那个...
天坑,气炸了
GET https://api.bilibili.com/pgc/freya/web/room/heartbeat 久不发就会被踢出 默认30s一次
data room_id=117136123&mid=129323413&season_id=5016&episode_id=90901&type=0&play_status=1&buvid=
获取即时播放情况,get_info 是同步操作 wss://vega-dsa.biliapi.net:8443/pgc/vega/websocket
progress 房主特有,操作进度条和播放状态
做完这个发release
从来没用过,今天不小心点到发现偶尔还是有人用的...
https://www.bilibili.com/watchroom/100063959?wepid=752679&seasonid=45305
挖个坑,里面和直播间一样,接口挺多的233