返回 AiToEarn
index.ts
1 import { createReadStream } from 'fs';
2 import netRequest from '../../main/api';
3 import requestNet from '../requestNet';
4 import FormData from 'form-data';
5
6 class Bilibili {
7 /**
8 * 刷新token
9 * @param refreshToken
10 * @returns
11 */
12 async refreshAccessToken(refreshToken: string) {
13 const res = await new Promise(async (resolve, reject) => {
14 const res = await netRequest({
15 method: 'GET',
16 url: `plat/bilibili/refreshAccessToken/${refreshToken}`,
17 });
18 resolve(res.data);
19 });
20
21 return res;
22 }
23
24 /**
25 * 查询用户已授权权限列表
26 * @param accessToken
27 * @returns
28 */
29 async getAccountScopes(accessToken: string) {
30 const res = await new Promise(async (resolve, reject) => {
31 const res = await netRequest({
32 method: 'GET',
33 url: `plat/bilibili/account/scopes/${accessToken}`,
34 });
35 resolve(res.data);
36 });
37
38 return res;
39 }
40
41 /**
42 * 视频初始化
43 * @param accessToken
44 * @returns
45 */
46 async videoInit(accessToken: string) {
47 const res = await new Promise(async (resolve, reject) => {
48 const res = await netRequest({
49 method: 'POST',
50 url: `plat/bilibili/video/init/${accessToken}`,
51 });
52 resolve(res.data);
53 });
54
55 return res;
56 }
57
58 /**
59 * 文件分片上传
60 * @param uploadToken
61 * @param partNumber
62 * @returns
63 */
64 async partUpload(uploadToken: string, partNumber: number = 1) {
65 const res = await new Promise(async (resolve, reject) => {
66 const res = await requestNet({
67 method: 'POST',
68 url: `https://openupos.bilivideo.com/video/v2/part/upload?upload_token=${uploadToken}&partNumber=${partNumber}`,
69 headers: {
70 ' Content-Type': 'application/json',
71 },
72 });
73 resolve(res.data);
74 });
75
76 return res;
77 }
78
79 /**
80 * 文件分片合片
81 * @param uploadToken
82 * @returns
83 */
84 async videoComplete(uploadToken: string) {
85 const res = await new Promise(async (resolve, reject) => {
86 const res = await requestNet({
87 method: 'POST',
88 url: `https://member.bilibili.com/arcopen/fn/archive/video/complete?upload_token=${uploadToken}`,
89 headers: {
90 ' Content-Type': 'application/json',
91 },
92 });
93 resolve(res.data);
94 });
95
96 return res;
97 }
98
99 /**
100 * 封面上传
101 * @param accessToken
102 * @returns
103 */
104 async coverUpload(path: string, accessToken: string) {
105 const formData = new FormData();
106 const fileName = path.split('/').pop() || path.split('\\').pop() || 'file';
107 const fileStream = createReadStream(path);
108 formData.append('file', fileStream, fileName);
109
110 const res = await new Promise(async (resolve, reject) => {
111 const res = await netRequest({
112 method: 'POST',
113 url: `plat/bilibili/cover/upload/${accessToken}`,
114 });
115 resolve(res.data);
116 });
117
118 return res;
119 }
120
121 /**
122 * 视频稿件提交
123 * @param accessToken
124 * @param uploadToken
125 * @param data
126 * @returns
127 */
128 async archiveAddByUtoken(
129 accessToken: string,
130 uploadToken: string,
131 data: {
132 title: string; // 标题
133 cover?: string; // 封面url
134 tid: number; // 分区ID,由获取分区信息接口得到
135 noReprint?: 0 | 1; // 是否允许转载 0-允许,1-不允许。默认0
136 desc?: string; // 描述
137 tag: string[]; // 标签
138 copyright: 1 | 2; // 1-原创,2-转载(转载时source必填)
139 source?: string; // 如果copyright为转载,则此字段表示转载来源
140 },
141 ) {
142 const res = await new Promise(async (resolve, reject) => {
143 const res = await netRequest({
144 method: 'POST',
145 url: `plat/bilibili/archive/add-by-utoken?accessToken=${accessToken}&uploadToken=${uploadToken}`,
146 body: data,
147 });
148 resolve(res.data);
149 });
150
151 return res;
152 }
153
154 /**
155 * 分区查询
156 * @param accessToken
157 * @returns
158 */
159 async archiveTypeList(accessToken: string) {
160 const res = await new Promise(async (resolve, reject) => {
161 const res = await netRequest({
162 method: 'GET',
163 url: `plat/bilibili/archive/type/list/${accessToken}`,
164 });
165 resolve(res.data);
166 });
167
168 return res;
169 }
170 }
171 export const BilibiliPlat = new Bilibili();
172
172 lines TYPESCRIPT