java開發抖音短視頻無水印下載工具

思路分析

首先在抖音APP段選擇你喜歡的視頻進行分享,一般分享鏈接都是這樣的:“http://v.douyin.com/111113/”,這並不是真的下載地址,在瀏覽器中輸入上述地址,發現重定向到一個新的地址,也就是帶有水印的播放地址
java開發抖音短視頻無水印下載工具
在302相應頭中location,這就是視頻重定向地址,在該地址請求中返回的js代碼中發現以下地址就是請求帶有水印的播放地址。
java開發抖音短視頻無水印下載工具
只需要把地址中palywm中的wm刪掉就是視頻無水印流地址。



代碼實現

1、利用Jsoup抓取抖音分享鏈接,在重定向返回的網頁中匹配水印流播放地址,然後把palywm中的wm刪掉就是視頻無水印流地址

//1.利用Jsoup抓取抖音鏈接
        String htmls = Jsoup.connect(url).ignoreContentType(true).execute().body(); //抓取抖音網頁
        //System.out.println(htmls); //做測試時使用
        //2.利用正則匹配可以抖音下載鏈接
        //playAddr: "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200ffc0000bfil6o4mavffbmroeo80&line=0",
        //具體匹配內容格式:「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");
        }

2、替換後,下載無水印流視頻,需要封裝請求頭。

Map<String, String> headers = new HashMap<>();
        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();       
        //7.封裝一個保存文件的路徑對象
        File fileSavePath = new File("video/"+ Math.random() * 100+".mp4");
        //注:如果保存文件夾不存在,那麼則創建該文件夾
        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(); //關閉輸入流

無水印小程序: 微信公衆號:

java開發抖音短視頻無水印下載工具 java開發抖音短視頻無水印下載工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章