Skip to content

Commit c682ea0

Browse files
authored
Merge pull request #451 from TeamNewPipe/meta_info
Extract stream and search meta info for YouTube
2 parents 853a65a + 41a8ed6 commit c682ea0

21 files changed

Lines changed: 552 additions & 54 deletions
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.schabi.newpipe.extractor;
2+
3+
import org.schabi.newpipe.extractor.stream.Description;
4+
5+
import java.io.Serializable;
6+
import java.net.URL;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
import javax.annotation.Nonnull;
11+
12+
public class MetaInfo implements Serializable {
13+
14+
private String title = "";
15+
private Description content;
16+
private List<URL> urls = new ArrayList<>();
17+
private List<String> urlTexts = new ArrayList<>();
18+
19+
public MetaInfo(@Nonnull final String title, @Nonnull final Description content,
20+
@Nonnull final List<URL> urls, @Nonnull final List<String> urlTexts) {
21+
this.title = title;
22+
this.content = content;
23+
this.urls = urls;
24+
this.urlTexts = urlTexts;
25+
}
26+
27+
public MetaInfo() {
28+
}
29+
30+
/**
31+
* @return Title of the info. Can be empty.
32+
*/
33+
@Nonnull
34+
public String getTitle() {
35+
return title;
36+
}
37+
38+
public void setTitle(@Nonnull final String title) {
39+
this.title = title;
40+
}
41+
42+
@Nonnull
43+
public Description getContent() {
44+
return content;
45+
}
46+
47+
public void setContent(@Nonnull final Description content) {
48+
this.content = content;
49+
}
50+
51+
@Nonnull
52+
public List<URL> getUrls() {
53+
return urls;
54+
}
55+
56+
public void setUrls(@Nonnull final List<URL> urls) {
57+
this.urls = urls;
58+
}
59+
60+
public void addUrl(@Nonnull final URL url) {
61+
urls.add(url);
62+
}
63+
64+
@Nonnull
65+
public List<String> getUrlTexts() {
66+
return urlTexts;
67+
}
68+
69+
public void setUrlTexts(@Nonnull final List<String> urlTexts) {
70+
this.urlTexts = urlTexts;
71+
}
72+
73+
public void addUrlText(@Nonnull final String urlText) {
74+
urlTexts.add(urlText);
75+
}
76+
}

extractor/src/main/java/org/schabi/newpipe/extractor/search/SearchExtractor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import org.schabi.newpipe.extractor.InfoItem;
44
import org.schabi.newpipe.extractor.ListExtractor;
5+
import org.schabi.newpipe.extractor.MetaInfo;
56
import org.schabi.newpipe.extractor.StreamingService;
67
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
78
import org.schabi.newpipe.extractor.exceptions.ParsingException;
89
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
910

1011
import javax.annotation.Nonnull;
12+
import java.util.List;
1113

