Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v4.2 播放器] 视频相关功能失效 (查看封面 / 下载视频等) #4303

Closed
cr941131 opened this issue Jul 13, 2023 · 15 comments
Closed
Labels
adaptation 适配性改动

Comments

@cr941131
Copy link

cr941131 commented Jul 13, 2023

对应功能

下载功能

问题描述

下载插件已安装,但是功能按钮中现在只显示灰色的“查看封面”

似乎是因为https://api.bilibili.com/x/web-interface/view 这个接口失效了,subtitle是null了,

脚本版本

2.7.3

脚本管理器及版本

Tampermonkey v4.19.0

浏览器及版本

Chrome 版本 114.0.5735.199(正式版本) (64 位)

播放器版本

HTML5播放器 V4.2.0

播放策略

默认

错误信息

没有错误信息,但功能按钮失效

附加截图

image
image

致遇到了相同问题准备回复的人

太长不看
1、遇到了相同的问题:请用左下角的 reaction 点赞
2、实时关注该 Issue 的后续进展:请用 Issue 页上的 Subscribe 功能(在 PC 端按钮通常位于页面右侧)。
请您回复前务必确认您有在本 Issue 之外补充了其它相关信息(比如 Log)再行回复以免对他人造成不必要的困扰

完整版 由于每个 Issue 甚至整个项目都是可以订阅通知的, 对于已经有人汇报过的 Bug, 如果您也遇到了并且没有其他信息要补充, 可以直接在左下点个赞表示 +1, 不要再去新增评论。想关注后续的可以用 Subscribe,Subscribe 之后该 Issue 如果有变动都可以收到通知,如果不想被回复打扰可以使用更加进阶的 Customize 功能,勾选 "Closed" & "Reopened"。Closed 通常代表该 Issue 已被解决,极少数情况下的 Reopened 代表该 Issue 的问题重新出现。如果您新增了无意义评论,因为 Issue 这个 bug tracker 与邮件列表类似,订阅某个 Issue 的用户会在每次这个 Issue 有新的动态时收到一封新的提醒邮件。也就是说,在 Issue 中的一个不能提供新的信息的评论,相当于给所有订阅这个 Issue 的用户发了一封垃圾邮件(spam)。尤其项目的维护者也是订阅者中的一员,太多垃圾邮件会对维护者带来很多不必要的困扰。发送垃圾邮件在开源社区通常是不那么受欢迎的行为。
@cr941131 cr941131 changed the title 2.7.3版本更新以后,功能按钮打开以后什么都没有了 2.7.3版本更新以后,功能按钮打开以后什么只有灰色的“查看封面” Jul 13, 2023
@cr941131 cr941131 changed the title 2.7.3版本更新以后,功能按钮打开以后什么只有灰色的“查看封面” 2.7.3版本更新以后,功能按钮打开以后只有灰色的“查看封面” Jul 13, 2023
@the1812
Copy link
Owner

the1812 commented Jul 14, 2023

倒不是 subtitle 的问题, 是 window.aid 这些无了, 所以所有等待视频加载的功能都不执行了, 需要再找个办法拿到 aid 和 cid 才能修.
其他 issue 提到的还有记忆倍速, 扩展倍速, 默认播放器模式, 查看封面, 快速收藏, 外置稍后再看, 传统连播模式, 启用视频截图, 启用逐帧调整, 双击全屏, 触摸类功能.

@the1812 the1812 changed the title 2.7.3版本更新以后,功能按钮打开以后只有灰色的“查看封面” 视频相关功能失效 (查看封面 / 下载视频等) Jul 14, 2023
@Tinhone
Copy link
Contributor

Tinhone commented Jul 14, 2023

或许可以暂时置顶这个 issue?

@the1812 the1812 pinned this issue Jul 14, 2023
@zerzerzerz

This comment was marked as duplicate.

@EricZhou05

This comment was marked as duplicate.

@f59375543

This comment was marked as duplicate.

@Loss-of-time

This comment was marked as duplicate.

@Loss-of-time
Copy link

f'https://api.bilibili.com/x/player/pagelist?bvid={bvid}&jsonp=jsonp'
这个api可以获取cid

@the1812 the1812 added the adaptation 适配性改动 label Jul 15, 2023
@the1812
Copy link
Owner

the1812 commented Jul 15, 2023

再说明一下, 是无法直接读取当前打开页面中的视频的 aid (av 号), 获取视频信息 / 分页列表这些 API 都需要至少提供 aid 或 bvid. 此前是读取 window.aid, 番剧区以前发生过类似的事情, 最后在 window.$pbp.options.aid.toString() 上找到了 aid 所以能解决. 上面几位建议的 API 就是那些失效功能用到的, 缺少了 aid 无法调用所以都失效了.

