导航菜单

页面标题

页面副标题

Kreate v1.5.0 - BandcampCommentsExtractor.java 源代码

正在查看: Kreate v1.5.0 应用的 BandcampCommentsExtractor.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package org.schabi.newpipe.extractor.services.bandcamp.extractors;

import androidx.core.graphics.TypefaceCompat$;
import com.grack.nanojson.JsonArray;
import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonWriter;
import j$.util.Collection;
import j$.util.function.BiFunction;
import j$.util.function.Function;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.comments.CommentsExtractor;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor;
import org.schabi.newpipe.extractor.comments.CommentsInfoItemsCollector;
import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
import org.schabi.newpipe.extractor.utils.JsonUtils;

public class BandcampCommentsExtractor extends CommentsExtractor {
    private static final String REVIEWS_API_URL = "https://bandcamp.com/api/tralbumcollectors/2/reviews";
    private Document document;

    static String lambda$getNextPageToken$1(String str, String str2) {
        return str2;
    }

    public BandcampCommentsExtractor(StreamingService streamingService, ListLinkHandler listLinkHandler) {
        super(streamingService, listLinkHandler);
    }

    @Override
    public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
        this.document = Jsoup.parse(downloader.get(getLinkHandler().getUrl()).responseBody());
    }

    @Override
    @Nonnull
    public ListExtractor.InfoItemsPage<CommentsInfoItem> getInitialPage() throws IOException, ExtractionException {
        CommentsInfoItemsCollector commentsInfoItemsCollector = new CommentsInfoItemsCollector(getServiceId());
        JsonObject jsonObject = JsonUtils.toJsonObject(this.document.getElementById("collectors-data").attr("data-blob"));
        JsonArray array = jsonObject.getArray("reviews");
        Iterator it = array.iterator();
        while (it.hasNext()) {
            commentsInfoItemsCollector.commit((CommentsInfoItemExtractor) new BandcampCommentsInfoItemExtractor((JsonObject) it.next(), getUrl()));
        }
        if (!jsonObject.getBoolean("more_reviews_available")) {
            return new ListExtractor.InfoItemsPage<>(commentsInfoItemsCollector, null);
        }
        return new ListExtractor.InfoItemsPage<>(commentsInfoItemsCollector, new Page((List<String>) TypefaceCompat$.ExternalSyntheticBackport0.m(getTrackId(), getNextPageToken(array))));
    }

    @Override
    public ListExtractor.InfoItemsPage<CommentsInfoItem> getPage(Page page) throws IOException, ExtractionException {
        CommentsInfoItemsCollector commentsInfoItemsCollector = new CommentsInfoItemsCollector(getServiceId());
        List<String> ids = page.getIds();
        String str = ids.get(0);
        JsonObject fetchReviewsData = fetchReviewsData(str, ids.get(1));
        JsonArray array = fetchReviewsData.getArray("results");
        Iterator it = array.iterator();
        while (it.hasNext()) {
            commentsInfoItemsCollector.commit((CommentsInfoItemExtractor) new BandcampCommentsInfoItemExtractor((JsonObject) it.next(), getUrl()));
        }
        if (!fetchReviewsData.getBoolean("more_available")) {
            return new ListExtractor.InfoItemsPage<>(commentsInfoItemsCollector, null);
        }
        return new ListExtractor.InfoItemsPage<>(commentsInfoItemsCollector, new Page((List<String>) TypefaceCompat$.ExternalSyntheticBackport0.m(str, getNextPageToken(array))));
    }

    private JsonObject fetchReviewsData(String str, String str2) throws ParsingException {
        try {
            return JsonUtils.toJsonObject(getDownloader().postWithContentTypeJson(REVIEWS_API_URL, Collections.EMPTY_MAP, JsonWriter.string().object().value("tralbum_type", "t").value("tralbum_id", str).value("token", str2).value(PeertubeParsingHelper.COUNT_KEY, 7).array("exclude_fan_ids").end().end().done().getBytes(StandardCharsets.UTF_8)).responseBody());
        } catch (IOException | ReCaptchaException e) {
            throw new ParsingException("Could not fetch reviews", e);
        }
    }

    private String getNextPageToken(JsonArray jsonArray) throws ParsingException {
        return (String) Collection.-EL.stream(jsonArray).filter(new BandcampCommentsExtractor$$ExternalSyntheticLambda0(JsonObject.class)).map(new BandcampCommentsExtractor$$ExternalSyntheticLambda1(JsonObject.class)).map(new Function() {
            @Override
            public Function andThen(Function function) {
                return Function.-CC.$default$andThen(this, function);
            }

            @Override
            public final Object apply(Object obj) {
                String string;
                string = ((JsonObject) obj).getString("token");
                return string;
            }

            @Override
            public java.util.function.Function compose(java.util.function.Function function) {
                return Function.-CC.$default$compose(this, function);
            }
        }).reduce(new BinaryOperator() {
            @Override
            public BiFunction andThen(java.util.function.Function function) {
                return BiFunction.-CC.$default$andThen(this, function);
            }

            @Override
            public final Object apply(Object obj, Object obj2) {
                return BandcampCommentsExtractor.lambda$getNextPageToken$1((String) obj, (String) obj2);
            }
        }).orElseThrow(new Supplier() {
            @Override
            public final Object get() {
                return BandcampCommentsExtractor.lambda$getNextPageToken$2();
            }
        });
    }

    static ParsingException lambda$getNextPageToken$2() {
        return new ParsingException("Could not get token");
    }

    private String getTrackId() throws ParsingException {
        return Long.toString(JsonUtils.toJsonObject(this.document.selectFirst("meta[name=bc-page-properties]").attr("content")).getLong("item_id"));
    }

    @Override
    public boolean isCommentsDisabled() throws ExtractionException {
        return BandcampExtractorHelper.isRadioUrl(getUrl());
    }
}