diff --git a/app/src/main/java/com/github/catvod/bean/xtream/Config.java b/app/src/main/java/com/github/catvod/bean/xtream/Config.java index 985b2ae2..afd399e8 100644 --- a/app/src/main/java/com/github/catvod/bean/xtream/Config.java +++ b/app/src/main/java/com/github/catvod/bean/xtream/Config.java @@ -6,29 +6,41 @@ import com.google.gson.annotations.SerializedName; import java.util.Arrays; import java.util.List; +import okhttp3.HttpUrl; + public class Config { - @SerializedName("name") - private String name; - @SerializedName("pass") - private String pass; @SerializedName("vod") private boolean vod; + @SerializedName("live") + private boolean live; @SerializedName("formats") private List formats; - private String url; + private HttpUrl url; + private String name; + private String pass; public static Config objectFrom(String str) { Config item = new Gson().fromJson(str, Config.class); return item == null ? new Config() : item; } - public void setUrl(String url) { - this.url = url; + public boolean isVod() { + return vod; } - public String getUrl() { + public boolean isLive() { + return live; + } + + public void setUrl(String url) { + this.url = HttpUrl.parse(url); + setName(this.url.queryParameter("username")); + setPass(this.url.queryParameter("password")); + } + + public HttpUrl getUrl() { return url; } @@ -36,12 +48,16 @@ public class Config { return name; } + public void setName(String name) { + this.name = name; + } + public String getPass() { return pass; } - public boolean isVod() { - return vod; + public void setPass(String pass) { + this.pass = pass; } public List getFormats() { diff --git a/app/src/main/java/com/github/catvod/bean/xtream/XStream.java b/app/src/main/java/com/github/catvod/bean/xtream/XStream.java index 9928af72..2ad88881 100644 --- a/app/src/main/java/com/github/catvod/bean/xtream/XStream.java +++ b/app/src/main/java/com/github/catvod/bean/xtream/XStream.java @@ -2,7 +2,6 @@ package com.github.catvod.bean.xtream; import android.text.TextUtils; -import com.github.catvod.spider.XtreamCode; import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; @@ -12,6 +11,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import okhttp3.HttpUrl; + public class XStream { @SerializedName("name") @@ -65,8 +66,12 @@ public class XStream { public List getPlayUrl(Config config) { List urls = new ArrayList<>(); - if (!getContainerExtension().isEmpty()) urls.add(XtreamCode.getBuilder(config).addPathSegment(getStreamType()).addPathSegment(config.getName()).addPathSegment(config.getPass()).addPathSegment(getStreamId() + "." + getContainerExtension()).build().toString()); - else for (String format : config.getFormats()) urls.add(XtreamCode.getBuilder(config).addPathSegment(getStreamType()).addPathSegment(config.getName()).addPathSegment(config.getPass()).addPathSegment(getStreamId() + "." + format + "$" + format.toUpperCase()).build().toString()); + if (!getContainerExtension().isEmpty()) urls.add(getBuilder(config).addPathSegment(getStreamType()).addPathSegment(config.getName()).addPathSegment(config.getPass()).addPathSegment(getStreamId() + "." + getContainerExtension()).build().toString()); + else for (String format : config.getFormats()) urls.add(getBuilder(config).addPathSegment(getStreamType()).addPathSegment(config.getName()).addPathSegment(config.getPass()).addPathSegment(getStreamId() + "." + format + "$" + format.toUpperCase()).build().toString()); return urls; } + + private HttpUrl.Builder getBuilder(Config config) { + return new HttpUrl.Builder().scheme(config.getUrl().scheme()).host(config.getUrl().host()).port(config.getUrl().port()); + } } diff --git a/app/src/main/java/com/github/catvod/spider/XtreamCode.java b/app/src/main/java/com/github/catvod/spider/XtreamCode.java index 0c13a240..aecf3d63 100644 --- a/app/src/main/java/com/github/catvod/spider/XtreamCode.java +++ b/app/src/main/java/com/github/catvod/spider/XtreamCode.java @@ -16,8 +16,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import okhttp3.HttpUrl; - public class XtreamCode extends Spider { private List groups; @@ -32,6 +30,12 @@ public class XtreamCode extends Spider { @Override public String liveContent(String url) { config.setUrl(url); + setChannel(); + setNumber(); + return new Gson().toJson(groups); + } + + private void setChannel() { List categoryList = getCategoryList(config); List streamList = getStreamList(config); Map categoryMap = new HashMap<>(); @@ -46,22 +50,19 @@ public class XtreamCode extends Spider { if (!stream.getEpgChannelId().isEmpty()) channel.setTvgName(stream.getEpgChannelId()); channel.getUrls().addAll(stream.getPlayUrl(config)); } + } + + private void setNumber() { int number = 0; for (Group group : groups) { for (Channel channel : group.getChannel()) { if (channel.getNumber().isEmpty()) channel.setNumber(++number); } } - return new Gson().toJson(groups); - } - - public static HttpUrl.Builder getBuilder(Config config) { - HttpUrl url = HttpUrl.parse(config.getUrl()); - return new HttpUrl.Builder().scheme(url.scheme()).host(url.host()).port(url.port()); } private String getApiUrl(Config config, String action) { - return getBuilder(config).addPathSegment("player_api.php").addQueryParameter("username", config.getName()).addQueryParameter("password", config.getPass()).addQueryParameter("action", action).build().toString(); + return config.getUrl().newBuilder().addQueryParameter("action", action).build().toString(); } private List getLiveCategoryList(Config config) { @@ -81,13 +82,15 @@ public class XtreamCode extends Spider { } private List getCategoryList(Config config) { - List categoryList = getLiveCategoryList(config); + List categoryList = new ArrayList<>(); + if (config.isLive()) categoryList.addAll(getLiveCategoryList(config)); if (config.isVod()) categoryList.addAll(getVodCategoryList(config)); return categoryList; } private List getStreamList(Config config) { - List streamList = getLiveStreamList(config); + List streamList = new ArrayList<>(); + if (config.isLive()) streamList.addAll(getLiveStreamList(config)); if (config.isVod()) streamList.addAll(getVodStreamList(config)); return streamList; } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 80e50320..6ed82a17 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index be17c8a9..1c6871e6 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -0e8190a0e9fb28163c19789d2f3642fa +5e53c8f9ddd4ede5359c16bee091db93 diff --git a/json/demo.json b/json/demo.json index 88923f4a..1e1565f3 100644 --- a/json/demo.json +++ b/json/demo.json @@ -5,13 +5,12 @@ { "name": "XtreamCode", "api": "csp_XtreamCode", - "url": "http://iptv.icsnleb.com:25461/", + "url": "http://iptv.icsnleb.com:25461/player_api.php?username=12&password=12", "epg": "http://iptv.icsnleb.com:25461/xmltv.php?username=12&password=12", "type": 3, "ext": { - "name": "12", - "pass": "12", - "vod": false, + "live": true, + "vod": true, "formats": [ "m3u8", "ts"