mirror of
https://github.com/TeamPiped/Piped-Backend.git
synced 2024-08-14 23:51:41 +00:00
Add support for search filters and simplify continuations.
This commit is contained in:
parent
73b527a288
commit
0129cc58ce
3 changed files with 23 additions and 17 deletions
|
@ -131,8 +131,8 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
|
||||||
}
|
}
|
||||||
})).map("/search", AsyncServlet.ofBlocking(executor, request -> {
|
})).map("/search", AsyncServlet.ofBlocking(executor, request -> {
|
||||||
try {
|
try {
|
||||||
return getJsonResponse(ResponseHelper.searchResponse(request.getQueryParameter("q")),
|
return getJsonResponse(ResponseHelper.searchResponse(request.getQueryParameter("q"),
|
||||||
"public, max-age=600");
|
request.getQueryParameter("filter")), "public, max-age=600");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return getErrorResponse(e);
|
return getErrorResponse(e);
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
|
||||||
try {
|
try {
|
||||||
return getJsonResponse(
|
return getJsonResponse(
|
||||||
ResponseHelper.searchPageResponse(request.getQueryParameter("q"),
|
ResponseHelper.searchPageResponse(request.getQueryParameter("q"),
|
||||||
request.getQueryParameter("url"), request.getQueryParameter("id")),
|
request.getQueryParameter("filter"), request.getQueryParameter("nextpage")),
|
||||||
"public, max-age=3600");
|
"public, max-age=3600");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return getErrorResponse(e);
|
return getErrorResponse(e);
|
||||||
|
|
|
@ -7,6 +7,7 @@ import java.net.URL;
|
||||||
import java.net.http.HttpRequest;
|
import java.net.http.HttpRequest;
|
||||||
import java.net.http.HttpRequest.BodyPublishers;
|
import java.net.http.HttpRequest.BodyPublishers;
|
||||||
import java.net.http.HttpResponse.BodyHandlers;
|
import java.net.http.HttpResponse.BodyHandlers;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -285,10 +286,11 @@ public class ResponseHelper {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final byte[] searchResponse(String q) throws IOException, ExtractionException, InterruptedException {
|
public static final byte[] searchResponse(String q, String filter)
|
||||||
|
throws IOException, ExtractionException, InterruptedException {
|
||||||
|
|
||||||
final SearchInfo info = SearchInfo.getInfo(Constants.YOUTUBE_SERVICE,
|
final SearchInfo info = SearchInfo.getInfo(Constants.YOUTUBE_SERVICE,
|
||||||
Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q));
|
Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q, Collections.singletonList(filter), null));
|
||||||
|
|
||||||
ObjectArrayList<SearchItem> items = new ObjectArrayList<>();
|
ObjectArrayList<SearchItem> items = new ObjectArrayList<>();
|
||||||
|
|
||||||
|
@ -298,7 +300,7 @@ public class ResponseHelper {
|
||||||
StreamInfoItem stream = (StreamInfoItem) item;
|
StreamInfoItem stream = (StreamInfoItem) item;
|
||||||
items.add(new SearchStream(item.getName(), rewriteURL(item.getThumbnailUrl()),
|
items.add(new SearchStream(item.getName(), rewriteURL(item.getThumbnailUrl()),
|
||||||
item.getUrl().substring(23), stream.getTextualUploadDate(), stream.getUploaderName(),
|
item.getUrl().substring(23), stream.getTextualUploadDate(), stream.getUploaderName(),
|
||||||
stream.getUploaderUrl().substring(23), stream.getViewCount(), stream.getDuration(),
|
optionalSubstring(stream.getUploaderUrl(), 23), stream.getViewCount(), stream.getDuration(),
|
||||||
stream.isUploaderVerified()));
|
stream.isUploaderVerified()));
|
||||||
break;
|
break;
|
||||||
case CHANNEL:
|
case CHANNEL:
|
||||||
|
@ -319,17 +321,19 @@ public class ResponseHelper {
|
||||||
|
|
||||||
Page nextpage = info.getNextPage();
|
Page nextpage = info.getNextPage();
|
||||||
|
|
||||||
return nextpage != null
|
return Constants.mapper
|
||||||
? Constants.mapper.writeValueAsBytes(new SearchResults(nextpage.getUrl(), nextpage.getId(), items))
|
.writeValueAsBytes(new SearchResults(items, Constants.mapper.writeValueAsString(nextpage)));
|
||||||
: Constants.mapper.writeValueAsBytes(new SearchResults(null, null, items));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final byte[] searchPageResponse(String q, String url, String id)
|
public static final byte[] searchPageResponse(String q, String filter, String prevpageStr)
|
||||||
throws IOException, ExtractionException, InterruptedException {
|
throws IOException, ExtractionException, InterruptedException {
|
||||||
|
|
||||||
|
Page prevpage = Constants.mapper.readValue(prevpageStr, Page.class);
|
||||||
|
|
||||||
InfoItemsPage<InfoItem> pages = SearchInfo.getMoreItems(Constants.YOUTUBE_SERVICE,
|
InfoItemsPage<InfoItem> pages = SearchInfo.getMoreItems(Constants.YOUTUBE_SERVICE,
|
||||||
Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q), new Page(url, id));
|
Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q, Collections.singletonList(filter), null),
|
||||||
|
prevpage);
|
||||||
|
|
||||||
ObjectArrayList<SearchItem> items = new ObjectArrayList<>();
|
ObjectArrayList<SearchItem> items = new ObjectArrayList<>();
|
||||||
|
|
||||||
|
@ -360,9 +364,8 @@ public class ResponseHelper {
|
||||||
|
|
||||||
Page nextpage = pages.getNextPage();
|
Page nextpage = pages.getNextPage();
|
||||||
|
|
||||||
return nextpage != null
|
return Constants.mapper
|
||||||
? Constants.mapper.writeValueAsBytes(new SearchResults(nextpage.getUrl(), nextpage.getId(), items))
|
.writeValueAsBytes(new SearchResults(items, Constants.mapper.writeValueAsString(nextpage)));
|
||||||
: Constants.mapper.writeValueAsBytes(new SearchResults(null, null, items));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,6 +444,10 @@ public class ResponseHelper {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String optionalSubstring(String s, int index) {
|
||||||
|
return s == null || s.isEmpty() ? null : s.substring(index);
|
||||||
|
}
|
||||||
|
|
||||||
private static String rewriteURL(final String old) {
|
private static String rewriteURL(final String old) {
|
||||||
|
|
||||||
if (Constants.debug)
|
if (Constants.debug)
|
||||||
|
|
|
@ -5,12 +5,11 @@ import me.kavin.piped.utils.obj.search.SearchItem;
|
||||||
|
|
||||||
public class SearchResults {
|
public class SearchResults {
|
||||||
|
|
||||||
public String nextpage, id;
|
|
||||||
public ObjectArrayList<SearchItem> items;
|
public ObjectArrayList<SearchItem> items;
|
||||||
|
public String nextpage;
|
||||||
|
|
||||||
public SearchResults(String nextpage, String id, ObjectArrayList<SearchItem> items) {
|
public SearchResults(ObjectArrayList<SearchItem> items, String nextpage) {
|
||||||
this.nextpage = nextpage;
|
this.nextpage = nextpage;
|
||||||
this.id = id;
|
|
||||||
this.items = items;
|
this.items = items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue