Add bili parse

pull/123/head
FongMi 3 years ago
parent 7800c61bce
commit 04533b9d04
  1. 4
      app/src/main/java/com/fongmi/android/tv/bean/Channel.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
  3. 33
      app/src/main/java/com/fongmi/android/tv/player/source/BiliBili.java
  4. 7
      app/src/main/java/com/fongmi/android/tv/player/source/Youtube.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java

@ -226,6 +226,10 @@ public class Channel {
return Uri.parse(getCurrent()).getHost().equals("www.youtube.com");
}
public boolean isBiliBili() {
return Uri.parse(getCurrent()).getHost().equals("live.bilibili.com");
}
public Map<String, String> getHeaders() {
HashMap<String, String> map = new HashMap<>();
if (getUa().isEmpty()) return map;

@ -7,6 +7,7 @@ import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.api.LiveParser;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.player.source.BiliBili;
import com.fongmi.android.tv.player.source.Force;
import com.fongmi.android.tv.player.source.TVBus;
import com.fongmi.android.tv.player.source.Youtube;
@ -46,6 +47,7 @@ public class LiveViewModel extends ViewModel {
else if (item.isZLive()) item.setUrl(ZLive.get().fetch(url));
else if (item.isTVBus()) item.setUrl(TVBus.get().fetch(url));
else if (item.isYoutube()) item.setUrl(Youtube.get().fetch(url));
else if (item.isBiliBili()) item.setUrl(BiliBili.get().fetch(url));
else item.setUrl(url);
return item;
});

@ -0,0 +1,33 @@
package com.fongmi.android.tv.player.source;
import android.net.Uri;
import com.fongmi.android.tv.net.OkHttp;
import com.fongmi.android.tv.utils.Sniffer;
import com.google.common.net.HttpHeaders;
import com.google.gson.JsonParser;
import okhttp3.Headers;
public class BiliBili {
private static class Loader {
static volatile BiliBili INSTANCE = new BiliBili();
}
public static BiliBili get() {
return Loader.INSTANCE;
}
public String fetch(String url) {
try {
String room = Uri.parse(url).getPath().replace("/", "");
String api = String.format("https://api.live.bilibili.com/room/v1/Room/playUrl?cid=%s&qn=20000&platform=h5", room);
String result = OkHttp.newCall(api, Headers.of(HttpHeaders.USER_AGENT, Sniffer.CHROME)).execute().body().string();
return JsonParser.parseString(result).getAsJsonObject().get("data").getAsJsonObject().get("durl").getAsJsonArray().get(0).getAsJsonObject().get("url").getAsString();
} catch (Exception e) {
e.printStackTrace();
return url;
}
}
}

@ -1,6 +1,7 @@
package com.fongmi.android.tv.player.source;
import com.fongmi.android.tv.net.OkHttp;
import com.fongmi.android.tv.utils.Sniffer;
import com.google.common.net.HttpHeaders;
import java.util.Arrays;
@ -12,8 +13,6 @@ import okhttp3.Headers;
public class Youtube {
private static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";
private static class Loader {
static volatile Youtube INSTANCE = new Youtube();
}
@ -24,12 +23,12 @@ public class Youtube {
public String fetch(String url) {
try {
String result = OkHttp.newCall(url, Headers.of(HttpHeaders.USER_AGENT, CHROME)).execute().body().string();
String result = OkHttp.newCall(url, Headers.of(HttpHeaders.USER_AGENT, Sniffer.CHROME)).execute().body().string();
Pattern pattern = Pattern.compile("hlsManifestUrl\\S*?(https\\S*?\\.m3u8)");
Matcher matcher = pattern.matcher(result);
if (!matcher.find()) return "";
String stable = matcher.group(1);
result = OkHttp.newCall(stable, Headers.of(HttpHeaders.USER_AGENT, CHROME)).execute().body().string();
result = OkHttp.newCall(stable, Headers.of(HttpHeaders.USER_AGENT, Sniffer.CHROME)).execute().body().string();
String quality = find(result);
return quality.isEmpty() ? url : quality;
} catch (Exception e) {

@ -4,6 +4,8 @@ import java.util.regex.Pattern;
public class Sniffer {
public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";
public static final Pattern RULE = Pattern.compile(
"http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|" +
"http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|" +

Loading…
Cancel
Save