Merge pull request #144 from yausername/fixCommentUrl

fix comment url
This commit is contained in:
Christian Schabesberger 2019-03-02 23:38:28 +01:00 committed by GitHub
commit aa4f03a385
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 9 deletions

View file

@ -308,11 +308,11 @@ public abstract class StreamingService {
LinkHandlerFactory cH = getChannelLHFactory(); LinkHandlerFactory cH = getChannelLHFactory();
LinkHandlerFactory pH = getPlaylistLHFactory(); LinkHandlerFactory pH = getPlaylistLHFactory();
if (sH.acceptUrl(url)) { if (sH != null && sH.acceptUrl(url)) {
return LinkType.STREAM; return LinkType.STREAM;
} else if (cH.acceptUrl(url)) { } else if (cH != null && cH.acceptUrl(url)) {
return LinkType.CHANNEL; return LinkType.CHANNEL;
} else if (pH.acceptUrl(url)) { } else if (pH != null && pH.acceptUrl(url)) {
return LinkType.PLAYLIST; return LinkType.PLAYLIST;
} else { } else {
return LinkType.NONE; return LinkType.NONE;

View file

@ -107,11 +107,11 @@ public class YoutubeCommentsExtractor extends CommentsExtractor {
throw new ParsingException("Could not parse json data for comments", e); throw new ParsingException("Could not parse json data for comments", e);
} }
CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector(getServiceId()); CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector(getServiceId());
collectCommentsFrom(collector, ajaxJson, pageUrl); collectCommentsFrom(collector, ajaxJson);
return new InfoItemsPage<>(collector, getNextPageUrl(ajaxJson)); return new InfoItemsPage<>(collector, getNextPageUrl(ajaxJson));
} }
private void collectCommentsFrom(CommentsInfoItemsCollector collector, JsonObject ajaxJson, String pageUrl) throws ParsingException { private void collectCommentsFrom(CommentsInfoItemsCollector collector, JsonObject ajaxJson) throws ParsingException {
JsonArray contents; JsonArray contents;
try { try {
@ -130,7 +130,7 @@ public class YoutubeCommentsExtractor extends CommentsExtractor {
for(Object c: comments) { for(Object c: comments) {
if(c instanceof JsonObject) { if(c instanceof JsonObject) {
CommentsInfoItemExtractor extractor = new YoutubeCommentsInfoItemExtractor((JsonObject) c, pageUrl); CommentsInfoItemExtractor extractor = new YoutubeCommentsInfoItemExtractor((JsonObject) c, getUrl());
collector.commit(extractor); collector.commit(extractor);
} }
} }

View file

@ -3,6 +3,7 @@ package org.schabi.newpipe.extractor.services.youtube.extractors;
import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor; import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.utils.JsonUtils; import org.schabi.newpipe.extractor.utils.JsonUtils;
import org.schabi.newpipe.extractor.utils.Utils;
import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonArray;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
@ -62,7 +63,9 @@ public class YoutubeCommentsInfoItemExtractor implements CommentsInfoItemExtract
@Override @Override
public String getCommentText() throws ParsingException { public String getCommentText() throws ParsingException {
try { try {
return YoutubeCommentsExtractor.getYoutubeText(JsonUtils.getObject(json, "contentText")); String commentText = YoutubeCommentsExtractor.getYoutubeText(JsonUtils.getObject(json, "contentText"));
// youtube adds U+FEFF in some comments. eg. https://www.youtube.com/watch?v=Nj4F63E59io<feff>
return Utils.removeUTF8BOM(commentText);
} catch (Exception e) { } catch (Exception e) {
throw new ParsingException("Could not get comment text", e); throw new ParsingException("Could not get comment text", e);
} }

View file

@ -1,13 +1,13 @@
package org.schabi.newpipe.extractor.utils; package org.schabi.newpipe.extractor.utils;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.List; import java.util.List;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
public class Utils { public class Utils {
private Utils() { private Utils() {
@ -120,4 +120,14 @@ public class Utils {
throw e; throw e;
} }
} }
public static String removeUTF8BOM(String s) {
if (s.startsWith("\uFEFF")) {
s = s.substring(1);
}
if (s.endsWith("\uFEFF")) {
s = s.substring(0, s.length()-1);
}
return s;
}
} }