跳转至

调取b站API\#

个人GitHub项目,将bilibili视频信息和字幕提取出来,自动化连接到Notion中

img

快速上手\#

根据下面的命令安装依赖库

pip install oss2
pip install requests

本项目包括两个部分

b站的API请求\#

使用的API有:

  • ‘https://api.bilibili.com/x/web-interface/view’ ,带参数bvid
  • 'https://api.bilibili.com/x/player/pagelist?bvid=' +bvid,用于请求cid
  • f'https://api.bilibili.com/x/player/v2?bvid={bvid}&cid={cid}' ,用于请求subtitle_url
  • 返回的subtitle_url,用于获取字幕

详细抓取过程请见jupyter notebook

目录\#

$ tree
.
├── GPT_API.ipynb
├── GUI # 将会尝试添加图形界面
   └── GUI.py
├── README.md
├── bilibili_API.ipynb
└── workflow
    ├── GPT_summary # 由于各种原因GPT的部分暂时不使用,将会尝试用b站的视频助手
       ├── GPT_summary.py
       ├── __init__.py
       └── __pycache__
    ├── bilidl
    ├── info_downloader
       ├── __init__.py
       ├── info_downloader.py
       └── section_info.py
    ├── main.py
    ├── settings.json # 里面存放的都是敏感信息,请手动添加此文件
    ├── submit_to_notion
       ├── __init__.py
       └── submit_to_notion.py
    ├── subtitle_downloader
       ├── __init__.py
       ├── cookie # 可以不添加,命令会提示使用vim添加
       └── subtitle_downloader.py
    └── writein.py

程序运行工作流\#

  1. 命令行获取参数bvidp_num
  2. 从程序相对目录下获取cookie,如果cookie失效,则提示使用vim写入cookie
  3. settings.json中读取notionaliyun ossid和密钥等信息
  4. 访问b站API
  5. bili_info, bili_tags
  6. subtitle_downloader
  7. 视频cover上传至阿里云图床(后续本地markdown文件和notion中的cover都将使用阿里云图床的url)
  8. 读取的subtitles写入markdown文件,文件将默认删除,想要保存在执行目录下请将writein.py中的os.remove(f"{title}.md")注释
  9. 上传至notion数据库

workflow\#


自动化流程:

graph LR
prompt(prompt)
para((bvid, p_num))
judge{if cookie is valid ?}
write(write in with vim)
read(settings.json)
check((check subtitles))
requests(bilibili API)
upload(upload cover)
import((import to notion))

prompt --> judge
para --> judge
judge --> |Yes| read
judge --> |No | write
write --> judge2{if cookie is valid ?}
judge2 --> |Yes| read
judge2 --> |No| check
read --> requests
requests --> upload
upload --> import

b站API的请求原理图:

graph TD

get{requests}

info(bili_info)
tags(bili_tags)
cid(cid)
bvid(bvid)
json_api(json_api)
subtitle_url(subtitle_url)
information((information))
subtitle_json((subtitle_json))

bvid --> get
get -.-> info
get -.-> tags

info --> information
tags --> information

get -.-> cid
bid(bvid) -.-> json_api
cid --> json_api
json_api --> subtitle_url
subtitle_url --> subtitle_json

需要做的准备\#

关联数据库\#

Notion中创建数据库,保存密钥

本地创建database

格式如下:

NAME TYPE
title title
cover files & media
URL URL
UP主 text
分区 select
tags multi select
发布时间 date
加入时间 date

得到notion_tokendatabase_id

上传至图床\#

本项目从bilibili获取的cover将会上传至阿里云oss图床中

markdown文本和上传至notion中的图片链接均为阿里云图床的链接

得到access_key_idaccess-key-secretbucket_nameendpoint

添加密钥\#

workflow目录下添加settings.json文件,内容如下:

{
    "notion_token": "",
    "database_id": "",
    "api_key": "",
    "access_key_id": "",
    "access_key_secret": "",
    "bucket_name": "",
    "endpoint": ""
}

将之前得到的信息填入对应的键值对中即OK

api_key为chatGPT的API密钥,目前功能还不完整因此不要填

shell\#

为程序添加了命令行访问的方法,实现了在任何目录下使用该命令

shell脚本的文件名:bilidl,可以没有.sh后缀

#!/bin/bash

if [ "$#" -eq 1 ]; then
    python /path/to/main.py "$1"
elif [ "$#" -eq 2 ] && [ "$2" = "p_num" ]; then
    python /path/to/main.py "$1" p_num
else
    echo "Usage: bilidl bvid [p_num]"
    exit 1
fi

你需要将main.py文件的绝对地址 /path/to/main.py改为在你的计算机中的绝对地址

给予执行权限:

chmod +x bilidl

移动到系统的PATH(添加到环境变量)中:

sudo mv bilidl /usr/local/bin

在执行时使用如下命令:

bilidl <bvid> (p_num)

p_num是可有可无的,无参数时默认为0

试例\#

Screenshot 2023-11-29 at 21.45.05

Screenshot 2023-12-11 at 19.56.05

Screenshot 2023-12-11 at 20.26.47

Screenshot 2023-12-11 at 20.27.14

References\#

  • https://developers.notion.com/reference/intro

  • https://github.com/DavinciEvans/chatGPT-Summary-Bilibili-To-Notion

  • https://zhuanlan.zhihu.com/p/610250035