吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5890|回复: 18
收起左侧

[Java 转载] 抖X短视频无水印视频解析下载网页版源码-JAVA版

  [复制链接]
eft123321 发表于 2020-7-13 17:27
本帖最后由 eft123321 于 2020-7-14 18:57 编辑

最近自己需要下载抖音无水印视频,在论坛找了个遍,基本上都是电脑版或者APP。
感觉并不是很方便,不像网页版的,不局限于设备,直接可以下载。
因为现在作者分享页那个接口找不到,所以没办法通过作者分享页下载,但是可以输入很多个作品分享页,打包下载。
如果谁有作者分享页的接口,可以获取到该作者的所有作品ID可以留言给我,我再升级哦。
QQ截图20200713172027.png
从输入框中找到所有的作品链接
[Java] 纯文本查看 复制代码
    public static List<String> getUrl(String data) {
        String regex = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
        //list存放正则匹配的结果
        List<String> list = new ArrayList<>();
        try {
            //编译正则字符串
            Pattern p = Pattern.compile(regex);
            //利用正则去匹配
            Matcher matcher = p.matcher(data);
            //如果找到了我们正则里要的东西
            while (matcher.find()) {
                //保存到list中
                list.add(matcher.group());
            }
        }catch (Exception e){
            return list;
        }
        return list;
    }

根据分享的作品短链接,获取第一次跳转后的长链接
[Java] 纯文本查看 复制代码
    public static List<String> getSecondUrl(List<String> urls){
        List<String> second_urls = new ArrayList<>();
        for(String url : urls){
            try {
                Connection.Response execute = Jsoup.connect(url).headers(headers).followRedirects(true).execute();
                second_urls.add(execute.url().toString());
            }catch (Exception e){
                continue;
            }
        }
        return second_urls;
    }

从长链接获取ID
[Java] 纯文本查看 复制代码
public static String getId(String url) {
        String regex = "[\\d]{19}";
        //编译正则字符串
        Pattern p = Pattern.compile(regex);
        //利用正则去匹配
        Matcher matcher = p.matcher(url);
        if (matcher.find()) {
            return matcher.group();
        }
        return null;
    }

获取到所有的API链接
[Java] 纯文本查看 复制代码
public static List<String> getApiUrl(List<String> second_urls){
        List<String> api_urls = new ArrayList<>();
        for(String second_url : second_urls){
            String id = getId(second_url);
            String new_url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + id +"&dytk=";
            api_urls.add(new_url);
        }
        return api_urls;
    }

获取所有作品的标题,用户昵称,无水印下载地址
[Java] 纯文本查看 复制代码
public static List<Map<String,String>> getListMap(List<String> api_urls){
        List<Map<String,String>> list_map = new ArrayList<>();
        for(String api_url : api_urls){
            Map<String,String> map = new HashMap<>();//存放下载信息
            try {
                String api_return_str = Jsoup.connect(api_url).headers(headers).ignoreContentType(true).followRedirects(true).get().text();//获取API返回值
                JSONObject api_return_json = JSONObject.parseObject(api_return_str);//接口放回字符串转JSON
                JSONArray item_list = api_return_json.getJSONArray("item_list");
                String nickname = item_list.getJSONObject(0).getJSONObject("author").getString("nickname");
                String share_title = item_list.getJSONObject(0).getJSONObject("share_info").getString("share_title");
                String shuiyin_url = item_list.getJSONObject(0).getJSONObject("video").getJSONObject("play_addr").getJSONArray("url_list").getString(0);
                String wu_shuiyin_url = shuiyin_url.replace("playwm","play");
                map.put("nickname",nickname);
                map.put("share_title",share_title);
                map.put("wu_shuiyin_url",wu_shuiyin_url);
                list_map.add(map);
            }catch (Exception e){
                e.printStackTrace();
                continue;
            }
        }
        return list_map;
    }

下载单个视频的接口
[Java] 纯文本查看 复制代码
    @RequestMapping("download")
    public void download(String id, HttpServletResponse resp){
        String download_url = DouyinUtils.getDownloadUrlById(id);
        try {
            File file = new File(rarDir + File.separator + id +".mp4");
            if(!file.exists()){//如果文件不存在,则生成
                Connection.Response response = Jsoup.connect(download_url).headers(headers).ignoreContentType(true)[color=#000][font=Consolas][size=9pt].maxBodySize([/size][/font][/color][color=rgb(0, 0, 255)][font=Consolas][size=9pt]1024[/size][/font][/color][color=#000][font=Consolas][size=9pt]*[/size][/font][/color][color=rgb(0, 0, 255)][font=Consolas][size=9pt]1024[/size][/font][/color][color=#000][font=Consolas][size=9pt]*[/size][/font][/color][color=rgb(0, 0, 255)][font=Consolas][size=9pt]1024[/size][/font][/color][color=#000][font=Consolas][size=9pt])[/size][/font][/color].execute();
                byte[] bytes = response.bodyAsBytes();
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(bytes);
                fos.close();
            }
            resp.setContentType("application/octet-stream");
            resp.setHeader("Content-Disposition","attachment;filename=" + id + ".mp4");
            resp.setContentLength((int) file.length());
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(file);
                byte[] buffer = new byte[128];
                int count = 0;
                while ((count = fis.read(buffer)) > 0) {
                    resp.getOutputStream().write(buffer, 0, count);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                resp.getOutputStream().flush();
                resp.getOutputStream().close();
                fis.close();
            }
        }catch (Exception e){

        }
    }


多个视频压缩未rar后的下载接口
[Java] 纯文本查看 复制代码
    @RequestMapping("batchdownload")
    public void batchdownload(String rarFileName,HttpServletResponse resp) throws Exception {
        File rarFile = new File(rarDir + File.separator + rarFileName);
        resp.setContentType("application/octet-stream");
        resp.setHeader("Content-Disposition","attachment;filename=" + rarFileName);
        resp.setContentLength((int) rarFile.length());
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(rarFile);
            byte[] buffer = new byte[128];
            int count = 0;
            while ((count = fis.read(buffer)) > 0) {
                resp.getOutputStream().write(buffer, 0, count);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            resp.getOutputStream().flush();
            resp.getOutputStream().close();
            fis.close();
        }
    }


源代码下载(20200704更新,针对不会Java的朋友,增加了打包后的jar文件和Java运行环境,直接点run.sh运行,浏览器访问http://127.0.0.1即可):
链接:https://pan.baidu.com/s/1fNtpjYVSgh79oAVf9UQDUA
提取码:o1h2

免费评分

参与人数 3吾爱币 +2 热心值 +2 收起 理由
hez + 1 已经处理,感谢您对吾爱破解论坛的支持!
媚眼的丹客 + 1 + 1 用心讨论,共获提升!
已逝他心 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| eft123321 发表于 2020-7-14 07:29

不是通过作者首页进去批量下载,是可以输入多个作品的分享链接,打包下载
麦迪就是帅 发表于 2020-7-13 17:28
Ldfd 发表于 2020-7-13 17:37
不问江湖 发表于 2020-7-13 19:46
网页版?首页在哪~~~
头像被屏蔽
javporn 发表于 2020-7-13 20:03
提示: 作者被禁止或删除 内容自动屏蔽
lilongjiang 发表于 2020-7-13 20:52
下载试试,感谢
MOEYU_VANILLA 发表于 2020-7-13 20:55
感谢分享
随缘钓鱼 发表于 2020-7-13 21:14
感谢分享
小六耳 发表于 2020-7-13 21:37
这个不错,感谢分享
半夏彼岸花绽放 发表于 2020-7-13 22:35
批量下载吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表