Merge pull request #731 from FireMasterK/short-description
Extract Video Short Description in YouTube.
This commit is contained in:
commit
b425394e7a
|
@ -288,4 +288,19 @@ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor {
|
|||
throw new ParsingException("Could not parse date from premiere: \"" + startTime + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getShortDescription() throws ParsingException {
|
||||
|
||||
if (videoInfo.has("detailedMetadataSnippets")) {
|
||||
return getTextFromObject(videoInfo.getArray("detailedMetadataSnippets").getObject(0).getObject("snippetText"));
|
||||
}
|
||||
|
||||
if (videoInfo.has("descriptionSnippet")) {
|
||||
return getTextFromObject(videoInfo.getObject("descriptionSnippet"));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ public class StreamInfoItem extends InfoItem {
|
|||
private final StreamType streamType;
|
||||
|
||||
private String uploaderName;
|
||||
private String shortDescription;
|
||||
private String textualUploadDate;
|
||||
@Nullable
|
||||
private DateWrapper uploadDate;
|
||||
|
@ -92,6 +93,14 @@ public class StreamInfoItem extends InfoItem {
|
|||
this.uploaderAvatarUrl = uploaderAvatarUrl;
|
||||
}
|
||||
|
||||
public String getShortDescription() {
|
||||
return shortDescription;
|
||||
}
|
||||
|
||||
public void setShortDescription(final String shortDescription) {
|
||||
this.shortDescription = shortDescription;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getTextualUploadDate() {
|
||||
return textualUploadDate;
|
||||
|
|
|
@ -116,4 +116,14 @@ public interface StreamInfoItemExtractor extends InfoItemExtractor {
|
|||
@Nullable
|
||||
DateWrapper getUploadDate() throws ParsingException;
|
||||
|
||||
|
||||
/**
|
||||
* Get the video's short description.
|
||||
*
|
||||
* @return The video's short description or {@code null} if not provided by the service.
|
||||
* @throws ParsingException if there is an error in the extraction
|
||||
*/
|
||||
@Nullable
|
||||
default String getShortDescription() throws ParsingException { return null; }
|
||||
|
||||
}
|
||||
|
|
|
@ -101,6 +101,11 @@ public class StreamInfoItemsCollector extends InfoItemsCollector<StreamInfoItem,
|
|||
} catch (Exception e) {
|
||||
addError(e);
|
||||
}
|
||||
try {
|
||||
resultItem.setShortDescription(extractor.getShortDescription());
|
||||
} catch (Exception e) {
|
||||
addError(e);
|
||||
}
|
||||
|
||||
return resultItem;
|
||||
}
|
||||
|
|
|
@ -343,4 +343,34 @@ public class YoutubeSearchExtractorTest {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class VideoDescription extends DefaultSearchExtractorTest {
|
||||
private static SearchExtractor extractor;
|
||||
private static final String QUERY = "44wLAzydRFU";
|
||||
|
||||
@BeforeClass
|
||||
public static void setUp() throws Exception {
|
||||
YoutubeParsingHelper.resetClientVersionAndKey();
|
||||
YoutubeParsingHelper.setNumberGenerator(new Random(1));
|
||||
NewPipe.init(new DownloaderFactory().getDownloader(RESOURCE_PATH + "video_description"));
|
||||
extractor = YouTube.getSearchExtractor(QUERY, singletonList(VIDEOS), "");
|
||||
extractor.fetchPage();
|
||||
}
|
||||
|
||||
@Override public SearchExtractor extractor() { return extractor; }
|
||||
@Override public StreamingService expectedService() { return YouTube; }
|
||||
@Override public String expectedName() { return QUERY; }
|
||||
@Override public String expectedId() { return QUERY; }
|
||||
@Override public String expectedUrlContains() { return "youtube.com/results?search_query=" + QUERY; }
|
||||
@Override public String expectedOriginalUrlContains() { return "youtube.com/results?search_query=" + QUERY; }
|
||||
@Override public String expectedSearchString() { return QUERY; }
|
||||
@Nullable @Override public String expectedSearchSuggestion() { return null; }
|
||||
@Override public InfoItem.InfoType expectedInfoItemType() { return InfoItem.InfoType.STREAM; }
|
||||
|
||||
@Test
|
||||
public void testVideoDescription() throws IOException, ExtractionException {
|
||||
final List<InfoItem> items = extractor.getInitialPage().getItems();
|
||||
assertNotNull(((StreamInfoItem) items.get(0)).getShortDescription());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue