|
|

分享源码
| 界面截图: |
- |
| 是否带模块: |
纯源码 |
| 备注说明: |
- |
本帖最后由 从不打扰 于 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
|
|