mirror of
https://github.com/Geniusay/ChopperBot.git
synced 2026-06-21 20:52:48 +08:00
B站视频发布0.9
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
package org.example.video;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPut;
|
||||
import org.apache.http.entity.ByteArrayEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.aspectj.weaver.ast.ITestVisitor;
|
||||
import org.example.utils.HttpClientUtil;
|
||||
import org.openqa.selenium.devtools.v113.network.model.TrustTokenOperationDone;
|
||||
|
||||
import java.io.*;
|
||||
import java.time.LocalTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author dhx
|
||||
* @date 2023/9/9 0:47
|
||||
*/
|
||||
public class BilibiliVideoTest {
|
||||
// 视频路径
|
||||
public static String inputVideoPath = "";
|
||||
|
||||
// 视频分段暂存路径
|
||||
public static String outputDirectory = "";
|
||||
|
||||
// B站Cookie
|
||||
public static String Cookie = "";
|
||||
public static void main(String[] args) {
|
||||
String jctPart = Cookie.substring(Cookie.indexOf("bili_jct"));
|
||||
String csrf;
|
||||
try{
|
||||
csrf = jctPart.substring(jctPart.indexOf("=")+1,jctPart.indexOf(";"));
|
||||
System.out.println(csrf);
|
||||
}catch (Exception e){
|
||||
System.out.println("Cookie错误");
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
Map<String, String> header = new HashMap<>();
|
||||
int filesize = 0;
|
||||
FileInputStream fileInputStream1 = null;
|
||||
try {
|
||||
File file = new File(inputVideoPath);
|
||||
if (file.exists() && file.isFile()) {
|
||||
fileInputStream1 = new FileInputStream(file);
|
||||
filesize = fileInputStream1.available();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
header.put("Cookie", Cookie);
|
||||
header.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69");
|
||||
header.put("Referer", "https://member.bilibili.com/platform/upload/video/frame?spm_id_from=333.1007.top_bar.upload");
|
||||
String res = HttpClientUtil.get("https://member.bilibili.com/preupload?probe_version=20221109&upcdn=bda2&zone=cs&name=test.mp4&r=upos&profile=ugcfx%2Fbup&ssl=0&version=2.14.0.0&build=2140000&size=" + filesize + "&webVersion=2.14.0"
|
||||
, header);
|
||||
JSONObject mp4Obj = JSONObject.parseObject(res);
|
||||
String mp4_upos_uri = mp4Obj.getString("upos_uri");
|
||||
Long biz_id = mp4Obj.getLong("biz_id");
|
||||
String endpoint = mp4Obj.getString("endpoint");
|
||||
String put_query = mp4Obj.getString("put_query");
|
||||
Long chunk_size = mp4Obj.getLong("chunk_size");
|
||||
String auth = mp4Obj.getString("auth");
|
||||
System.out.println(mp4_upos_uri);
|
||||
String res2 = HttpClientUtil.get("https://member.bilibili.com/preupload?name=file_meta.txt&size=2000&r=upos&profile=fxmeta%2Fbup&ssl=0&version=2.14.0.0&build=2140000&webVersion=2.14.0"
|
||||
, header);
|
||||
JSONObject txtObj = JSONObject.parseObject(res2);
|
||||
String meta_upos_uri = txtObj.getString("upos_uri");
|
||||
System.out.println(meta_upos_uri);
|
||||
String preUploadUrl = String.format("https:%s%s?uploads&output=json%s&filesize=%s&partsize=%s&meta_upos_uri=%s&biz_id=%s", endpoint, mp4_upos_uri.substring(mp4_upos_uri.indexOf('/') + 1), put_query.substring(put_query.indexOf('&')), String.valueOf(filesize), chunk_size, meta_upos_uri, biz_id);
|
||||
System.out.println(preUploadUrl);
|
||||
Map<String, String> header2 = new HashMap<>();
|
||||
header2.put("X-Upos-Auth", auth);
|
||||
String res3 = HttpClientUtil.post(preUploadUrl, "{}", header2);
|
||||
System.out.println(res3);
|
||||
JSONObject uploadObj = JSONObject.parseObject(res3);
|
||||
String upload_id = uploadObj.getString("upload_id");
|
||||
|
||||
|
||||
// 分割大小,这里设置为10MB
|
||||
|
||||
int chunkNumber = 1;
|
||||
|
||||
try {
|
||||
File inputFile = new File(inputVideoPath);
|
||||
FileInputStream fileInputStream = new FileInputStream(inputFile);
|
||||
byte[] buffer = new byte[Math.toIntExact(chunk_size)];
|
||||
|
||||
int bytesRead;
|
||||
|
||||
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
|
||||
String outputFilePath = outputDirectory + "chunk_" + chunkNumber + ".bin";
|
||||
File outputFile = new File(outputFilePath);
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
|
||||
fileOutputStream.write(buffer, 0, bytesRead);
|
||||
fileOutputStream.close();
|
||||
|
||||
chunkNumber++;
|
||||
}
|
||||
chunkNumber--;
|
||||
|
||||
fileInputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
for (int i = 1; i <= chunkNumber; i++) {
|
||||
long end = i == chunkNumber ? filesize : i * chunk_size;
|
||||
long start = (i-1)*chunk_size;
|
||||
File file = new File(outputDirectory + "chunk_" + i +".bin");
|
||||
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||
HttpPut httpPut = new HttpPut(String.format("https:%s%s?partNumber=%s&uploadId=%s&chunk=%s&chunks=%s&size=%s&start=%s&end=%s&total=%s",
|
||||
endpoint,mp4_upos_uri.substring(mp4_upos_uri.indexOf('/') + 1),i,upload_id,i-1,chunkNumber, end - start,start, end,filesize)); // 替换为实际的目标URL
|
||||
|
||||
byte[] binaryData = new byte[(int) file.length()];
|
||||
|
||||
FileInputStream fileInputStream = new FileInputStream(file);
|
||||
fileInputStream.read(binaryData);
|
||||
fileInputStream.close();
|
||||
|
||||
ByteArrayEntity entity = new ByteArrayEntity(binaryData);
|
||||
httpPut.setEntity(entity);
|
||||
httpPut.setHeader("Content-Type", "application/octet-stream");
|
||||
httpPut.setHeader("X-Upos-Auth",auth);
|
||||
|
||||
CloseableHttpResponse response = httpClient.execute(httpPut);
|
||||
int statusCode = response.getStatusLine().getStatusCode();
|
||||
String responseBody = EntityUtils.toString(response.getEntity());
|
||||
if(statusCode==200){
|
||||
System.out.println("上传中:"+i*100/chunkNumber+"%");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
JSONObject body = new JSONObject();
|
||||
JSONArray parts = new JSONArray();
|
||||
for(int i= 1;i<=chunkNumber;i++){
|
||||
JSONObject item = new JSONObject();
|
||||
item.put("partNumber",i);
|
||||
item.put("eTag","etag");
|
||||
parts.add(item);
|
||||
}
|
||||
body.put("parts",parts);
|
||||
System.out.println(body.toString());
|
||||
String res4 = HttpClientUtil.post(
|
||||
String.format(
|
||||
"https:%s%s?output=json&name=test.mp4%s&uploadId=%s&biz_id=%s",
|
||||
endpoint,mp4_upos_uri.substring(mp4_upos_uri.indexOf('/') + 1), put_query.substring(put_query.indexOf('&')),upload_id,biz_id
|
||||
),body.toString(),header2
|
||||
);
|
||||
System.out.println(res4);
|
||||
JSONObject body1 = new JSONObject();
|
||||
JSONObject subtitle = new JSONObject();
|
||||
JSONArray videos = new JSONArray();
|
||||
subtitle.put("open",0);
|
||||
subtitle.put("lan","");
|
||||
JSONObject video = new JSONObject();
|
||||
video.put("filename",mp4_upos_uri.substring(mp4_upos_uri.lastIndexOf('/')+1,mp4_upos_uri.indexOf('.')));
|
||||
video.put("title","test");
|
||||
video.put("desc","");
|
||||
video.put("cid",biz_id);
|
||||
videos.add(video);
|
||||
body1.put("act_reserve_create",0);
|
||||
body1.put("copyright",1);
|
||||
body1.put("cover","https://i0.hdslb.com/bfs/archive/2e8c380c85c6970712ea8ede8b26cdc23f0a5b91.jpg");
|
||||
//TODO 封面上传
|
||||
body1.put("csrf",csrf);
|
||||
body1.put("desc","");
|
||||
body1.put("desc_format_id",0);
|
||||
body1.put("dolby",0);
|
||||
body1.put("dynamic","");
|
||||
body1.put("interactive",0);
|
||||
body1.put("lossless_music",0);
|
||||
body1.put("no_disturbance",0);
|
||||
body1.put("no_reprint",1);
|
||||
body1.put("recreate",-1);
|
||||
body1.put("tag","助眠,音乐");
|
||||
body1.put("tid",130);
|
||||
body1.put("title","test");
|
||||
body1.put("up_close_danmu",false);
|
||||
body1.put("up_close_reply",false);
|
||||
body1.put("up_selection_reply",false);
|
||||
body1.put("web_os",1);
|
||||
body1.put("subtitle",subtitle);
|
||||
body1.put("videos",videos);
|
||||
System.out.println(body1);
|
||||
String res5 = HttpClientUtil.post(String.format("https://member.bilibili.com/x/vu/web/add/v3?t=%s&csrf=%s", LocalTime.now(),csrf),body1.toString(),header);
|
||||
System.out.println(res5);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user