eConti - программирование в вопросах и ответах

Загрузка файла MP4 в Java?

Я пытаюсь создать программу Java, которая загружает видео с определенного веб-сайта с помощью JSoup. Однако теперь я понял, что JSoup не может загружать файлы mp4; они не поддерживаются. В настоящее время он у меня есть, поэтому он подключается к веб-сайту, захватывает ссылку IFrame, которая получает ссылку для загрузки, которая хранится на другом веб-сайте, а затем получает прямую ссылку для загрузки с сервера. Теперь я не могу понять, как на самом деле скачать файл. Я все еще новичок в Java, поэтому я не знаю, как использовать запросы Https или утилиты File.IO для загрузки файлов таким образом. Я посмотрел несколько примеров, но ни один из них, похоже, не работал для меня. Я также пытался использовать Apache Commons IO, но не смог добавить его в качестве библиотеки; всякий раз, когда я переходил к «Добавить файлы или каталоги», файлы .Java не отображались (я также пробовал «Выбрать тип библиотеки»), и это не позволяло мне перетаскивать файлы. В любом случае, я не знаю, что еще делать, поэтому я публикую это. Любая помощь будет оценена, спасибо!

Вот мой текущий код:

package com.trentmenard;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.io.IOException;


class ExtractorAndDownloader {
    private String URL;
    private Document currentWebsite;

    ExtractorAndDownloader(String URL) {
        this.URL = URL;
        getIFrameLink(URL);
    }

    private void getIFrameLink(String URL) {
        System.out.println("Attempting Connection to: " + URL);
        try {
            currentWebsite = Jsoup.connect(URL).get();
            System.out.println("Connection Successfully Established!");
            Element iFrame = currentWebsite.selectFirst("iframe");
            String iFrameLink = iFrame.attr("src");
            System.out.println("Grabbing IFrame Link: " + iFrameLink);
            getDownloadLink(iFrameLink);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Connection Failed!");
        }
    }

    private void getDownloadLink(String URL) {
        System.out.println("Attempting Connection to: " + URL);
        try {
            currentWebsite = Jsoup.connect(URL).get();
            System.out.println("Connection Successfully Established!");
            Element hiddenElementID = currentWebsite.getElementById("id");
            String hiddenElementIDValue = hiddenElementID.attr("value");
            System.out.println("Grabbing Hidden Element ID Value: " + hiddenElementIDValue);
            System.out.println("Grabbing ReDirect Link: " + " https://www.vidstreaming.io/download?id=" + hiddenElementIDValue);
            getReDirectDownloadLink("https://www.vidstreaming.io/download?id=" + hiddenElementIDValue);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Connection Failed!");
        }
    }

    private void getReDirectDownloadLink(String URL) {
        System.out.println("Attempting Connection to: " + URL);
        try {
            currentWebsite = Jsoup.connect(URL).get();
            System.out.println("Connection Successfully Established!");
            Element dowloadClassOriginal = currentWebsite.getElementsContainingOwnText("Download (orginalP - mp4)").first();
            String dowloadClassOriginalReDirectLink = dowloadClassOriginal.attr("href");
            System.out.println("Grabbing ReDirect Link: " + dowloadClassOriginalReDirectLink);
            downloadUsingDirectLink(dowloadClassOriginalReDirectLink);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Connection Failed!");
        }
    }

    private void downloadUsingDirectLink(String URL) {
        System.out.println("Attempting Connection to: " + URL);
        try{
            currentWebsite = Jsoup.connect(URL).get();
            System.out.println("Connection Successfully Established!");
        }
        catch (IOException e){
            e.printStackTrace();
            System.out.println("Connection Failed!");
        }

    }
}

