标题无关但重要:如果你从菜鸟教程之类的地方学完了 JavaScript 基础,知道如何操作页面上的元素,想做组件但无从下手,主要需要学习的 JavaScript-
fetch:使用 API 或获取其他网络资源
-
Mutation Observer:检查其他组件对页面的修改/bangumi对页面的动态修改
-
localStorage,sessionStorage,IndexedDB:存储组件的设置和缓存等
推荐:
现代 JavaScript 教程-
jQuery:简化 DOM 操作和请求
另外不要忘记善用AI!
API1.
公开API:
https://bangumi.github.io/api/(
班友总结的使用建议)
使用 access token 进行用户认证,GET 请求支持跨域。
获取 access token 的方法:
- 法一:引导用户到
此处创建,粘贴存储到组件里。最好不要用 localStorage 等存储到浏览器中,以免暴露 access token。
- 法二:
创建“应用”,使用获得的 App ID 和 App Secret 进行 OAuth 授权。因为需要后端存储 App Secret,组件难以使用此方法,也可以使用 Pipedream 等 serverless 平台。(参考:
用户授权机制)
注意很多 API 不需要 access token。
除了上方链接中的建议:
- /v0/search 系列API搜索结果不如旧API /search(
https://github.com/bangumi/server/issues/229)
2.
私有API:
https://bangumi.github.io/dev-docs/使用(新站的) cookies session 进行用户认证,目前仍处于开发阶段,无兼容性保证,不支持跨域。如果新站上线后仍有组件功能,可以在新站使用。
- 实际上应该支持 access token 认证,但文档没有写明(https://github.com/bangumi/server-private/issues/662)。
- 若只考虑脚本而不发布组件,可使用
GM_xmlhttpRequest 绕过跨域限制调用。
3.
旧公开 API 等:
https://github.com/jabbany/dhufufu/tree/master/bangumi /
站内查询入口/用户相关(班友整理)
出于兼容考虑旧 API 依旧能访问但已不推荐使用,相关 API 文档已隐藏。
参考:
https://github.com/bangumi/dev-docs4.
班友制作的第三方API4.1
VIB数据APIGET https://api.jirehlov.com/vib/{id}
4.2
发帖/回帖/贴贴 统计APIPOST https://bgm.nyamori.moe/forum-enhance/query
格式: {"users":["304116","trim21","sai"],"type":"group"}
- type可以是group, subject, blog, ep, character, person。
4.3
讨论贴历史记录API(https://bgm.nyamori.moe)
GET /history/(subject|group)/:topicId/link
GET /history/(subject|group)/:topicId/latest: 会自动302跳到最新的json
GET /history/(subject|group)/:topicId/:millisecondTimestamp/html: 会显示原始爬下来的html
GET /history/(subject|group)/:topicId/latest/html: 会显示最新爬到的html
GET /history/(subject|group)/:topicId
GET /history/(subject|group)/:topicId/:millisecondTimestamp
4.4
查看被删回复APIGET https://bgm.nyamori.moe/forum-enhance/deleted_post/:type/:topicId/:postId
type可以是group, subject , blog。返回的是被删前最后更新的内容的html纯文本。
如果未收录会返回404。
4.5
番剧推荐 API(维护中)
5.
没有官方 API/不想使用 access token 时:
- 直接获取页面,解析HTML
- 检查页面 form 标签的 action 属性值(此时 POST 请求需要设为 URLSearchParams)
- 使用 控制台 - Network/网络 检查是否抓得到
全局变量0. 可用 jQuery
1. 在组件中使用全局变量的方法:window.变量
- 若在油猴脚本中,需要在开头加上:
并使用 unsafeWindow.变量
- 除了调用,也可以直接覆盖,改变所有使用相关变量的原网站操作
2. 全部全局变量(获得方法:在未开启任何组件的 bangumi 获得的 window 的属性与在空白页获得的 window 的属性不相交的部分,存在不准确)
SHOW_ROBOT
CHOBITS_UID
SITE_URL
CHOBITS_VER
submitPost
submitTip
subReplycancel
eraseSubjectTopic
PostTo
SetTips
eraseSubjectCollect
subReply
chiiLib
getObj
designDefault
fetchInPageSubjectID
eraseClubTopic
erasePM
checkall
MoreElement
switchDisplay
infoboxid
disconnectFriend
eraseEntry
tb_pathToImage
eraseGrpTopic
nowmode
regSetNickName
seditor_ctlent
removeListItem
AJAXtip
infoboxVal
submitError
ignoreUser
checkTsukkomiInput
tb_init
tb_show
tb_showIframe
tb_remove
tb_position
tb_parseQuery
tb_getPageSize
tb_detectMacXFF
sizeContent
AddMSGreceiver
GenInterestBox
switchRobotSpeech
WikiTpl
WCODEParse
WCODEDump
WCODEtoNormal
NormaltoWCODE
addSubProp
stopEnterSubmit
multiKeyRegDel
addoneprop
log
dataLayer
imgLoader
OML2D
Live2DCubismCore
3. 部分可能有用的全局变量
- CHOBITS_UID:当前登录用户的数字UID
- SITE_URL:当前域名
- data_ignore_users:绝交班友列表
- chiiLib
- ukagaka
- toggleDisplay():切换春菜显示
- presentSpeech(html, auto_dismiss = false, slide_down = true):春菜说话
若无法找到如何使用全局变量中的函数,可尝试查看压缩后的代码:
主要内容、
文本编辑相关(
还原工具推荐)
其他- 获取用户修改自定义ID后,可通过头像url获取用户数字ID
- 在 console 中输入以下命令可查看组件 log(参考:
[Changelog] 组件功能更新记录):
使用下方命令取消:
- 疑似因为过时的 polyfill,bangumi 的 Promise 不支持 Promise.allSettled、Promise.any 等 2020 后的 Promise 方法
过去相关整理:
一些基础的开发参考资料