Snaptube v4.40.0.4401610版本的 MD5 值为:ca2b95dcff63007195db02a6c93091b9

以下内容为反编译后的 cej.java 源代码,内容仅作参考


package o;

import com.mobvista.msdk.base.common.report.ReportUtil;
import com.snaptube.video.videoextractor.ExtractException;
import com.snaptube.video.videoextractor.model.DownloadInfo;
import com.snaptube.video.videoextractor.model.DownloadPartInfo;
import com.snaptube.video.videoextractor.model.VideoInfo;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class cej extends cew {
    private static final Pattern f19759 = Pattern.compile("video\\[(\\d+)]\\s=\\s'<iframe\\s.*src=\"(.*?)\"");
    private static final Pattern f19760 = Pattern.compile("<a\\shref=\"#option\\d\".*?>([\\w]+)<//a>");
    private static final C0377 f19761 = new C0377();

    public cej() {
        super("animeflv.net", "/ver/[\\w-]+\\.html", "/ver/\\d+/[\\w-]+");
    }

    @Override
    protected VideoInfo mo20459(Document document, Map<String, Object> map) throws ExtractException {
        VideoInfo videoInfo = new VideoInfo();
        videoInfo.setTitle(cfl.m20593(document, "meta[property=og:title]", "content"));
        videoInfo.setThumbnail(cfl.m20596((Element) document, "meta[property=og:image]", "content"));
        m20460(videoInfo, document);
        videoInfo.setExpires((int) TimeUnit.MINUTES.toSeconds(30L));
        cfk.m20589(map);
        return videoInfo;
    }

    protected void m20460(VideoInfo videoInfo, Document document) throws ExtractException {
        videoInfo.setDownloadInfoList(m20456(document.getElementsByTag("script"), document));
    }

    private List<DownloadInfo> m20456(Elements elements, Document document) throws ExtractException {
        String str;
        int i = 0;
        boolean z = false;
        String str2 = "";
        while (true) {
            if (i >= elements.size()) {
                str = str2;
                break;
            }
            str = elements.get(i).html();
            Matcher matcher = f19759.matcher(str);
            boolean z2 = z;
            while (matcher.find()) {
                List<DownloadInfo> m20458 = m20458(matcher.group(2));
                if (m20458 != null && !m20458.isEmpty()) {
                    return m20458;
                }
                z2 = true;
            }
            if (z2) {
                break;
            }
            i++;
            z = z2;
            str2 = str;
        }
        Matcher matcher2 = Pattern.compile("video\\[\\d]\\s=\\s'<img\\s.*?window\\.open\\(\"([^\"]+)\",").matcher(str);
        if (!matcher2.find()) {
            throw new ExtractException("not find video download url");
        }
        return m20458(matcher2.group(1));
    }

    private List<DownloadInfo> m20458(String str) throws ExtractException {
        List<DownloadInfo> m20468 = f19761.m20468(str);
        if (m20468 == null || m20468.isEmpty()) {
            return null;
        }
        int i = 0;
        while (true) {
            int i2 = i;
            if (i2 >= m20468.size()) {
                return m20468;
            }
            if (!m20457(m20468.get(i2))) {
                m20468.remove(i2);
                i2--;
            }
            i = i2 + 1;
        }
    }

    private boolean m20457(DownloadInfo downloadInfo) {
        if (downloadInfo.getSize() > 0) {
            return true;
        }
        DownloadPartInfo downloadPartInfo = downloadInfo.getPartList().get(0);
        try {
            Long m20622 = cfq.m20622(downloadPartInfo.getUrlList().get(0), false, cfq.m20626((String) null, "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"));
            if (m20622 == null) {
                return false;
            }
            downloadPartInfo.setSize(m20622.longValue());
            return true;
        } catch (IOException e) {
            cfm.m20599("request video size failure. " + downloadPartInfo.getUrlList().get(0), e);
            return false;
        }
    }

    public static class C0377 {
        private static final Map<String, AbstractC0378> f19763 = new HashMap();

        public C0377() {
            f19763.put("s3.animeflv.com", new Cif());
            f19763.put("www.rapidvideo.com", new C0379());
        }

        public List<DownloadInfo> m20468(String str) throws ExtractException {
            String m20619 = cfo.m20619(str);
            if (f19763.containsKey(m20619)) {
                try {
                    return f19763.get(m20619).m20469(str);
                } catch (IOException e) {
                    cfm.m20600(e, "get download info failed, url : %s", str);
                    return null;
                }
            }
            return null;
        }
    }

    public static abstract class AbstractC0378 {
        abstract void mo20464(String str, List<DownloadInfo> list) throws IOException, ExtractException;

        AbstractC0378() {
        }

        List<DownloadInfo> m20469(String str) throws IOException, ExtractException {
            LinkedList linkedList = new LinkedList();
            mo20464(str, linkedList);
            return linkedList;
        }
    }

    public static class Cif extends AbstractC0378 {
        private static final Pattern f19762 = Pattern.compile("\\$\\.get\\('(.*?)',");

        Cif() {
        }

        @Override
        void mo20464(String str, List<DownloadInfo> list) throws IOException, ExtractException {
            if (str.contains("direct.php")) {
                String m20616 = cfo.m20616(str);
                list.add(cfk.m20586(" MP4", "mp4", str, m20616.substring(m20616.indexOf("=") + 1), 0L));
                return;
            }
            String m20462 = m20462(str);
            if (str.contains("embed.php")) {
                C0376.m20467("http://s3.animeflv.com/" + m20462, list);
            } else if (str.contains("embed_hyperion.php")) {
                C0375.m20466("http://s3.animeflv.com/" + m20462, list);
            } else if (str.contains("efire.php")) {
                C0374if.m20465(m20462, list);
            } else {
                throw new ExtractException("s3 animeflv url not support(only support https://s3.animeflv.com/embed_hyperion.php? or https://s3.animeflv.com/embed.php?) : " + str);
            }
        }

        private String m20462(String str) throws IOException, ExtractException {
            String m20624 = cfq.m20624(str, cfq.m20626("http://animeflv.net/", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"));
            Matcher matcher = f19762.matcher(m20624);
            if (!matcher.find()) {
                throw new ExtractException("extracted failed, the s3.animeflv.com source page maybe had been changed;" + m20624);
            }
            return matcher.group(1);
        }

        public static String m20463(JSONObject jSONObject, String str) throws ExtractException {
            try {
                return jSONObject.getString("error");
            } catch (JSONException e) {
                throw new ExtractException("s3.animeflv.com url api parse json failed. response json is  : " + str, e);
            }
        }

        static class C0376 {
            C0376() {
            }

            static void m20467(String str, List<DownloadInfo> list) throws IOException, ExtractException {
                String m20624 = cfq.m20624(str, cfq.m20626("http://animeflv.net", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"));
                JSONObject jSONObject = null;
                try {
                    JSONObject jSONObject2 = new JSONObject(m20624);
                    try {
                        list.add(cfk.m20586("MP4", "mp4", str, jSONObject2.getString("file"), 0L));
                    } catch (JSONException e) {
                        e = e;
                        jSONObject = jSONObject2;
                        if (jSONObject != null) {
                            Cif.m20463(jSONObject, m20624);
                            return;
                        }
                        throw new ExtractException("json parsed failed", e);
                    }
                } catch (JSONException e2) {
                    e = e2;
                }
            }
        }

        static class C0375 {
            C0375() {
            }

            static void m20466(String str, List<DownloadInfo> list) throws IOException, ExtractException {
                String m20624 = cfq.m20624(str, cfq.m20626("http://animeflv.net", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"));
                JSONObject jSONObject = new JSONObject(m20624);
                try {
                    JSONArray jSONArray = jSONObject.getJSONArray("streams");
                    for (int i = 0; i < jSONArray.length(); i++) {
                        String string = jSONArray.getJSONObject(i).getString("file");
                        String string2 = jSONArray.getJSONObject(i).getString(ReportUtil.JSON_KEY_LABEL);
                        String m20629 = cfq.m20629(string);
                        if (!m20629.equals(string)) {
                            list.add(cfk.m20586(string2, "mp4", str, m20629, 0L));
                        }
                    }
                    list.add(cfk.m20586("Default", "mp4", str, jSONObject.getString("direct"), 0L));
                } catch (JSONException e) {
                    Cif.m20463(jSONObject, m20624);
                }
            }
        }

        static class C0374if {
            C0374if() {
            }

            static void m20465(String str, List<DownloadInfo> list) throws IOException, ExtractException {
                list.add(cfk.m20586("MP4", "mp4", str, cfl.m20596((Element) Jsoup.parse(cfq.m20624(str, cfq.m20626("http://s3.animeflv.com", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"))), "div.download_link > a", "href"), 0L));
            }
        }
    }

    static class C0379 extends AbstractC0378 {
        private static final Pattern f19764 = Pattern.compile("<a\\shref=\"(https.*?www\\.rapidvideo\\.com.*?&q=\\w+)");
        private static final Pattern f19765 = Pattern.compile("&q=(\\w+)");

        C0379() {
        }

        @Override
        void mo20464(String str, List<DownloadInfo> list) throws IOException, ExtractException {
            String m20472 = m20472(str, list);
            String m20471 = m20471(str);
            if (m20471 != null) {
                m20470(m20472, m20471, list);
            }
        }

        private String m20471(String str) {
            Matcher matcher = f19765.matcher(str);
            if (matcher.find()) {
                return matcher.group(1);
            }
            return null;
        }

        private void m20470(String str, String str2, List<DownloadInfo> list) throws IOException {
            Matcher matcher = f19764.matcher(str);
            while (matcher.find()) {
                String group = matcher.group(1);
                if (!group.contains("&q=" + str2)) {
                    m20472(group, list);
                }
            }
        }

        private String m20472(String str, List<DownloadInfo> list) throws IOException {
            String m20624 = cfq.m20624(str, cfq.m20626("url", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"));
            Elements select = Jsoup.parse(m20624).select("#videojs > source");
            if (select.isEmpty()) {
                return m20624;
            }
            Element element = select.get(0);
            String absUrl = element.absUrl("src");
            list.add(cfk.m20586("MP4 " + element.attr("title"), cfq.m20632(absUrl), str, absUrl, 0L));
            return m20624;
        }
    }
}