2016-05-19 17 views
1

今、私はウェブサイトのソースコードの中から見つけたURLから見つかった写真を撮ろうとしているGUIプロジェクトに取り組んでいます。それらを私のJavaFx GUIにロードしてください。 たとえば、Javaでウェブサイトhttp://www.imdb.com/movies-in-theaters/?ref_=nv_tp_inth_1を読み込み、画像のサイズに関係なくページを下にスクロールするときに表示されるすべての「カバー写真」/サムネイルを収集してから、 GUIビュー(たとえば、ImageViewsの束としてのHBoxに)。ウェブサイトから写真を撮ってJavaFXに読み込む

最終的には、ユーザーがimage/imageviewをクリックして、選択したムービーの予告編が表示されるようにしたいと思っています。 (私の考えは、あなたがクリックして次のページに行き、リンクを見つけて、YouTubeに行って、ビデオプレーヤー以外のすべてのコンテンツを必ず削除した場合、トレーラーリンクがウェブサイトから見つかるということです)。

私が使用しているWebブラウザでは、ページのHTML要素/デザインを見て、すべてのソースコードを調べます。ほんの数回の回転の後で、私が探しているサムネイル/画像への直接URLを簡単に見つけることができます。javaFXでGUIにURLとして画像をロードすることができます。

Image img = new Image("http://website/websiteSubPage/websiteImage"); 
ImageView imgView = new ImageView(img); 

私が探しているもののコンセプトはWebScrapingと呼ばれています...しかし、私が調べて、これまでに研究したモジュールはすべて、私が必要とするものを手助けしていません。これまでに私が見つけた最も近いモジュールは、HtmlUnitです。しかし、HtmlUnitはすべてWebオートメーションに関するもので、写真を見つけてJava Imageオブジェクトとして読み込むことはできません。ImageViewに呼び出すことができます。

現時点では、JavaがバックグラウンドでWebサイトをロードし、ソースコードを収集してから、文字列マニピュレータを作成することができます。検出したすべての画像のURLをImageViewsでいっぱいになったHBoxに入れます。 ...、私は恐ろしく間違って何かをやっているように私は感じさせるこのすべてをやって、しかし

public HBox listView(){ 
    HBox temp = new HBox(); 
    // Load the website 
    // Load the source code into a large string. 
    for (int i=0; i>=<numberOfPhotosPreCalculatedSomeHow>;i++){ 
     Image img = new Image(/*Manipulated string algorithm to find the next image URL*/); 
     ImageView imgView = new ImageView(img); 
     ImageView.setOnAction(e -> { /* load the trailer */ }; } // (Lambda) 
     temp.getChildren().add(ImageView); 
    } 
return temp; 
} 

と私はいくつかの助けが必要:

最終的に、私は私の唯一の解決策は、次のようになりますように感じます。

思考?これのために特別に構築されたモジュールまたはプラグインはありますか?これは可能なのか、それとも単にばかなのか?

答えて

1

答えを見つけました! Webサイトの情報をスキャンし、必要に応じて解読できるようにする組み込みのJavaメソッドがあります。私の場合は

は、ここで私が使用したコードは次のとおりです。

import java.io.IOException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Scanner; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 

public class WebReader extends Application{ 
    // Class variable to hold our found URLs :) 
    static ArrayList<String> listArray; 

    public static void main(String[] args) throws IOException { 
     // Gather page & URL data, and read it 
     String address = "http://reddit.com"; 
     URL pageLocation = new URL(address); 
     Scanner in = new Scanner(pageLocation.openStream()); 
     // Initialize an ArrayList to store all of our collected URLs 
     listArray = new ArrayList<String>(); 
     // Decipher the code line by line 
     while (in.hasNext()) { 
      String line = in.next(); 
      if (line.contains("href=\"http://")) { 
       int from = line.indexOf("\""); 
       int to = line.lastIndexOf("\""); 
       System.out.println(line.substring(from + 1, to)); 
       listArray.add(line.substring(from + 1, to)); 
      } 
     } 

     // Next, we implement into JavaFx 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("My loaded photos"); 
     // Create a place to put our content 
     HBox content = new HBox(); 
     ScrollPane scrollPane = new ScrollPane(content); 
     scrollPane.setFitToHeight(true); 
     System.out.println(listArray.size()); 
     for (int i = 0; i <= listArray.size() - 1; i++) { 
      Image img = new Image(listArray.get(i)); 
      ImageView imgView = new ImageView(img); 

      content.getChildren().add(imgView); 
     } // Launch and sail away!! :) 

     Scene s = new Scene(scrollPane, 800, 600); 
     primaryStage.setScene(s); 
     primaryStage.show(); 
    } 
} 

だからこれは私が、私はそれが解決策を見つけるために私にそう長くかかった信じることができないfind--することができたソリューションでしたが、私はこれが私と同じボートにいる人に役立つことを願っています。 :)

関連する問題