Update tools

pull/69/head
FongMi 3 years ago
parent cfa8d12e83
commit 0d61a541ee
  1. 1
      settings.gradle
  2. 14
      tools/build.gradle
  3. BIN
      tools/gradle/wrapper/gradle-wrapper.jar
  4. 5
      tools/gradle/wrapper/gradle-wrapper.properties
  5. 4
      tools/release/README.md
  6. 1
      tools/release/run.bat
  7. BIN
      tools/release/run.jar
  8. 1
      tools/settings.gradle
  9. 2
      tools/src/main/java/META-INF/MANIFEST.MF
  10. 162
      tools/src/main/java/com/fongmi/tools/Run.java
  11. 39
      tools/src/main/java/com/fongmi/tools/Util.java
  12. 94
      tools/src/main/java/com/fongmi/tools/bean/Data.java

@ -15,4 +15,3 @@ dependencyResolutionManagement {
}
rootProject.name = "CatVodSpider"
include ':app'
include ':tools'

@ -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 {

Binary file not shown.

@ -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

@ -0,0 +1,4 @@
data.json 為對應表,可依據需求新增修改 epg、name、logo。
1. 執行 run.bat
2. 輸入直播文本網址或檔名
3. 自動產出 live.json

@ -0,0 +1 @@
java -jar run.jar

Binary file not shown.

@ -0,0 +1 @@
rootProject.name = 'tools'

@ -0,0 +1,2 @@
Manifest-Version: 1.0
Main-Class: com.fongmi.tools.Run

@ -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<Group> groups;
private final List<Data> data;
private final Gson gson;
private final List<Group> groups;
private final List<Data> 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();
}
}
}

@ -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<String> 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<String> 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 "";
}
}
}

@ -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<Data> arrayFrom(String str) {
Type listType = new TypeToken<ArrayList<Data>>() {
}.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<Data> arrayFrom(String str) {
Type listType = new TypeToken<ArrayList<Data>>() {}.getType();
return new Gson().fromJson(str, listType);
}
public String getName() {
return name;
}
public String getEpg() {
return epg;
}
public String getLogo() {
return logo;
}
}

Loading…
Cancel
Save