Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

JavaFXでYouTubeのダウンローダ的なサンプルを作ってみる

今や便利なダウンロードツールが色々あるので、作る意味はあまりないのですが、JavaYouTube動画とか取るには…と探したらライブラリがあったので、JavaFXと合わせてみました(^^;

注意
ちなみにYouTubeの動画をダウンロードすること自体、本来は(自分の著作物を上げた場合以外は)いけないことですね;利用規約はこちら。「5. お客様によるサイト上のコンテンツの使用」の部分です。
http://www.youtube.com/static?template=terms&hl=ja&gl=JP

その他の参考
http://ihoudownload.chosakuken-kouza.com/q/q2.html

というわけで、今回のブログ、不適切だったら後で削除するかも…です。

ちなみにJavaYouTubeをダウンロードする、で調べたら海外にわんさか(^^;
自分が参考にしたのは

How to download videos from youtube on java?

でした。で、回答の1つに「vget」なるライブラリがあって簡単そうだったので使ってみました。

https://github.com/axet/vget

このライブラリの内部では他のライブラリを使っているようで、Maven使うのが楽そうです。

で、NetBeans7.3.1を使っていたのですが、MavenのメニューにJavaFXがない!とつぶやいたら@sk44_さんと@aoetkさんからNetBeans7.4から使えます、と教えて頂きました。
というわけで7.4RC1入れていたので(今はもうRC2出てますが)やってみたところ

f:id:kikutaro777:20131014234914j:plain

あった!やったー(^^)/

ということで、MavenJavaFXプロジェクト作りました。

このvgetというライブラリ、URLがわかればダウンロードできるので、JavaFXのWebView使ってURLを取るようにしただけの雑なサンプルです(^^;

起動するとYouTubeのトップを表示するようにして、検索して目的の動画へ。
自分の著作物であげたものがないので…一時的に堀北さんのCMを試してみました。

f:id:kikutaro777:20131014233457j:plain

ダウンロードボタンを押してしばらくするとwebm形式のファイルを取得。

f:id:kikutaro777:20131014234132j:plain

実行するとこんな感じ!取れてる!

f:id:kikutaro777:20131014234103j:plain

コードは超適当ですが、こんなんで動いてます。
ちなみにViewのFXMLはWebViewとVBox、Buttonだけです。

package maki.makimakidownloader;

import com.github.axet.vget.VGet;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class MakiMakiDownloaderController implements Initializable {
    
    @FXML
    private WebView webView;
    
    private WebEngine webEngine;
    
    @FXML
    private void handleBtnDownloadAction(ActionEvent event) {
        try {
            URL downloadUrl = new URL(webEngine.getLocation());
            VGet vget = new VGet(downloadUrl, new File("D:\\movie\\horikita"));
            vget.download();
        } catch (MalformedURLException ex) {
            System.out.println(ex.getMessage());
        }
    }
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        webEngine = webView.getEngine();
        webEngine.load("http://www.youtube.com/?gl=JP&hl=ja");
    }    
}

真面目に作るなら欲しい機能として

  • ダウンロード中はプログレスバーを表示
  • 落とせない形式(があるっぽい)の場合にはメッセージダイアログを表示
  • 非同期で複数ダウンロードできるようにする

などなど(^^;他にもあるよなぁ。

先日のマキマキビューアも途中だけど、これも真面目に作ってみようかな。って個人で楽しむためのツールですが。

てか、最近JavaFXネタが増えつつある(^^;

Java EEは仕事でガッツリ開発入って今まで使ってないようなものを触らないと中々書くことがない今日この頃。もっとガッツリ開発したいなぁ。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村