package cc.mrbird.febs.mall.test; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class DYDelMark { public static void main(String[] args) { String content = "https://v.douyin.com/iLwxgYHE/"; JSONObject douYData = extractDouYinData(content); if (douYData != null) { System.out.println(douYData); } else { System.out.println(1); } } private static JSONObject extractDouYinData(String content) { String url = extractUrl(content); if (url != null) { if (content.contains("douyin.com")) { if (content.contains("live.douyin.com")) { System.out.println("直播"); return null; } else { String dyUrlOrId = processContent(content); String videoId = isNumeric(dyUrlOrId) ? dyUrlOrId : extractVideoId(dyUrlOrId); if (videoId!=null){ JSONArray dyData = serverGetDy(videoId); if (dyData != null && dyData.size() > 0) { JSONObject jsonData = dyData.getJSONObject(0); return buildDouYinData(jsonData); } } } } } return null; } private static JSONObject buildDouYinData(JSONObject jsonData) { JSONObject douYData = new JSONObject(); douYData.put("desc", jsonData.getString("desc")); JSONObject author = jsonData.getJSONObject("author"); douYData.put("nickname", author.getString("nickname")); JSONObject videoJson = jsonData.getJSONObject("video"); JSONObject coverJson = videoJson.getJSONObject("cover"); String coverUrl = coverJson.getJSONArray("url_list").getString(0); douYData.put("coverUrl", coverUrl); if (jsonData.getJSONArray("images") != null) { JSONArray images = jsonData.getJSONArray("images"); JSONArray imageArray = new JSONArray(); for (int i = 0; i < images.size(); i++) { JSONObject image = images.getJSONObject(i); JSONArray urlList = image.getJSONArray("url_list"); imageArray.add(urlList.get(0)); } douYData.put("type", 2); douYData.put("data", imageArray); } else { JSONObject playAddr = videoJson.getJSONObject("play_addr"); String uri = playAddr.getString("uri"); String videoUrl = "https://www.iesdouyin.com/aweme/v1/play/?video_id=" + uri + "&ratio=1080p&line=0"; douYData.put("type", 1); douYData.put("data", videoUrl); } return douYData; } public static String processContent(String content) { String douyinUrl = extractMatch(content, "v\\.douyin\\.com/[a-zA-Z0-9]+"); if (douyinUrl != null) { return "https://" + douyinUrl; } String digit = extractMatch(content, "\\d{19}"); return digit; } private static String extractMatch(String content, String regex) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(content); return matcher.find() ? matcher.group(0) : null; } public static boolean isNumeric(String str) { return str.matches("\\d+"); } private static String extractUrl(String text) { // 匹配网址的正则表达式 String regex = "https?://\\S+"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); // 查找匹配的链接 if (matcher.find()) { return matcher.group(); } return null; } public static String extractVideoId(String link) { String redirectLink = getRedirectUrl(link); Pattern patternVideo = Pattern.compile("/video/(\\d+)"); Pattern patternNote = Pattern.compile("/note/(\\d+)"); Matcher matcherVideo = patternVideo.matcher(redirectLink); Matcher matcherNote = patternNote.matcher(redirectLink); if (matcherVideo.find()) { return matcherVideo.group(1); } else if (matcherNote.find()) { return matcherNote.group(1); } else { return null; } } public static String getRedirectUrl(String url) { OkHttpClient client = new OkHttpClient(); try { Request request = new Request.Builder() .url(url) .get() .build(); Response response = client.newCall(request).execute(); return response.request().url().toString(); } catch (IOException e) { e.printStackTrace(); } return null; } private static JSONArray serverGetDy(String itemIds){ OkHttpClient client = new OkHttpClient().newBuilder().build(); Request Request = new Request.Builder() //不知道这个a_bogus是啥 可能是个算法 随便填写或空即可 .url("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?reflow_source=reflow_page&item_ids="+itemIds+"&a_bogus=sdfds") .addHeader("content-type", "application/x-www-form-urlencoded") .get() .build(); try { Response response = client.newCall(Request).execute(); JSONObject jsonObject= JSONObject.parseObject(response.body().string()); if (jsonObject.getInteger("status_code").equals(0)){ return jsonObject.getJSONArray("item_list"); } return null; } catch (IOException e) { e.printStackTrace(); return null; } } }