开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 972|回复: 25
收起左侧

[其它源码] Java版获取某音用户主页所有视频+播放地址纯源码

[复制链接]
发表于 2025-11-25 09:16:48 | 显示全部楼层 |阅读模式   辽宁省*
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 从不打扰 于 2025-11-25 09:24 编辑
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.imong.common.core.utils.OkHttpClientUtils;
import org.springframework.boot.test.context.SpringBootTest;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest(classes = ApplyTest.class)
public class ApplyTest {
    @org.junit.jupiter.api.Test
    public void test1() {
        // 主页地址
        String vod = "https://www.iesdouyin.com/share/user/MS4wLjABAAAA76XsSP7Tlihd8Ml7b1cqE0WgGmYrfsTBHjadUWkKYao";
        String maxcursor = "";
        StringBuilder builder = new StringBuilder();
        builder.append("device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=");
        // 检查是否包含 "?" 字符
        if (vod.indexOf("?") != -1) {
            // 如果包含 "?",则提取 "user/" "?from" 之间的文本
            builder.append(extractMiddleText(vod, "user/", "?from"));
        } else {
            // 如果不包含 "?",则提取 "user/" 之后的所有文本
            builder.append(extractRightText(vod, "user/"));
        }
        builder.append("&max_cursor=");
        builder.append(maxcursor);
        builder.append("&locate_item_id=7388761148507639094&locate_query=false&show_live_replay_strategy=1&need_time_list=0");
        builder.append("&time_list_query=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&update_version_code=170400&pc_client_type=1&version_code=290100&version_name=29.1.0&cookie_enabled=true&screen_width=1832&screen_height=314&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Android&os_version=6.0&cpu_core_num=12&device_memory=8&platform=Android&downlink=10&effective_type=4g&round_trip_time=150&webid=7347601222205687359&verifyFp=verify_lwllt9d5_131z6m2c_JOGv_4TDi_Aoje_kOMojbHCPw0e&fp=verify_lwllt9d5_131z6m2c_JOGv_4TDi_Aoje_kOMojbHCPw0e&msToken=MIOLSj1Hic1rlNKxvhty424gjUhagKo0ti6PK1s9uFfs0keS0miQ0metd3ZljkX0KjkQU_3nmJZm8tuYhMjIC1jntmfmuTRAfcZEbz1UzWZVqMDrHgg%3D");

        try {
            ScriptEngine engine = scriptEngine();
            String property = System.getProperty("user.dir");
            System.out.println("当前路径:" + property);
            // 执行JS文件
            engine.eval(new FileReader(property + "\\config\\sin.js"));
            String result = "";
            // 转换为可调用接口
            if (engine instanceof Invocable) {
                Invocable invocable = (Invocable) engine;
                // 调用geta_b函数
                result = invocable.invokeFunction("geta_b", builder.toString()).toString();
                System.out.println("函数执行结果: " + result);
            }
            // 构建请求URL
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("https://www.douyin.com/aweme/v1/web/aweme/post/?");
            stringBuilder.append(builder);
            stringBuilder.append("&a_bogus=");
            stringBuilder.append(result);
            stringBuilder.append("&verifyFp=verify_lwllt9d5_131z6m2c_JOGv_4TDi_Aoje_kOMojbHCPw0e&fp=verify_lwllt9d5_131z6m2c_JOGv_4TDi_Aoje_kOMojbHCPw0e");
            // 发送GET请求
            HashMap<String, String> hashMap = header();
            hashMap.put("Cookie", "");
            String string = OkHttpClientUtils.doGet(stringBuilder.toString(), null, hashMap);
            // 解析json
            JSONObject jsonObject = JSONObject.parseObject(string);
            // 获取最大游标
            maxcursor = jsonObject.getString("max_cursor");
            // 获取数据
            JSONArray awemeList = jsonObject.getJSONArray("aweme_list");
            for (int i = 0; i < awemeList.size(); i++) {
                Map<String, Object> hashMap1 = new HashMap<>();
                hashMap1.put("sec_item_id", awemeList.getJSONObject(i).getString("sec_item_id"));
                hashMap1.put("desc", awemeList.getJSONObject(i).getString("desc"));
                hashMap1.put("title", awemeList.getJSONObject(i).getString("item_title"));
                hashMap1.put("cover", awemeList.getJSONObject(i).getJSONObject("video").getJSONObject("cover").getJSONArray("url_list").getString(0));
                JSONArray jsonArray = awemeList.getJSONObject(i).getJSONObject("video").getJSONObject("play_addr").getJSONArray("url_list");
                for (int i1 = 0; i1 < jsonArray.size(); i1++) {
                    if (jsonArray.getString(i1).contains("v3-web")) {
                        hashMap1.put("url", jsonArray.getString(i1));

                    }
                }
                if (!hashMap1.containsKey("url")) {
                    hashMap1.put("url", jsonArray.getString(0));
                }
                hashMap1.put("xihuan", awemeList.getJSONObject(i).getJSONObject("statistics").getLong("digg_count"));
                hashMap1.put("pinglun", awemeList.getJSONObject(i).getJSONObject("statistics").getLong("comment_count"));
                hashMap1.put("shoucang", awemeList.getJSONObject(i).getJSONObject("statistics").getLong("collect_count"));
                hashMap1.put("fenxiang", awemeList.getJSONObject(i).getJSONObject("statistics").getLong("share_count"));
                System.out.println(JSON.toJSONString(hashMap1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 生成header
     * */
    private static HashMap<String, String> header() {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("Accept", "application/json, text/plain, */*");
        hashMap.put("Accept-Language", "zh-CN,zh;q=0.9");
        hashMap.put("Connection", "keep-alive");
        hashMap.put("Host", "www.douyin.com");
        hashMap.put("Referer", "https://www.douyin.com/user/MS4wLjABAAAAvUIxmVOEO2g5F32m12-cXKi836UCa5FmbpQ4GGJ3k49yiZxvv16cxXA7h56TJ2nL");
        hashMap.put("Sec-Fetch-Dest", "empty");
        hashMap.put("Sec-Fetch-Mode", "cors");
        hashMap.put("Sec-Fetch-Site", "same-origin");
        hashMap.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.238.400 QQBrowser/12.4.5623.400");
        hashMap.put("sec-ch-ua", "\"Chromium\";v=\"142\", \"Microsoft Edge\";v=\"142\", \"Not_A Brand\";v=\"99\"");
        hashMap.put("sec-ch-ua-mobile", "?0");
        hashMap.put("sec-ch-ua-platform", "\"Windows\"");
        return hashMap;
    }

    /**
     * 脚本引擎对象
     */
    public ScriptEngine scriptEngine() {
        // 创建脚本引擎管理器
        ScriptEngineManager manager = new ScriptEngineManager();
        // 创建脚本引擎
        ScriptEngine engine = manager.getEngineByName("javascript");

        // 提供基础的window对象
        try {
            engine.eval("var window = window || {};");
            engine.eval("var navigator = navigator || {};");
            engine.eval("var document = document || {};");
            engine.eval("var performance = performance || { now: function() { return new Date().getTime(); } };");
            engine.eval("var location = location || {};");
            engine.eval("var history = history || {};");
        }catch (ScriptException e){
            e.printStackTrace();
        }
        return engine;
    }

    /**
     * 提取两个字符串之间的文本
     * @param source 源字符串
     * @param start 起始字符串
     * @param end 结束字符串
     * @Return 中间文本
     */
    private static String extractMiddleText(String source, String start, String end) {
        int startIndex = source.indexOf(start);
        if (startIndex == -1) {
            return "";
        }
        startIndex += start.length();

        int endIndex = source.indexOf(end, startIndex);
        if (endIndex == -1) {
            return "";
        }

        return source.substring(startIndex, endIndex);
    }
    /**
     * 提取指定字符串之后的所有文本
     * @param source 源字符串
     * @param start 起始字符串
     * @return 起始字符串之后的文本
     */
    private static String extractRightText(String source, String start) {
        int startIndex = source.indexOf(start);
        if (startIndex == -1) {
            return "";
        }
        return source.substring(startIndex + start.length());
    }
}
sin文件地址:[color=rgba(6, 10, 38, 0.9)][backcolor=rgba(255, 255, 255, 0.5)]https://pan.quark.cn/s/c32732738a12


结帖率:0% (0/2)

签到天数: 3 天

发表于 昨天 17:53 | 显示全部楼层   广东省汕头市
下载学习下,谢谢分享,好不用一个一个下载了
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2025-12-10 15:30:08 | 显示全部楼层   广东省深圳市
Java版获取某音用户主页所有视频+播放地址纯源码
回复 支持 反对

使用道具 举报

发表于 2025-12-2 16:39:49 | 显示全部楼层   福建省福州市
Java版获取某音用户主页所有视频+播放地址纯源码
回复 支持 反对

使用道具 举报

发表于 2025-11-30 05:41:14 | 显示全部楼层   江苏省苏州市
谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享
回复 支持 反对

使用道具 举报

结帖率:25% (1/4)

签到天数: 4 天

发表于 2025-11-28 23:05:30 | 显示全部楼层   四川省泸州市
#在这里快速回复#Java版获取某音用户主页所有视频+播放地址纯源码
回复 支持 反对

使用道具 举报

发表于 2025-11-28 21:09:48 | 显示全部楼层   河北省*
感谢分享!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2025-11-28 16:38:01 | 显示全部楼层   新疆维吾尔自治区和田地区
感谢分享!!!!!!!!
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)
发表于 2025-11-28 13:10:03 | 显示全部楼层   内蒙古自治区乌兰察布市
感谢分享!!!!!!!!!
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2025-11-27 03:25:59 | 显示全部楼层   浙江省台州市
1111111111111111111111111111111111111111
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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