И вот сообщение об ошибке, в котором говорится, что это неподдерживаемый файл:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar=61448:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Trent\Desktop\SAOEpisodeDownloader\out\production\SAOEpisodeDownloader;C:\Users\Trent\Downloads\jsoup-1.12.1.jar" com.trentmenard.Main
Attempting Connection to: https://swordartonlineepisode.com/sword-art-online-season-3-episode-1-english-dubbed-watch-online/
Connection Successfully Established!
Grabbing IFrame Link: https://vidstreaming.io/streaming.php?id=MTEzMzQ1
Attempting Connection to: https://vidstreaming.io/streaming.php?id=MTEzMzQ1
Connection Successfully Established!
Grabbing Hidden Element ID Value: MTEzMzQ1
Grabbing ReDirect Link:  https://www.vidstreaming.io/download?id=MTEzMzQ1
Attempting Connection to: https://www.vidstreaming.io/download?id=MTEzMzQ1
Connection Successfully Established!
Grabbing ReDirect Link: https://st1x.cdnfile.info/user1342/1f1b04321e51fac1c1d1c23a1de4f7f0/EP.1.mp4?token=QPVm8x5GnYo6uFYLHqfjwg&expires=1578391941&id=113345&title=(orginalP - mp4) Sword+Art+Online%3A+Alicization+%28Dub%29+Episode+1
Attempting Connection to: https://st1x.cdnfile.info/user1342/1f1b04321e51fac1c1d1c23a1de4f7f0/EP.1.mp4?token=QPVm8x5GnYo6uFYLHqfjwg&expires=1578391941&id=113345&title=(orginalP - mp4) Sword+Art+Online%3A+Alicization+%28Dub%29+Episode+1
org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml. Mimetype=video/mp4, URL=https://st1x.cdnfile.info/user1342/1f1b04321e51fac1c1d1c23a1de4f7f0/EP.1.mp4?token=QPVm8x5GnYo6uFYLHqfjwg&expires=1578391941&id=113345&title=(orginalP%20-%20mp4)%20Sword+Art+Online%3A+Alicization+%28Dub%29+Episode+1
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:770)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:705)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:295)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:284)
    at com.trentmenard.ExtractorAndDownloader.downloadUsingDirectLink(ExtractorAndDownloader.java:68)
    at com.trentmenard.ExtractorAndDownloader.getReDirectDownloadLink(ExtractorAndDownloader.java:58)
    at com.trentmenard.ExtractorAndDownloader.getDownloadLink(ExtractorAndDownloader.java:43)
    at com.trentmenard.ExtractorAndDownloader.getIFrameLink(ExtractorAndDownloader.java:27)
    at com.trentmenard.ExtractorAndDownloader.<init>(ExtractorAndDownloader.java:16)
    at com.trentmenard.Main.main(Main.java:7)
Connection Failed!

Process finished with exit code 0
07.01.2020

Ответы:


1

Вы можете попробовать это

private static void getVideo(String src) throws IOException {

    String folder = null;

    //Exctract the name of the video from the src attribute
    int indexname = src.lastIndexOf("/");

    if (indexname == src.length()) {
        src = src.substring(1, indexname);
    }

    indexname = src.lastIndexOf("/");
    String name = src.substring(indexname, src.length());

    System.out.println(name);

    //Open a URL Stream
    URL url = new URL(src);
    InputStream in = url.openStream();
    OutputStream out = new BufferedOutputStream(new FileOutputStream( folderPath+ name));
    for (int b; (b = in.read()) != -1;) {
        out.write(b);
    }
    out.close();
    in.close();
}

Источник: https://examples.javacodegeeks.com/enterprise-java/html/download-images-from-a-website-using-jsoup/

07.01.2020
  • Он сказал, что не может разрешить символ для переменной folderPath, поэтому я сделал ее локальной строковой переменной с путем к моему рабочему столу. Это исправило исходное сообщение об ошибке, но затем я получаю сообщение об ошибке File Not Found Exception. Разве это не то, что я должен указать для пути к папке? Код: pastebin.com/w8vV0pCP 07.01.2020
  • Для исключения «Файл не найден» FileOutputStream выдает эту ошибку, если файл не существует или не может быть создан. Чтобы убедиться, что вы, вероятно, должны сначала проверить, что файл существует, прежде чем создавать FileOutputStream (и создать с помощью createNewFile(), если это не так) File yourFile = new File("score.txt"); if(!yourFile.exists()) { yourFile.createNewFile(); } FileOutputStream oFile = new FileOutputStream(yourFile, false); [ссылка] docs.oracle.com/javase/6/docs/api/java /io/ 08.01.2020
  • Новые материалы

    ИИ для общего блага, часть вторая
    В нашем последнем блоге мы исследовали возможности ИИ для общего блага, указав на несколько инициатив по поиску действенных решений для продвижения справедливых и беспристрастных систем ИИ. По..

    Время расцвета закончилось
    Большую часть своей карьеры в индустрии программного обеспечения программисты работали с головой в песок. Успех в отрасли требует навыков презентации и обучения других. Ценность улучшенных..

    Будущее сельского хозяйства: новый уровень производительности с современными технологиями
    По мере роста населения мира растет и спрос на продукты питания. Фермеры сталкиваются с растущим давлением необходимости повышать урожайность и максимизировать производительность, манипулируя..

    Состояние совместной фильтрации в 2022 году, часть 1
    ResBeMF: Улучшение прогнозируемого охвата совместной фильтрации на основе классификации (arXiv) Автор: Анхель Гонсалес-Прието , Авраам Гутьеррес , Фернандо Ортега , Рауль Лара-Кабрера..

    Зачем изучать PYTHON в 2022 году !
    Python — востребованный, доступный язык программирования с активным, постоянно растущим сообществом пользователей. Для тех, кто хочет сменить профессию в мире технологий с помощью..

    Решение капч с помощью Puppeteer
    Это руководство предназначено для текстовых кодов, а не для reCAPTCHA Google (см. конец этого сообщения). Требования: Антикапча или любой другой сервис по разгадыванию капчи. Модуль..

    7 встроенных библиотек Python, которые необходимо знать
    7 встроенных библиотек Python, которые необходимо знать Стандартная библиотека Python значительно упрощает жизнь программистов, предоставляя широкий набор функций. Мы выбираем несколько..