根据 #4314 提供的信息, 这次的罪魁祸首应该是 v4.2.0 播放器, 和脚本最近更新的 v2.7.3 / v2.8.1-preview 没有关系.

如果你在页面 window 上找到了获取 aid 的方法, 欢迎分享; 纯 +1 的就不要发评论了, 多去上面点点赞.

@FoundTheWOUT
Copy link
Contributor

__INITIAL_STATE__.aid 不知道有没有用

@cr941131
Copy link
Author

cr941131 commented Jul 15, 2023

倒不是 subtitle 的问题, 是 window.aid 这些无了, 所以所有等待视频加载的功能都不执行了, 需要再找个办法拿到 aid 和 cid 才能修. 其他 issue 提到的还有记忆倍速, 扩展倍速, 默认播放器模式, 查看封面, 快速收藏, 外置稍后再看, 传统连播模式, 启用视频截图, 启用逐帧调整, 双击全屏, 触摸类功能.

如果只是aid和cid的话,可以这样获取

import requests
from bs4 import BeautifulSoup
import re
import json

headers = {'User-Agent': "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"}

url = 'https://www.bilibili.com/video/BV1qL411D7MK/'

def fetch_aid(url):
    res = requests.get(url,headers=headers)
    soup = BeautifulSoup(res.text, 'lxml')
    scripts = soup.find_all('script')  # 获取所有的脚本标签
    for script in scripts:
        if script.string:  # 遍历找aid
            aid_search = re.search(r'"aid":(\d+)', script.string)  # 正则提取aid
            if aid_search:
                return aid_search.group(1)

aid = fetch_aid(url)
print('该视频的aid是:', aid)  # 打印aid看看


# 从视频BV号中获取视频的cid
bv = re.findall(r'/(BV\w+)/', url)[0]
# bv = 'BV1bV41177ap'
res = requests.get(url=f'https://api.bilibili.com/x/player/pagelist?bvid={bv}', headers=headers)
html1 = res.json()
cid = html1['data'][0]['cid']  # 获取视频对应的cid号(注意,多p的情况要循环)
print('该视频的cid是:', cid)

参考:SocialSisterYi/bilibili-API-collect#709

@Tinhone
Copy link
Contributor

Tinhone commented Jul 15, 2023

window.__INITIAL_STATE__.aid
window.__INITIAL_STATE__.bvid
window.__INITIAL_STATE__.cidMap.<bvid>.cids[<part>]
window.__INITIAL_STATE__.cidMap[<aid>].cids[<part>]

举例:https://www.bilibili.com/video/BV1Xx411c7cH/

window.__INITIAL_STATE__.aid = 120040
window.__INITIAL_STATE__.bvid = "BV1Xx411c7cH"
window.__INITIAL_STATE__.cidMap.BV1Xx411c7cH.cids[1] = 201284
window.__INITIAL_STATE__.cidMap.BV1Xx411c7cH.cids[2] = 199771 //需切换到 p2 才有数据
window.__INITIAL_STATE__.cidMap[120040].cids[1] = 201284
window.__INITIAL_STATE__.cidMap[120040].cids[2] = 199771 //需切换到 p2 才有数据

以及可以通过这个 api 一次性获取某视频全部 cid 数据,请求 url 示例:

https://api.bilibili.com/x/player/pagelist?aid=120040
https://api.bilibili.com/x/player/pagelist?bvid=BV1Xx411c7cH

@the1812 the1812 changed the title 视频相关功能失效 (查看封面 / 下载视频等) [v4.2 播放器] 视频相关功能失效 (查看封面 / 下载视频等) Jul 16, 2023
@the1812
Copy link
Owner

the1812 commented Jul 16, 2023

可以, 等会就发个版

@FoundTheWOUT
Copy link
Contributor

@the1812 我注意到以前在番剧的页面会从 __INITIAL_STATE__ 拿数据

const json = JSON.parse(data.match(/window\.__INITIAL_STATE__=(.*);\(function\(\){/)[1])

但我昨晚尝试了一下,现在番剧也就是 /bangumi/play/ep 页面里貌似没有这个对象了?


另外补充一个, __INITIAL_STATE__.videoData 可以直接拿到 aid,bvid 和 cid。

@the1812 the1812 unpinned this issue Sep 8, 2023
@YouLanjie
Copy link

这个问题似乎在番剧区仍旧存在(例如其他视频都有下载按钮,但是番剧没有按钮)
浏览器版本:firefox aarch64 118.0.1-1
脚本版本:v2.8.5-71-g10300c16b

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
adaptation 适配性改动
Projects
None yet
Development

No branches or pull requests

9 participants