From cf62736e6e633aee8e919baf4a358dc2547497e1 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 28 Dec 2022 12:55:36 +0800 Subject: [PATCH] New live format --- settings.gradle | 1 + tools/.gitignore | 1 + tools/build.gradle | 13 +++ tools/src/main/java/com/fongmi/tools/Run.java | 59 +++++++++++++ .../src/main/java/com/fongmi/tools/Util.java | 22 +++++ .../java/com/fongmi/tools/bean/Channel.java | 85 +++++++++++++++++++ .../java/com/fongmi/tools/bean/Group.java | 65 ++++++++++++++ 7 files changed, 246 insertions(+) create mode 100644 tools/.gitignore create mode 100644 tools/build.gradle create mode 100644 tools/src/main/java/com/fongmi/tools/Run.java create mode 100644 tools/src/main/java/com/fongmi/tools/Util.java create mode 100644 tools/src/main/java/com/fongmi/tools/bean/Channel.java create mode 100644 tools/src/main/java/com/fongmi/tools/bean/Group.java diff --git a/settings.gradle b/settings.gradle index bf6a3d7c..70a86c32 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,3 +15,4 @@ dependencyResolutionManagement { } rootProject.name = "CatVodSpider" include ':app' +include ':tools' diff --git a/tools/.gitignore b/tools/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/tools/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/tools/build.gradle b/tools/build.gradle new file mode 100644 index 00000000..c3e89333 --- /dev/null +++ b/tools/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java-library' +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation 'com.squareup.okhttp3:okhttp:3.12.13' + implementation 'com.google.code.gson:gson:2.8.6' +} \ No newline at end of file diff --git a/tools/src/main/java/com/fongmi/tools/Run.java b/tools/src/main/java/com/fongmi/tools/Run.java new file mode 100644 index 00000000..2b472b30 --- /dev/null +++ b/tools/src/main/java/com/fongmi/tools/Run.java @@ -0,0 +1,59 @@ +package com.fongmi.tools; + +import com.fongmi.tools.bean.Channel; +import com.fongmi.tools.bean.Group; +import com.google.gson.Gson; + +import java.io.File; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +public class Run { + + private final List items = new ArrayList<>(); + private final Gson gson = new Gson().newBuilder().disableHtmlEscaping().setPrettyPrinting().create(); + + public static void main(String[] args) { + new Run().start(); + } + + private void start() { + parse(Util.getFile(getClass(), "live.txt")); + System.out.println(gson.toJson(items)); + writeFile(); + } + + private void parse(String text) { + for (String line : text.split("\n")) { + String[] split = line.split(","); + if (split.length < 2) continue; + if (line.contains("#genre#")) items.add(Group.create(split[0])); + if (!line.contains("://")) continue; + Group group = items.get(items.size() - 1); + String number = split[0]; + String epg = split[1]; + String logo = split[2]; + String name = split[3]; + String url = split[4]; + group.find(Channel.create().number(number).epg(epg).logo(logo).name(name).ua(getUa(url))).addUrls(url.split("#")); + } + } + + private String getUa(String url) { + if (url.contains("play-live.ifeng")) return "okhttp/3.15"; + return null; + } + + private void writeFile() { + try { + File file = new File("json", "live.json"); + PrintWriter writer = new PrintWriter(file, String.valueOf(StandardCharsets.UTF_8)); + writer.println(gson.toJson(items)); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/tools/src/main/java/com/fongmi/tools/Util.java b/tools/src/main/java/com/fongmi/tools/Util.java new file mode 100644 index 00000000..606c9c2d --- /dev/null +++ b/tools/src/main/java/com/fongmi/tools/Util.java @@ -0,0 +1,22 @@ +package com.fongmi.tools; + +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.stream.Stream; + +public class Util { + + public static String getFile(Class clz, String fileName) { + try { + StringBuilder sb = new StringBuilder(); + URI uri = clz.getClassLoader().getResource(fileName).toURI(); + Stream stream = Files.lines(Paths.get(uri), StandardCharsets.UTF_8); + stream.forEach(s -> sb.append(s).append("\n")); + return sb.toString(); + } catch (Exception e) { + return ""; + } + } +} diff --git a/tools/src/main/java/com/fongmi/tools/bean/Channel.java b/tools/src/main/java/com/fongmi/tools/bean/Channel.java new file mode 100644 index 00000000..7c881f69 --- /dev/null +++ b/tools/src/main/java/com/fongmi/tools/bean/Channel.java @@ -0,0 +1,85 @@ +package com.fongmi.tools.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +public class Channel { + + @SerializedName("urls") + private List urls; + @SerializedName("number") + private String number; + @SerializedName("logo") + private String logo; + @SerializedName("epg") + private String epg; + @SerializedName("name") + private String name; + @SerializedName("ua") + private String ua; + + public static Channel create() { + return new Channel(); + } + + public List getUrls() { + return urls = urls == null ? new ArrayList<>() : urls; + } + + public String getNumber() { + return number == null ? "" : number; + } + + public String getName() { + return name == null ? "" : name; + } + + public Channel number(String number) { + this.number = number; + return this; + } + + public Channel logo(String logo) { + this.logo = logo; + return this; + } + + public Channel epg(String epg) { + this.epg = epg; + return this; + } + + public Channel name(String name) { + this.name = name; + return this; + } + + public Channel ua(String ua) { + this.ua = ua; + return this; + } + + public void addUrls(String... urls) { + getUrls().addAll(new ArrayList<>(Arrays.asList(urls))); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Channel)) return false; + Channel it = (Channel) obj; + return getName().equals(it.getName()) || getNumber().equals(it.getNumber()); + } + + public static class Sorter implements Comparator { + + @Override + public int compare(Channel c1, Channel c2) { + return Integer.compare(Integer.parseInt(c1.getNumber()), Integer.parseInt(c2.getNumber())); + } + } +} diff --git a/tools/src/main/java/com/fongmi/tools/bean/Group.java b/tools/src/main/java/com/fongmi/tools/bean/Group.java new file mode 100644 index 00000000..6f83b727 --- /dev/null +++ b/tools/src/main/java/com/fongmi/tools/bean/Group.java @@ -0,0 +1,65 @@ +package com.fongmi.tools.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; +import java.util.List; + +public class Group { + + @SerializedName("channel") + private List channel; + @SerializedName("logo") + private String logo; + @SerializedName("name") + private String name; + @SerializedName("pass") + private String pass; + + public static Group create(String name) { + return new Group(name); + } + + public Group(String name) { + this.name = name; + if (!name.contains("_")) return; + setName(name.split("_")[0]); + setPass(name.split("_")[1]); + } + + public List getChannel() { + return channel = channel == null ? new ArrayList<>() : channel; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public String getName() { + return name == null ? "" : name; + } + + public void setName(String name) { + this.name = name; + } + + public void setPass(String pass) { + this.pass = pass; + } + + public Channel find(Channel channel) { + int index = getChannel().indexOf(channel); + if (index != -1) return getChannel().get(index); + getChannel().add(channel); + return channel; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) return false; + if (this == obj) return true; + if (!(obj instanceof Group)) return false; + Group it = (Group) obj; + return getName().equals(it.getName()) && getChannel().size() == it.getChannel().size(); + } +}