From 65a31fd37cb2999fe5ca170c1aad927e7dea077c Mon Sep 17 00:00:00 2001 From: CypherpunkSamurai Date: Wed, 8 Mar 2023 21:53:58 +0530 Subject: [PATCH] test --- .../extractor/services/xh/XhService.java | 19 +++-- .../extractors/XhStreamInfoItemExtractor.java | 6 +- .../services/xh/extractors/items/XhVideo.java | 76 +++++++++++++++---- 3 files changed, 72 insertions(+), 29 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/XhService.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/XhService.java index 71e29784..4337a9d8 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/XhService.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/XhService.java @@ -23,30 +23,28 @@ import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor; public class XhService extends StreamingService { - + // name final static String NAME = "Xhamsters"; - + // host public final static String HOST = "xhamster18.desi"; public final static String BASE_URL = "https://" + HOST + "/"; - // constructor public XhService(final int id) { super(id, NAME, Arrays.asList(VIDEO)); } - + public XhService(int id, String name, List capabilities) { super(id, NAME, Arrays.asList(VIDEO)); } - @Override public String getBaseUrl() { return BASE_URL; } - + @Override public SearchExtractor getSearchExtractor(SearchQueryHandler query) { return new XhSearchExtractor(this, query); @@ -76,7 +74,7 @@ public class XhService extends StreamingService { public ListLinkHandlerFactory getCommentsLHFactory() { return null; } - + @Override public SuggestionExtractor getSuggestionExtractor() { return null; @@ -89,11 +87,12 @@ public class XhService extends StreamingService { @Override public KioskList getKioskList() throws ExtractionException { - final KioskList list = new KioskList(this); + // Return Empty List + // patch: if (kioskId == null) { return "" } + KioskList list = new KioskList(this); return list; } - @Override public ChannelExtractor getChannelExtractor(ListLinkHandler linkHandler) throws ExtractionException { return null; @@ -113,4 +112,4 @@ public class XhService extends StreamingService { public CommentsExtractor getCommentsExtractor(ListLinkHandler linkHandler) throws ExtractionException { return null; } -} \ No newline at end of file +} diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/XhStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/XhStreamInfoItemExtractor.java index 4c1940be..a5e5716a 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/XhStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/XhStreamInfoItemExtractor.java @@ -15,8 +15,8 @@ import org.schabi.newpipe.extractor.stream.StreamType; * * @author Rakesh */ -public abstract class XhStreamInfoItemExtractor implements StreamInfoItemExtractor { - +public class XhStreamInfoItemExtractor implements StreamInfoItemExtractor { + XhVideo video; public XhStreamInfoItemExtractor(XhVideo video) { @@ -87,5 +87,5 @@ public abstract class XhStreamInfoItemExtractor implements StreamInfoItemExtract public String getThumbnailUrl() throws ParsingException { return this.video.getThumbURL(); } - + } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/items/XhVideo.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/items/XhVideo.java index b0dcb9c2..cc1073be 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/items/XhVideo.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/xh/extractors/items/XhVideo.java @@ -5,57 +5,62 @@ */ package org.schabi.newpipe.extractor.services.xh.extractors.items; +import com.grack.nanojson.JsonObject; +import com.grack.nanojson.JsonParser; +import com.grack.nanojson.JsonParserException; +import java.io.IOException; import java.util.HashMap; import java.util.Map; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; /** * * @author Rakesh */ public class XhVideo { - + int id; - + String title; String description; - + int duration; int created; - + String pageURL; String thumbURL; - + int authorID; String authorName; String authorThumb; String authorPageURL; - - Map sources; - + Map sources = null; + public XhVideo(int id, String title, String description, int duration, int created, String pageURL, String thumbURL, int authorID, String authorName, String authorThumb, String authorPageURL, HashMap streams) { this.id = id; this.title = title; this.description = description; - + this.duration = duration; this.created = created; - + this.pageURL = pageURL; this.thumbURL = thumbURL; - + this.authorID = authorID; this.authorName = authorName; this.authorThumb = authorThumb; this.authorPageURL = authorPageURL; - + this.sources = streams; } public int getId() { return id; - } - + } + public String getTitle() { return title; } @@ -87,7 +92,7 @@ public class XhVideo { public String getAuthorName() { return authorName; } - + public String getAuthorThumb() { return authorThumb; } @@ -96,8 +101,47 @@ public class XhVideo { return authorPageURL; } + public Map getSourceURLs() throws IOException, JsonParserException { + /* + Parse + */ + Document html = Jsoup.connect(this.pageURL).get(); + // Parse Content + String content = html.selectFirst("#initials-script").html(); + String info_cdn = content.substring(0, content.length() - 1).replace("window.initials=", ""); + + // Use NanoJSON to convert to VideoItem + final JsonObject json = JsonParser.object().from(info_cdn); + final JsonObject videoModel = json.getObject("videoModel"); + + HashMap streams = new HashMap<>(); + + // iterate urls + final JsonObject mp4 = videoModel.getObject("sources").getObject("mp4"); + if (!mp4.isEmpty()) { + final Object keys[] = mp4.keySet().toArray(); + for (int i = 0; i < keys.length; i++) { + final String key = keys[i].toString(); + streams.put(key, mp4.getString("key")); + } + } + + return streams; + } + public Map getSources() { + if (sources.isEmpty() || sources == null) { + // check if pageurl is set + if (!pageURL.isBlank() || !pageURL.isEmpty()) { + // parse the page + try { + this.sources = getSourceURLs(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } return sources; } - + }