吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6772|回复: 5
收起左侧

[Java 转载] 抖音获取无水印视频

[复制链接]
lovelyhedong 发表于 2019-12-2 17:00
本帖最后由 lovelyhedong 于 2019-12-6 17:08 编辑

抖音去水印JAVA-lovelyhedong(严禁用于任何商业用途)
第一篇帖子!求申精,后续无水印继续奉上

description:其实原理就是爬虫,爬取想要的数据,然后处理,里面有用到逆向,但是这里具体过程不说,自行某度.
注意:必须要有jsoup的依赖和gson的依赖和hutool的依赖(自行mvn查找)
废话不多说,直接上代码.以下代码直接Eclipse--Debug
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.protocol.HttpClientContext;
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.HttpContext;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    static final String DYAPI = "https://aweme.snssdk.com/web/api/v2/aweme/iteminfo/?item_ids=ITEM_IDS&dytk=DYTK";

    /**
     * tips:空串判断
     *
     * @Param str
     * @return
     */
    public static boolean isEmpty(Object str) {
        return str == null || "".equals(str);
    }

    /**
     * tips:是否有中文字符
     *
     * @param str
     * @return
     */
    public static boolean isContainChinese(String str) {
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }

    /**
     * tips:处理文字
     *
     * @param var
     * @return
     */
    public static final String urlProcess(String var) {
        if (var.contains("douyin") || var.contains("iesdouyin")) {
            if (!isContainChinese(var)) return var;
            int start = var.indexOf("http");
            int end = var.lastIndexOf("/");
            var = var.substring(start, end);
            return var;
        } else return "";
    }

    public static String getURI(String url) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpContext httpContext = new BasicHttpContext();
        HttpClientContext clientContext = HttpClientContext.adapt(httpContext);
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader("user-agent", "Mozilla/5.0 (Linux; U; Android 5.0; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");
        try {
            httpClient.execute(httpGet, httpContext);
            return clientContext.getTargetHost() + ((HttpUriRequest) clientContext.getRequest()).getURI().toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static String dyDecode(String var) {
        Document doc = null;
        try {
            doc = Jsoup.connect(var).cookie("cookie", "tt_webid=6711334817457341965; _ga=GA1.2.611157811.1562604418; _gid=GA1.2.1578330356.1562604418; _ba=BA0.2-20190709-51")
                    .header("user-agent", "Mozilla/5.0 (Linux; U; Android 5.0; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1")
                    .timeout(12138).get();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 解析网页标签
        Elements elem = doc.getElementsByTag("script");
        String url1 = elem.toString();
        //正则
        String aweme_id = "itemId: \"([0-9]+)\"";
        String dytk = "dytk: \"(.*)\"";
        Pattern r = Pattern.compile(aweme_id);
        Matcher m = r.matcher(url1);
        while (m.find()) {
            aweme_id = m.group().replaceAll("itemId: ", "").replaceAll("\"", "");
        }
        Pattern r1 = Pattern.compile(dytk);
        Matcher m1 = r1.matcher(url1);
        while (m1.find()) {
            dytk = m1.group().replaceAll("dytk: ", "").replaceAll("\"", "");
        }
        try {
            String result2 = HttpRequest.get(DYAPI.replaceAll("ITEM_IDS", aweme_id).replaceAll("DYTK", dytk))
                    .header(Header.USER_AGENT, "Mozilla/5.0 (Linux; U; Android 5.0; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1")
                    .timeout(12138)
                    .execute().body();
            JsonParser jsonParser = new JsonParser();
            JsonObject jsonObject = jsonParser.parse(result2).getAsJsonObject();
            return getURI(jsonObject.get("item_list").getAsJsonArray().get(0).getAsJsonObject().get("video").getAsJsonObject().get("play_addr").getAsJsonObject().get("url_list").getAsJsonArray().get(1).getAsString());
        } catch (Exception e) {
            return "";
        }
    }

    public static void main(String[] args) {
        while (true) {
            System.out.println("请输入需要解析的视频:");
            Scanner sc = new Scanner(System.in);
            String next = sc.nextLine();
            System.out.println(next);
            if (isEmpty(next)) {
                System.out.println("输入有误请重新输入");
            } else {
                try {
                    String urlProcess = urlProcess(next);
                    String text = dyDecode(urlProcess);
                    System.out.println(isEmpty(text) ? "解析失败" : "解析地址为:" + text);
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("报错信息为:" + e.getMessage());
                }
            }
        }
    }
}
thanks for you watching!program change the world!

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
wyuyu + 1 + 1 我很赞同!
zhangchang + 1 我很赞同!

查看全部评分

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

mosou 发表于 2019-12-2 20:32
java是不太懂  但是逻辑还是看的明白
wgd2wgd 发表于 2019-12-2 20:47
 楼主| lovelyhedong 发表于 2019-12-6 13:41
wyuyu 发表于 2020-2-27 01:02
lovelyhedong 发表于 2019-12-6 13:41
免费评分上1w出其他小视频的解析方式

能分享一下吗?大神
双重人格 发表于 2020-9-3 17:17
不好使,不好使,不好使
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-30 03:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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