با سلام..این برنامه (دانلود از یوتیوب)کار نمیکنه و در همه حالات error که در کد ذکر شده رو برمیگردونه؟؟؟ لطفا کمک

0 امتیاز
53 بازدید
سوال شده 9 فروردین 1399 توسط b7b  
package youtubedownloader;

import javafx.application.Application;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.text.Font;
import javafx.scene.control.ProgressBar;
import javafx.stage.Stage;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;


public class youtubedownloader extends Application {

    private Button downloadBtn = new Button();
    private TextField youtubeUrlField = new TextField();
    private TextField fileName = new TextField();
    private Label label1 = new Label();
    private Label label2 = new Label();
    private Label about = new Label("Created and Developed by SB");
    private ProgressBar pbar = new ProgressBar(0);
    private URL downloadURL;


    @Override
    public void start(Stage primaryStage) throws Exception{


        Font arial = new Font("arial", 16);
        Font arial1 = new Font("arial1", 13);


        downloadBtn.setText("Download");
        downloadBtn.setFont(arial);
        downloadBtn.setLayoutX(10);
        downloadBtn.setLayoutY(200);

        youtubeUrlField.setFont(arial); youtubeUrlField.setLayoutX(10);
        youtubeUrlField.setLayoutY(80);
        youtubeUrlField.setPrefColumnCount(23);
        fileName.setFont(arial);
        fileName.setLayoutX(10);
        fileName.setLayoutY(150);
        fileName.setPrefColumnCount(23);
        label1.setFont(arial);
        label1.setText("Youtube URL");
        label1.setLayoutX(10);
        label1.setLayoutY(50);
        label2.setFont(arial);
        label2.setText("File Name (Optional)");
        label2.setLayoutX(10);
        label2.setLayoutY(120);
        pbar.setVisible(false);
        pbar.setPrefWidth(350);

        pbar.setLayoutX(100); pbar.setLayoutY(200);
        about.setFont(arial1);
        about.setLayoutX(20);
        about.setLayoutY(260);

        downloadBtn.setOnAction((ActionEvent event) -> {
            sendHTTPRequest.restart(); });

        sendHTTPRequest.setOnSucceeded((WorkerStateEvent we) -> { try { downloadURL = new URL(getURLS(sendHTTPRequest.getValue()));
            pbar.progressProperty().unbind();
            pbar.setProgress(0);
            pbar.progressProperty().bind(VideoDownload.progressProperty());
            pbar.setVisible(true);
            VideoDownload.restart(); } catch (MalformedURLException ex) { Alert msg = new Alert(Alert.AlertType.INFORMATION);
            msg.setTitle("Message from Youtube Downloader");
            msg.setContentText("Invalid Url");
            msg.showAndWait(); } });

        VideoDownload.setOnSucceeded((WorkerStateEvent we) -> { boolean val = VideoDownload.getValue();
            System.out.println(val);
            if (val) { Alert msg = new Alert(Alert.AlertType.INFORMATION);
                msg.setTitle("Message from Youtube Downloader");
                msg.setContentText("Download complete");
                msg.showAndWait(); } else { Alert msg = new Alert(Alert.AlertType.INFORMATION);
                msg.setTitle("Message from Youtube Downloader");
                msg.setContentText("Download Failed");
                msg.showAndWait(); }
            pbar.setVisible(false);
        });

        Group root = new Group(); root.getChildren().add(downloadBtn);
        root.getChildren().add(youtubeUrlField);
        root.getChildren().add(fileName);
        root.getChildren().add(label1);
        root.getChildren().add(label2);
        root.getChildren().add(pbar);
        root.getChildren().add(about);
        Scene scene = new Scene(root, 500, 280);
        primaryStage.setTitle("Youtube Downloader");
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    private String getVideoID(String url) { int index = url.indexOf("v=");
        index += 2;
        String id = new String();
        for (int i = index; i < url.length(); i++)  id+= url.charAt(i);
        return id;
    }

    final private Service< StringBuilder > sendHTTPRequest = new Service < StringBuilder > () {
        @Override
        protected Task< StringBuilder > createTask() { return new Task < StringBuilder > () {
            @Override
            protected StringBuilder call() { String response;
                StringBuilder res = new StringBuilder();
                StringBuilder refinedres = new StringBuilder();
                try { URL url = new URL("https://www.youtube.com/get_video_info?&video_id=" + getVideoID(youtubeUrlField.getText())); System.out.println(url.toString());
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET");
                    System.out.println(conn.getResponseMessage());
                    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); while ((response = in .readLine()) != null) res.append(response); refinedres.append(URLDecoder.decode(URLDecoder.decode(res.toString(), "UTF-8"), "UTF-8")); in .close(); return refinedres; } catch (MalformedURLException ex) {} catch (IOException ex) {}
                return null;
            }
        };
        }
    };

