diff --git a/settings.gradle b/settings.gradle index 70a86c3..bf6a3d7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,4 +15,3 @@ dependencyResolutionManagement { } rootProject.name = "CatVodSpider" include ':app' -include ':tools' diff --git a/tools/build.gradle b/tools/build.gradle index c3e8933..4b1ba1f 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -1,10 +1,18 @@ plugins { - id 'java-library' + id 'java' } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +repositories { + mavenCentral() +} + +compileJava { + options.encoding = 'UTF-8' } dependencies { diff --git a/tools/gradle/wrapper/gradle-wrapper.jar b/tools/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/tools/gradle/wrapper/gradle-wrapper.jar differ diff --git a/tools/gradle/wrapper/gradle-wrapper.properties b/tools/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..41dfb87 --- /dev/null +++ b/tools/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/tools/release/README.md b/tools/release/README.md new file mode 100644 index 0000000..23029ce --- /dev/null +++ b/tools/release/README.md @@ -0,0 +1,4 @@ +data.json 為對應表,可依據需求新增修改 epg、name、logo。 +1. 執行 run.bat +2. 輸入直播文本網址或檔名 +3. 自動產出 live.json \ No newline at end of file diff --git a/tools/release/run.bat b/tools/release/run.bat new file mode 100644 index 0000000..5a620a8 --- /dev/null +++ b/tools/release/run.bat @@ -0,0 +1 @@ +java -jar run.jar \ No newline at end of file diff --git a/tools/release/run.jar b/tools/release/run.jar new file mode 100644 index 0000000..d1b703a Binary files /dev/null and b/tools/release/run.jar differ diff --git a/tools/settings.gradle b/tools/settings.gradle new file mode 100644 index 0000000..767cd2b --- /dev/null +++ b/tools/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'tools' \ No newline at end of file diff --git a/tools/src/main/java/META-INF/MANIFEST.MF b/tools/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000..6813d2b --- /dev/null +++ b/tools/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: com.fongmi.tools.Run diff --git a/tools/src/main/java/com/fongmi/tools/Run.java b/tools/src/main/java/com/fongmi/tools/Run.java index 0416a61..f7eb2d8 100644 --- a/tools/src/main/java/com/fongmi/tools/Run.java +++ b/tools/src/main/java/com/fongmi/tools/Run.java @@ -14,96 +14,94 @@ import java.util.List; import java.util.Locale; import java.util.Scanner; -import okhttp3.OkHttpClient; -import okhttp3.Request; - public class Run { - private final List groups; - private final List data; - private final Gson gson; + private final List groups; + private final List data; + private final Gson gson; - public static void main(String[] args) throws IOException { - new Run().start(); - } + public static void main(String[] args) throws IOException { + if (args.length > 0) { + new Run().start(args[0]); + } else { + System.out.print("請輸入網址或檔名:"); + new Run().start(new Scanner(System.in).nextLine()); + } + } - public Run() { - groups = new ArrayList<>(); - data = Data.arrayFrom(Util.getFile(getClass(), "data.json")); - gson = new Gson().newBuilder().disableHtmlEscaping().setPrettyPrinting().create(); - } + public Run() { + groups = new ArrayList<>(); + data = Data.arrayFrom(Util.getFile("data.json")); + gson = new Gson().newBuilder().disableHtmlEscaping().setPrettyPrinting().create(); + } - private void start() throws IOException { - Scanner scanner = new Scanner(System.in); - System.out.print("請輸入網址或檔名:"); - String text = scanner.nextLine(); - if (text.startsWith("http")) parse(new OkHttpClient().newCall(new Request.Builder().url(text).build()).execute().body().string()); - else parse(Util.getFile(getClass(), text)); - //parseTxt(Util.getFile(getClass(), "live.txt")); - System.out.println(gson.toJson(groups)); - writeFile(); - } + private void start(String text) throws IOException { + if (text.startsWith("http")) parse(Util.call(text)); + else parse(Util.getFile(text)); + //parseTxt(Util.getFile(getClass(), "live.txt")); + 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#")) groups.add(Group.create(split[0])); - if (split[1].contains("://")) { - Group group = groups.get(groups.size() - 1); - String name = split[0]; - String url = split[1].trim(); - group.find(Channel.create().name(name).epg(name)).addUrls(url.split("#")); - } - } - int number = 0; - for (Group group : groups) { - for (Channel channel : group.getChannel()) { - channel.number(String.format(Locale.getDefault(), "%03d", ++number)); - combine(channel); - } - } - } + private void parse(String text) { + for (String line : text.split("\n")) { + String[] split = line.split(","); + if (split.length < 2) continue; + if (line.contains("#genre#")) groups.add(Group.create(split[0])); + if (split[1].contains("://")) { + Group group = groups.get(groups.size() - 1); + String name = split[0]; + String url = split[1].trim(); + group.find(Channel.create().name(name).epg(name)).addUrls(url.split("#")); + } + } + int number = 0; + for (Group group : groups) { + for (Channel channel : group.getChannel()) { + channel.number(String.format(Locale.getDefault(), "%03d", ++number)); + combine(channel); + } + } + } - private void parseTxt(String text) { - for (String line : text.split("\n")) { - String[] split = line.split(","); - if (split.length < 2) continue; - if (line.contains("#genre#")) groups.add(Group.create(split[0])); - if (!line.contains("://")) continue; - Group group = groups.get(groups.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 void parseTxt(String text) { + for (String line : text.split("\n")) { + String[] split = line.split(","); + if (split.length < 2) continue; + if (line.contains("#genre#")) groups.add(Group.create(split[0])); + if (!line.contains("://")) continue; + Group group = groups.get(groups.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 void combine(Channel channel) { - for (Data item : data) { - if (item.getName().contains(channel.getName())) { - channel.epg(item.getEpgid()); - channel.logo(item.getLogo()); - break; - } - } - } + private void combine(Channel channel) { + for (Data item : data) { + if (item.getName().contains(channel.getName())) { + channel.logo(item.getLogo()); + channel.epg(item.getEpg()); + break; + } + } + } - private String getUa(String url) { - if (url.contains("play-live.ifeng")) return "okhttp/3.15"; - return null; - } + 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(groups)); - writer.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } + private void writeFile() { + try { + File file = new File("live.json"); + PrintWriter writer = new PrintWriter(file, String.valueOf(StandardCharsets.UTF_8)); + writer.println(gson.toJson(groups)); + 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 index 606c9c2..350dcf0 100644 --- a/tools/src/main/java/com/fongmi/tools/Util.java +++ b/tools/src/main/java/com/fongmi/tools/Util.java @@ -1,22 +1,39 @@ package com.fongmi.tools; +import java.io.IOException; import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; +import okhttp3.OkHttpClient; +import okhttp3.Request; + 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 ""; - } - } + public static String call(String url) throws IOException { + return new OkHttpClient().newCall(new Request.Builder().url(url).build()).execute().body().string(); + } + + 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 ""; + } + } + + public static String getFile(String fileName) { + try { + return Files.readString(Path.of(fileName)); + } catch (Exception e) { + return ""; + } + } } diff --git a/tools/src/main/java/com/fongmi/tools/bean/Data.java b/tools/src/main/java/com/fongmi/tools/bean/Data.java index 77142ad..7838ab7 100644 --- a/tools/src/main/java/com/fongmi/tools/bean/Data.java +++ b/tools/src/main/java/com/fongmi/tools/bean/Data.java @@ -10,74 +10,28 @@ import java.util.List; public class Data { - @SerializedName("tvid") - private String tvid; - @SerializedName("epgid") - private String epgid; - @SerializedName("name") - private String name; - @SerializedName("status") - private String status; - @SerializedName("note") - private String note; - @SerializedName("logo") - private String logo; - - public static Data objectFrom(String str) { - return new Gson().fromJson(str, Data.class); - } - - public static List arrayFrom(String str) { - Type listType = new TypeToken>() { - }.getType(); - return new Gson().fromJson(str, listType); - } - - public String getTvid() { - return tvid; - } - - public void setTvid(String tvid) { - this.tvid = tvid; - } - - public String getEpgid() { - return epgid; - } - - public void setEpgid(String epgid) { - this.epgid = epgid; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - public String getLogo() { - return logo; - } - - public void setLogo(String logo) { - this.logo = logo; - } + @SerializedName("name") + private String name; + @SerializedName("epg") + private String epg; + + @SerializedName("logo") + private String logo; + + public static List arrayFrom(String str) { + Type listType = new TypeToken>() {}.getType(); + return new Gson().fromJson(str, listType); + } + + public String getName() { + return name; + } + + public String getEpg() { + return epg; + } + + public String getLogo() { + return logo; + } }