Java实现抖音短视频去水印窗口程序

   日期:2020-09-21     浏览:205    评论:0    
核心提示:说明本人也是初学Java不久的小白,可能会有很多地方不规范,本程序仅供参考,功能已经实现。抖音短视频去水印原理:https://blog.csdn.net/qq_29556507/article/details/106943093大家在看程序前先用电脑手动解析一下,就会知道大体流程以及我们大致需要怎么操作。在用电脑一步一步解析出真实无水印地址的时候,需要注意的是:找到以这个https://aweme.snssdk.com/aweme开头的网站后,别忘了把playwm改为play再去访问,去水印原理的

说明

本人也是初学Java不久的小白,可能会有很多地方不规范,本程序仅供参考,功能已经实现。

程序反映有点慢,按钮点一下就行哈

抖音短视频去水印原理:https://blog.csdn.net/qq_29556507/article/details/106943093

大家在看程序前先用电脑手动解析一下,就会知道大体流程以及我们大致需要怎么操作。

在用电脑一步一步解析出真实无水印地址的时候,需要注意的是:找到以这个https://aweme.snssdk.com/aweme开头的网站后,别忘了把playwm改为play再去访问,去水印原理的那篇文章有写的。

但是如果用电脑去访问修改完的这个网址电脑无法加载,手机可以跳转到真实的无水印地址,然后用谷歌浏览器打开下载无水印视频即可


因此我们的Java程序在访问的时候需要修改user-agent来实现模拟手机访问
程序中的:
public void doGet()

private void parseResult(InputStream inStream, String charSet)
这两个方法就是去改发送的数据实现模拟手机访问的方法。

程序演示


通过谷歌浏览器下载即可

代码区

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.net.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.*;
import java.io.InputStreamReader;

public class dy { 
    String str="";
    String num="";
    String wz="";
    String strend = "";
    public static void main(String [] args) { 
        dy dy = new dy();
        //创建窗口并进行布局
        JFrame f = new JFrame("02抖音去水印1.0");
        f.setLayout(null);
        f.setBounds(0,0,410,300);
        JLabel jl1 = new JLabel("地址:");
        jl1.setBounds(10,10,30,30);
        f.add(jl1);
        JTextField tf = new JTextField();
        tf.setBounds(45,12,280,25);
        f.add(tf);
        JLabel jl2 = new JLabel("打开:");
        jl2.setBounds(10,40,30,30);
        f.add(jl2);
        JTextArea ta = new JTextArea();
        ta.setLineWrap(true);
        ta.setBounds(45,40,280,200);
        ta.setEditable(false);
        JScrollPane jsp = new JScrollPane(ta);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        jsp.setBounds(45,40,280,200);
        f.add(jsp);
        JButton b = new JButton("OK");
        b.setHorizontalTextPosition(SwingConstants.CENTER);
        b.setVerticalTextPosition(SwingConstants.BOTTOM);
        b.setBounds(328,60,60,130);
        f.add(b);
        //设置按钮点击事件
        b.addActionListener(new ActionListener() { 
            @Override
            public void actionPerformed(ActionEvent e) { 
                //获得tf文本框输入的需要解析的地址
                String text="";
                text=tf.getText();
                dy.str=text;
                if (text.length()==0){ 
                    ta.setText("地址为空");
                    return;
                }else { 
                    try { 
                        //对地址进行解析
                        dy.getNum();
                        dy.getWZ();
                        dy.doGet();
                        ta.setText(dy.strend);
                        //将解析完的网址自动复制到粘贴板上
                        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
                        Transferable tText = new StringSelection(dy.strend);
                        clip.setContents(tText, null);
                        //在tf文本框中显示复制成功提示
                        tf.setText("解析成功已复制到粘贴板,请去浏览器打开下载");

                    } catch (IOException ioException) { 
                        ta.setText("地址错误");
                    }catch (StringIndexOutOfBoundsException e1){ 
                        ta.setText("地址错误");
                    }
                }

            }
        });
        //当tf文本框获得焦点时,自动清空内容
        tf.addFocusListener(new FocusListener() { 
            @Override
            //获得焦点
            public void focusGained(FocusEvent e) { 
                tf.setText("");
            }
            //失去焦点
            @Override
            public void focusLost(FocusEvent e) { 

            }
        });
        //使窗口能正常关闭
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //显示窗口
        f.setVisible(true);

    }
    //获得视频的item_ids,也就是视频网址上的那个19位的数字串
    public void getNum()throws IOException{ 
        URL url = null;
        url = new URL(str);
        HttpURLConnection conn= null;
        conn = (HttpURLConnection)url.openConnection();
        conn.setDoOutput(true);

        try { 
            conn.getResponseCode();
        } catch (IOException e) { 
            e.printStackTrace();
        }
        String realUrl=conn.getURL().toString();
        num=realUrl.substring(38,57);
    }
    //获得视频的地址https://aweme.snssdk.com/aweme开头的那个网址,并将网址中的playwm改为play
    public void getWZ()throws IOException{ 
        URL url= null;
        url = new URL("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids="+num);
        try { 
            BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            String str="";
            while((line=reader.readLine())!=null){ 
                str+=line;
            }
            reader.close();
            wz="https://aweme.snssdk.com/aweme/v1/play"+str.substring(str.indexOf("/?video"),str.indexOf("&line=0"))+"&line=0";
        } catch (IOException e) { 
            e.printStackTrace();
        }
    }
    //解决https://aweme.snssdk.com/aweme开头的网址只能手机端访问才能跳转的问题
    //并获得跳转后的真正的无水印地址
    public void doGet()throws IOException{ 


        URL obj = new URL(wz);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        con.setRequestMethod("GET");
        // 设置请求头
        con.setRequestProperty("user-agent", "Mozilla/5.0 ");

        int responseCode = con.getResponseCode();

        parseResult(con.getInputStream(), "GB2312");
    }
    private void parseResult(InputStream inStream, String charSet) { 
        try { 
            InputStreamReader stream = new InputStreamReader(inStream, charSet);
            BufferedReader br = new BufferedReader(stream);
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = br.readLine()) != null) { 
                response.append(inputLine);
            }
            String str = response.toString();
            strend=str.substring(str.indexOf("http"),str.indexOf("\">F"));
            System.out.println(strend);
        } catch (IOException e) { 
            e.printStackTrace();
        }
    }
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服