JAVA代码实现抖音转载视频无水印视频,亲测通过

mac2024-03-18  29

许多小伙伴想做抖音视频,无奈没有摄影器材,也没有取景材料,就想着去用别人人气视频来提高自己的粉丝量。可问题又来了,别人的视频通过分享,或者链接根本不是原创,上面还带着水印。视频一挂上去就被发现了,小则视频不通过,给出警告,大则封号,降低视频流量。 别着急,我在这里贴出两份代码,只需要你把分享链接拷贝过来,就能将想要的视频无水印的保存到本地。 package demo;

import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.ExecutionContext; import org.apache.http.protocol.HttpContext;

import java.io.*; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.util.Collections; import java.util.Date; import java.util.Map;

public class DY02 { public static void main(String[] args) { //输入分享链接 String url1 = “#在抖音,记录美好生活#在最好的年纪,做最疯狂的事 http://v.douyin.com/xB7gDq/ 复制此链接,打开【抖音短视频】,直接观看视频!”;

String s = parserUrl(url1); //获取到无水印下载地址 //System.out.println(doGet(s)); } public static String parserUrl(String url) { BufferedReader in = null; String playUrl = null; String brgUrl = null; Map<String, String> result = Collections.EMPTY_MAP; try { URL realUrl = new URL(url); URLConnection connection = realUrl.openConnection(); connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); connection.connect(); in = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = in.readLine()) != null) { sb.append(line); } //TODO 新添加 Long timetmp = new Date().getTime(); System.out.println("=====================>" + sb.toString()); //重新封装成一个无水印视频下载地址 String fileAddress = "D:/videos/" + timetmp + ".mp4"; //7.封装一个保存文件的路径对象 File fileSavePath = new File(fileAddress); //注:如果保存文件夹不存在,那么则创建该文件夹 File fileParent = fileSavePath.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } //8.新建一个输出流对象 OutputStream out = new BufferedOutputStream( new FileOutputStream(fileSavePath)); //9.遍历输出文件 int b; while ((b = in.read()) != -1) { out.write(b); } out.close();//关闭输出流 in.close(); //关闭输入流 //注:打印获取的链接 System.out.println("\n-----视频保存路径-----\n" + fileSavePath.getAbsolutePath()); playUrl = fileAddress; //TODO // playUrl = getPlayUrl(sb.toString()); } catch (Exception e) { } finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return playUrl; } public static String doGet(String url) { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefault(); String resultString = ""; CloseableHttpResponse response = null; try { // 创建uri URIBuilder builder = new URIBuilder(url); URI uri = builder.build(); // 创建http GET请求 HttpGet httpGet = new HttpGet(uri); // 設置httpGet的头部參數信息 此处必不可少,伪装成浏览器访问 httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); httpGet.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7"); httpGet.setHeader("Accept-Encoding", "gzip, deflate, sdch, br"); httpGet.setHeader("Accept-Language", "zh-cn,zh;q=0.8"); httpGet.setHeader("User-Agent", "Mozilla/5.0 (iPod; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25"); // 执行请求 HttpContext httpContext = new BasicHttpContext(); response = httpclient.execute(httpGet, httpContext); Object attribute = httpContext.getAttribute("http.request"); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { HttpHost targetHost = (HttpHost) httpContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST); // 获取实际的请求对象的URI,即重定向之后的地址 HttpEntity entity = response.getEntity(); HttpUriRequest realRequest = (HttpUriRequest) httpContext.getAttribute(ExecutionContext.HTTP_REQUEST); return (HttpHost) httpContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST) + ((HttpUriRequest) httpContext.getAttribute(ExecutionContext.HTTP_REQUEST)).getURI().toString(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; }

}

第二份代码: package demo;

import org.jsoup.Jsoup; import java.io.*; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class DY03 { public static void main(String[] args) throws Exception { //●抖音链接(使用手机分享功能,复制链接) String url = "http://v.douyin.com/2MKBC6/"; String url1 = "#在抖音,记录美好生活#在最好的年纪,做最疯狂的事 http://v.douyin.com/xB7gDq/ 复制此链接,打开【抖音短视频】,直接观看视频!"; //过滤链接,获取http连接地址 String finalUrl = decodeHttpUrl(url1); //1.利用Jsoup抓取抖音链接 //抓取抖音网页 String htmls = Jsoup.connect(finalUrl).ignoreContentType(true).execute().body(); //2.利用正则匹配可以抖音下载链接 //具体匹配内容格式:「https://aweme.snssdk.com/aweme/...line=0」 Pattern patternCompile = Pattern.compile("(?<=playAddr: \")https?://.+(?=\",)"); //利用Pattern.compile("正则条件").matcher("匹配的字符串对象")方法可以将需要匹配的字段进行匹配封装 返回一个封装了匹配的字符串Matcher对象 //3.匹配后封装成Matcher对象 Matcher m = patternCompile.matcher(htmls); //4.①利用Matcher中的group方法获取匹配的特定字符串 ②利用String的replace方法替换特定字符,得到抖音的去水印链接 String matchUrl = ""; while (m.find()) { matchUrl = m.group(0).replaceAll("playwm", "play"); } //5.将链接封装成流 //注:由于抖音对请求头有限制,只能设置一个伪装手机浏览器请求头才可实现去水印下载 Map<String, String> headers = new HashMap<String, String>(); headers.put("Connection", "keep-alive"); headers.put("Host", "aweme.snssdk.com"); headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1"); //6.利用Joup获取视频对象' BufferedInputStream in = Jsoup.connect(matchUrl).headers(headers).timeout(10000).ignoreContentType(true).execute().bodyStream(); Long timetmp = new Date().getTime(); String fileAddress = "D:/video/"+ timetmp + ".mp4"; //7.封装一个保存文件的路径对象 File fileSavePath = new File(fileAddress); //注:如果保存文件夹不存在,那么则创建该文件夹 File fileParent = fileSavePath.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } //8.新建一个输出流对象 OutputStream out = new BufferedOutputStream( new FileOutputStream(fileSavePath)); //9.遍历输出文件 int b; while ((b = in.read()) != -1) { out.write(b); } out.close();//关闭输出流 in.close(); //关闭输入流 //注:打印获取的链接 System.out.println("-----抖音去水印链接-----\n" + matchUrl); System.out.println("\n-----视频保存路径-----\n" + fileSavePath.getAbsolutePath()); } public static String decodeHttpUrl(String url) { int start = url.indexOf("http"); int end = url.lastIndexOf("/"); String decodeurl = url.substring(start, end); return decodeurl; } }

其实两份代码套路差不多,各位码农不惜勿怪!## 通过代码实现抖音无水印视频。你就是原创

最新回复(0)