| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | //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; |
| | | // } |
| | | // } |
| | | //} |