Android初学 抖音短视频无水印下载APP的实现

Posted 蜉蝣Sakura

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android初学 抖音短视频无水印下载APP的实现相关的知识,希望对你有一定的参考价值。

实现效果:

  1. 在抖音复制分享链接
  2. 粘贴分享链接到App, 点击解析
  3. 点击 去下载 进入浏览器下载

获取无水印视频链接

首先我们使用浏览器打开分享的链接

8.97 teO:/ 一起玩水吧 在这炽热的夏天%%蓝色治愈系 %%夏天 %%游泳 https://v.douyin.com/Y5SpHKD/ 复制此链接,打开Dou音搜索,直接观看视频!

然后打开控制台找到对应的视频, 右键检查可以找到视频的链接
https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000ca08sgbc77udtm7m06p0

然后在浏览器中打开此链接发现是没有水印的视频, 稍后下载的视频使用的是此链接.

通过测试其他分享的视频发现不同视频对应的video_id不同, 于是需要找到获取video_id的请求.
https://www.douyin.com/aweme/v1/play/?video_id=xxx
通过控制台将设备改成移动端设备, 点击分享的链接https://v.douyin.com/Y5SpHKD/, 这时有一条请求进入我们的视线:
https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=7097830584419962125

该请求的响应有我们需要的video_id
该请求有一个参数item_ids, 此参数正是点击分享链接后重定向链接的一部分

因此我们只需要解析该链接就可以拿到item_ids

至此, 就得到了下载无水印视频的全过程。

  1. 根据https://v.douyin.com/Y5SpHKD/的重定向地址https://www.iesdouyin.com/share/video/7097830584419962125获取item_ids=7097830584419962125
  2. 根据https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=7097830584419962125的响应拿到vid
  3. 根据www.douyin.com/aweme/v1/play/?video_id=v0200fg10000ca08sgbc77udtm7m06p0下载视频

实现

model层

通过传入的分享链接, 获取无水印视频链接

public class DouyinDownloadModel 
    private final OkHttpClient mOkHttpClient = new OkHttpClient();

    public void download(InputBean inputBean, DownloadListener downloadListener) 
        Request.Builder builder = new Request.Builder().get().url(inputBean.getShareUrl());
        requestInit(builder);
        Request request = builder.build();
        mOkHttpClient.newBuilder()
                .followRedirects(false).build().newCall(request).enqueue(new Callback() 
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) 
                downloadListener.fail();
            

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) 
                if (response.code() == 302) 
                    String location = response.header("location");
                    if (location != null) 
                        System.out.println(location);
                        String itemIds = parseItemIds(location);
                        if (!TextUtils.isEmpty(itemIds)) 
                            getVidByItemIds(itemIds, new GetVidRequestListener() 
                                @Override
                                public void success(JsonRootBean bean) 
                                    Item_list item_list = bean.getItem_list().get(0);
                                    String vid = item_list.getVideo().getVid();
                                    String url = "https://www.douyin.com/aweme/v1/play/?video_id="
                                            + vid;
                                    DownLoadResult downLoadResult = new DownLoadResult();
                                    downLoadResult.setVideoUrl(url)
                                            .setNickName(item_list.getAuthor().getNickname())
                                            .setVideoDesc(item_list.getDesc());
                                    downloadListener.success(downLoadResult);
                                

                                @Override
                                public void fail() 
                                    downloadListener.fail();
                                
                            );
                         else 
                            downloadListener.fail();
                        
                    
                
            
        );
    

    public void getVidByItemIds(String itemIds, GetVidRequestListener getVidRequestListener) 
        String url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + itemIds;
        System.out.println(url);
        Request.Builder builder = new Request.Builder().get().url(url);
        requestInit(builder);
        Request request = builder.build();
        mOkHttpClient.newCall(request).enqueue(new Callback() 
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) 
                getVidRequestListener.fail();
            

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response)
                    throws IOException 
                if (response.code() == 200) 
                    response.body();
                    String jsonString = response.body().string();
                    Gson gson = new Gson();
                    System.out.println(jsonString);
                    JsonRootBean jsonRootBean = gson.fromJson(jsonString, JsonRootBean.class);
                    System.out.println(jsonRootBean.getItem_list().get(0).getVideo().getVid());
                    getVidRequestListener.success(jsonRootBean);
                
            
        );
    

    public interface DownloadListener 
        void success(DownLoadResult downLoadResult);

        void fail();

        void onProgress(int progress);
    

    interface GetVidRequestListener 

        void success(JsonRootBean bean);

        void fail();
    

    public void requestInit(Request.Builder builder) 
        builder.addHeader("user-agent",
                "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 "
                        + "(Khtml, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/101.0.4951.41");
    

    public String parseItemIds(String text) 
        String regex = "\\\\d19";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(text);
        if (m.find()) 
            return m.group();
        
        return null;
    

Presenter层

View层

源代码 + Apk

参考

  1. 重定向的链接在谷歌F12中看不到
  2. 认识Android中的MVP设计模式

怎么提取抖音上的视频?

参考技术A 1.点击分享图标。进入到抖音视频页面,点击分享图标。
2.点击复制链接。在页面的下端点击复制链接。
3.长按粘贴。在位置处长按,点击粘贴,即可提取出抖音的视频。你只需要把抖音链接复制然后打开抖音,会自动跳出来的哦。下面是提取视频不在,你也可以参考一下
第一步:首先打开抖音短视频APP,找到需要保存的视频,点击视频上的“分享”按钮。
第二步:弹出新的页面后,点击“复制链接”功能,复制需要提取的视频链接。复制完成后,关闭抖音。
第三步:打开“无痕去水印”APP,点击首页中的“无水印提取”视频功能,跳转至视频提取页面。
第四步:进入视频提取页面后,将视频链接粘贴至文本框中,点击“提取视频”功能。
第五步:视频提取完成后自动跳转预览页面,点击“去水印”、“加水印”可进行相应操作,点击“保存到相册”将制作完成的视频保存至手机相册。
    官方服务
      官方网站官方网站

以上是关于Android初学 抖音短视频无水印下载APP的实现的主要内容,如果未能解决你的问题,请参考以下文章

Python 网络爬虫实战:抖音短视频去水印爬虫详解

短视频批量解析下载工具,批量下载抖音短视频,短视频去水印工具,去水印神器吧

抖音下载的视频怎么去水印

抖音特效插件怎么提取

python爬取抖音短视频

WordPress仿抖音短视频主题插件