    Service < Boolean > VideoDownload = new Service < Boolean > () {
        @Override
        protected Task < Boolean > createTask() { return new Task < Boolean > () {
            @Override
            protected Boolean call() throws Exception { long length;
                boolean completed = false;
                int count = 0;
                try (BufferedInputStream bis = new BufferedInputStream(downloadURL.openStream()); FileOutputStream fos = new FileOutputStream(fileName.getText().length() == 0 ? "video.mp4" : fileName.getText().concat(".mp4"))) { length = downloadURL.openConnection().getContentLength();
                    int i = 0;
                    final byte[] data = new byte[1024];
                    while ((count = bis.read(data)) != -1) { i += count;
                        fos.write(data, 0, count);
                        updateProgress(i, length); }
                    completed = true; } catch (IOException ex) {}
                return completed;
            }
        };
        }
    };

    private String getURLS(StringBuilder response) { StringBuilder temp1 = new StringBuilder();
        String[] temp2, temp3, temp4;
        try { int index = response.indexOf("url_encoded_fmt_stream_map");
            for (int i = index; i < response.length(); i++) { temp1.append(response.charAt(i)); }
            temp2 = temp1.toString().split("&url=");
            if (temp2.length > 0) { temp3 = temp2[1].split(";");
                if (temp3.length > 0) { temp4 = temp3[0].split(",");
                    if (temp4.length > 0) return temp4[0];
                    else return temp3[0]; } else return temp2[1]; } } catch (Exception e) { Alert msg = new Alert(Alert.AlertType.INFORMATION);
            msg.setTitle("Message form youtube Downloader");
            msg.setContentText("Error in downloading");
            msg.showAndWait(); }
        return null;
    }



    public static void main(String[] args) {
        launch(args);

}

}

این مطلب را به اشتراک بگذارید

1 پاسخ

0 امتیاز
پاسخ داده شده 11 فروردین 1399 توسط ASHKARAN  
سلام

فیلتر شکن دارید؟
دارای دیدگاه 13 فروردین 1399 توسط b7b  
سلام...در کد هیج اروری وحود نداره یا حداقل اینتلی جی هیج اروری نمیده... اما هر آدرسی رو که میذارم همون ارور رو میده
دارای دیدگاه 14 فروردین 1399 توسط ASHKARAN  

event

setOnSucceeded

مال وقتیه که همه چی درسته....

اما همینجا شما لاگ گذاشتی که مشکل هست....

اشتباه از شماست، کد مشکلی نداره

دارای دیدگاه 14 فروردین 1399 توسط b7b  
ویرایش شده 14 فروردین 1399 توسط b7b

یا سلام و تشکر از اینکه وقت کذاشتین: اول یو آر ال رو از یوتیوب بطور کامل کپی میکنم و بعد در قسمت مربوطه پیست میکنم... بعد از اون اول این ارور رو میگیرم:

msg.setContentText("Error in downloading");

:و بعد ازاینکه اوکی رو کلیک میکنم ارور:

msg.setContentText("Invalid Url");

از کمکتون نهایت تشکر رو دارم.

دارای دیدگاه 23 فروردین 1399 توسط b7b  
دوستان لطفا اگر کسی ایده ای داره کمک کنید...
دارای دیدگاه 27 اردیبهشت 1399 توسط b7b  
دوستان لطفا اگر کسی چیزی به نظرش میرسه کمک

1,050 سوال

868 پاسخ

1,382 دیدگاه

1,399 کاربر

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...