1214
public abstract class SearchExtractor extends ListExtractor<InfoItem> {
1315

@@ -57,4 +59,15 @@ public String getName() {
5759
* @return whether the results comes from a corrected query or not.
5860
*/
5961
public abstract boolean isCorrectedSearch() throws ParsingException;
62+
63+
/**
64+
* Meta information about the search query.
65+
* <p>
66+
* Example: on YouTube, if you search for "Covid-19",
67+
* there is a box with information from the WHO about Covid-19 and a link to the WHO's website.
68+
* @return additional meta information about the search query
69+
* @throws ParsingException
70+
*/
71+
@Nonnull
72+
public abstract List<MetaInfo> getMetaInfo() throws ParsingException;
6073
}

extractor/src/main/java/org/schabi/newpipe/extractor/search/SearchInfo.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package org.schabi.newpipe.extractor.search;
22

3-
import org.schabi.newpipe.extractor.InfoItem;
4-
import org.schabi.newpipe.extractor.ListExtractor;
5-
import org.schabi.newpipe.extractor.ListInfo;
6-
import org.schabi.newpipe.extractor.Page;
7-
import org.schabi.newpipe.extractor.StreamingService;
3+
import org.schabi.newpipe.extractor.*;
84
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
95
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
106
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
117

128
import java.io.IOException;
9+
import java.util.List;
10+
11+
import javax.annotation.Nonnull;
1312

1413
public class SearchInfo extends ListInfo<InfoItem> {
1514
private String searchString;
1615
private String searchSuggestion;
1716
private boolean isCorrectedSearch;
17+
private List<MetaInfo> metaInfo;
1818

1919
public SearchInfo(int serviceId,
2020
SearchQueryHandler qIHandler,
@@ -51,6 +51,11 @@ public static SearchInfo getInfo(SearchExtractor extractor) throws ExtractionExc
5151
} catch (Exception e) {
5252
info.addError(e);
5353
}
54+
try {
55+
info.setMetaInfo(extractor.getMetaInfo());
56+
} catch (Exception e) {
57+
info.addError(e);
58+
}
5459

5560
ListExtractor.InfoItemsPage<InfoItem> page = ExtractorHelper.getItemsPageOrLogError(info, extractor);
5661
info.setRelatedItems(page.getItems());
@@ -87,4 +92,13 @@ public void setIsCorrectedSearch(boolean isCorrectedSearch) {
8792
public void setSearchSuggestion(String searchSuggestion) {
8893
this.searchSuggestion = searchSuggestion;
8994
}
95+
96+
@Nonnull
97+
public List<MetaInfo> getMetaInfo() {
98+
return metaInfo;
99+
}
100+
101+
public void setMetaInfo(@Nonnull List<MetaInfo> metaInfo) {
102+
this.metaInfo = metaInfo;
103+
}
90104
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.grack.nanojson.JsonParserException;
77

88
import org.schabi.newpipe.extractor.InfoItem;
9+
import org.schabi.newpipe.extractor.MetaInfo;
910
import org.schabi.newpipe.extractor.Page;
1011
import org.schabi.newpipe.extractor.StreamingService;
1112
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
@@ -20,6 +21,7 @@
2021
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCConferencesListLinkHandlerFactory;
2122

2223
import java.io.IOException;
24+
import java.util.Collections;
2325
import java.util.List;
2426

2527
import javax.annotation.Nonnull;
@@ -55,6 +57,12 @@ public boolean isCorrectedSearch() {
5557
return false;
5658
}
5759

60+
@Nonnull
61+
@Override
62+
public List<MetaInfo> getMetaInfo() {
63+
return Collections.emptyList();
64+
}
65+
5866
@Nonnull
5967
@Override
6068
public InfoItemsPage<InfoItem> getInitialPage() {

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCStreamExtractor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.grack.nanojson.JsonParserException;
77

88
import org.schabi.newpipe.extractor.MediaFormat;
9+
import org.schabi.newpipe.extractor.MetaInfo;
910
import org.schabi.newpipe.extractor.StreamingService;
1011
import org.schabi.newpipe.extractor.downloader.Downloader;
1112
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@@ -301,4 +302,10 @@ public String getSupportInfo() {
301302
public List<StreamSegment> getStreamSegments() {
302303
return Collections.emptyList();
303304
}
305+
306+
@Nonnull
307+
@Override
308+
public List<MetaInfo> getMetaInfo() {
309+
return Collections.emptyList();
310+
}
304311
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.grack.nanojson.JsonParser;
55

66
import org.schabi.newpipe.extractor.InfoItem;
7+
import org.schabi.newpipe.extractor.MetaInfo;
78
import org.schabi.newpipe.extractor.Page;
89
import org.schabi.newpipe.extractor.StreamingService;
910
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -17,6 +18,8 @@
1718
import org.schabi.newpipe.extractor.utils.Utils;
1819

1920
import java.io.IOException;
21+
import java.util.Collections;
22+
import java.util.List;
2023

2124
import javax.annotation.Nonnull;
2225

@@ -42,6 +45,12 @@ public boolean isCorrectedSearch() {
4245
return false;
4346
}
4447

48+
@Nonnull
49+
@Override
50+
public List<MetaInfo> getMetaInfo() {
51+
return Collections.emptyList();
52+
}
53+
4554
@Override
4655
public InfoItemsPage<InfoItem> getInitialPage() throws IOException, ExtractionException {
4756
final String pageUrl = getUrl() + "&" + START_KEY + "=0&" + COUNT_KEY + "=" + ITEMS_PER_PAGE;

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.grack.nanojson.JsonParser;
66
import com.grack.nanojson.JsonParserException;
77
import org.schabi.newpipe.extractor.MediaFormat;
8+
import org.schabi.newpipe.extractor.MetaInfo;
89
import org.schabi.newpipe.extractor.NewPipe;
910
import org.schabi.newpipe.extractor.StreamingService;
1011
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -309,6 +310,12 @@ public List<StreamSegment> getStreamSegments() {
309310
return Collections.emptyList();
310311
}
311312

313+
@Nonnull
314+
@Override
315+
public List<MetaInfo> getMetaInfo() {
316+
return Collections.emptyList();
317+
}
318+
312319
private String getRelatedStreamsUrl(final List<String> tags) throws UnsupportedEncodingException {
313320
final String url = baseUrl + PeertubeSearchQueryHandlerFactory.SEARCH_ENDPOINT;
314321
final StringBuilder params = new StringBuilder();

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSearchExtractor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.schabi.newpipe.extractor.InfoItem;
99
import org.schabi.newpipe.extractor.InfoItemExtractor;
1010
import org.schabi.newpipe.extractor.InfoItemsCollector;
11+
import org.schabi.newpipe.extractor.MetaInfo;
1112
import org.schabi.newpipe.extractor.Page;
1213
import org.schabi.newpipe.extractor.StreamingService;
1314
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -22,6 +23,8 @@
2223
import java.io.UnsupportedEncodingException;
2324
import java.net.MalformedURLException;
2425
import java.net.URL;
26+
import java.util.Collections;
27+
import java.util.List;
2528

2629
import javax.annotation.Nonnull;
2730

@@ -47,6 +50,12 @@ public boolean isCorrectedSearch() {
4750
return false;
4851
}
4952

53+
@Nonnull
54+
@Override
55+
public List<MetaInfo> getMetaInfo() {
56+
return Collections.emptyList();
57+
}
58+
5059
@Nonnull
5160
@Override
5261
public InfoItemsPage<InfoItem> getInitialPage() throws IOException, ExtractionException {

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamExtractor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.grack.nanojson.JsonParserException;
77

88
import org.schabi.newpipe.extractor.MediaFormat;
9+
import org.schabi.newpipe.extractor.MetaInfo;
910
import org.schabi.newpipe.extractor.NewPipe;
1011
import org.schabi.newpipe.extractor.StreamingService;
1112
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -327,4 +328,10 @@ public String getSupportInfo() {
327328
public List<StreamSegment> getStreamSegments() {
328329
return Collections.emptyList();
329330
}
331+
332+
@Nonnull
333+
@Override
334+
public List<MetaInfo> getMetaInfo() {
335+
return Collections.emptyList();
336+
}
330337
}

0 commit comments

Comments
 (0)