Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
JavaLink in einer Gui eingeben/Bild downloaden/Verzeichnis wählen?
Ich möchte mir mein leben etwas vereinfachen und mir eine GUI schreiben, in der ich Links sammeln kann und diese downloadet mir dann die Bilddateien. Es handelt sich ausschließlich um direkte Links zu einer Bilddatei!
Wie kann ich aber diese Bilder downloaden/speichern und wie wähle programmiere ich einen Button, mit dem man sagen kann, ich möchte die Datei da speichern?
Ich würde das ganze erstmal gerne Konsolenbasiert umsetzten und mich danach an eine GUI machen.
Da du keinerlei Auskunft gibst, auf welchem Wissensstand du bist und auch keinen eigenen Code postest, wo du es schon versucht hast, kann man dir (abgesehen von der Lösung), nicht besser helfen.
Aber ich programmiere in der Schule und das schon seit einem Jahr.
Jetzt sogar im Leistungskurs. Beherrsche schon Objektorientiert und alles was dazu gehört.
Fangen jetzt mit Sortieralgorhytmen an. Hatten wir aber schon mal kurz in dem Jahr davor.
Ergänzung ()
Jetzt mal was zum Code, denn ich schreiben möchte.
Wird wohl doch nicht so einfach, wie ich dachte.
Ich lade manchmal Musik von Soundcloud herunter und die haben auch immer schön zu jedem Song ein Cover
Ich wollte jetzt ein Programm schreiben, welches mir das Cover speichert, wenn ich den Link eingebe.
Sonst muss ich immer über F12 - Element Untersuchen um die JPG Datei zu bekommen gehen, das nervt nach einer Zeit.
Hat jemand eine Idee, wie ich das Umsetzten kann?
Jedes Lied muss ja eine eindeutige ID haben, womit man auch das Cover finden müsste...
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class GetImageURL
{
public static void main(String args[]) throws IOException
{
Document doc = Jsoup.connect("https://soundcloud.com/ivoryoasis/kiso-hvar-ft-msp").get();
Elements imgs = doc.select("img"); // http://jsoup.org/cookbook/extracting-data/selector-syntax
//Elements imgs = doc.select("img[itemprop=image]");
//Elements imgs = doc.select("img[src~=i1.sndcdn.com]");
//Elements imgs = doc.select("img[width=500]");
//Elements imgs = doc.select("img[src$=.jpg]");
System.out.println("--- HTML ---------------");
for (Element e : imgs) System.out.println(e.outerHtml());
System.out.println("--- SRC ----------------");
for (Element e : imgs) System.out.println("SRC= " + e.attr("src"));
System.out.println("------------------------");
System.out.println("FIRST: " + imgs.first().attr("src"));
}
}
Obiger Code extrahiert alle "img"-Tags (es sind nur 2) und zeigt sie an.
Wenn Du in obigen Code eine der auskommentierten Zeilen einkommentierst bekommst Du jeweils nur Deinen einen gewünschten Link zu Deinem Bild.
Im einfachsten Fall sieht das Programm z.B. so aus:
Code:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class GetImageURL
{
public static void main(String args[]) throws IOException
{
Document doc = Jsoup.connect("https://soundcloud.com/ivoryoasis/kiso-hvar-ft-msp").get();
Elements imgs = doc.select("img[itemprop=image]"); // http://jsoup.org/cookbook/extracting-data/selector-syntax
System.out.println("FIRST: " + imgs.first().attr("src"));
}
}
Damit das ganze funktioniert, musst Du die Datei "jsoup-1.8.3.jar" von http://jsoup.org/download runterladen und einbinden. Wie das Einbinden funktioniert hängt von Deiner Entwicklungsumgebung ab...
Jetzt muss ich es noch so programmieren, dass das Programm auch Variabel ist und nicht nur dieser eine Link.
BEHOBEN!
Ergänzung ()
Wo liegt mein Fehler...?
Habe es bisher Konsolenbasiert.
Wollte das Programm so ablaufen lassen, dass es immer "hört" und das eingegeben zur ArrayList hinzufügt.
Wenn man dann den Befehl "-save" eingibt, sollen alle Links zu den Bildern ausgegeben werden. Doch irgendwie geht es nicht..
Console.readln() ist aus dem ConsolenPackage und liest die Eingabe auf der Konsole!
Bevor ich es modifiziert habe, lief es!
Link in die Zeile "Jsoup.connect(LINK).get()" und dann spuckte er mir den Link aus!
main:
Code:
package de.parser.jan;
import java.io.IOException;
import java.util.ArrayList;
import support.Console;
public class main {
public static void main(String[] args) throws IOException {
System.out.println("-Soundcloud IMG Saver-");
System.out.println("Geben sie ihre Links ein!");
System.out.println();
ArrayList<String> linkList = new ArrayList<String>();
String help = new String("-help");
String save = new String("-save");
String print = new String("-print");
while(true){
String input = new String(Console.readln());
if(input.startsWith("-", 0)){
if(input.equalsIgnoreCase(help))
System.out.println("-save = Speichert alle Bilder der eingegebenen Links");
if(input.equalsIgnoreCase(save))
GetImageURL.getImg(linkList);
if(input.equalsIgnoreCase(print))
for(int i = 0; i < linkList.size(); i++){
Console.println(linkList.get(i));
}
}else{
linkList.add(Console.readln());
}
}
}
}
GetImageURL:
Code:
package de.parser.jan;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import support.Console;
import java.io.IOException;
import java.util.ArrayList;
public class GetImageURL
{
public static void getImg(ArrayList<String> linkList) throws IOException
{
for(int i = 0; i < linkList.size(); i++){
Document doc = Jsoup.connect(linkList.get(i)).get();
Elements imgs = doc.select("img[itemprop=image]"); http://jsoup.org/cookbook/extracting-data/selector-syntax
System.out.println("FIRST: " + imgs.first().attr("src"));
//return imgs.first().attr("src");
}
}
}
Ergänzung ()
Hab den Fehler, musste ganz unten in der add methode (Console.readln()); durch (input); ersetzen!
Ich denke es ist vernünftiger, die Methode "getImg(ArrayList<String> linkList)" in die Klasse "main" zu verschieben (und im Ergebnis nur eine Klasse, nämlich "main" zu haben), anstatt wie oben mit zwei Klassen zu arbeiten...
(Statische) Klassen und Objektorientierung sind zwei paar Schuhe.
Objektorientierung wäre, wenn du z.B. eine Klasse Image erstellt, der du Konstruktor einen string übergeben kannst und die eine Methode getImg() hat.
Mann muss aber nicht alles durch die objektorientierte Brille sehen. Schönes Beispiel mit und ohne.
Wie kann ich den mit dem Scanner überprüfen, ob in der nächsten Zeile eine bestimmte Zeichenkette steht?
Mit "input.hasnextLine()" überprüfe ich ja nur, ob ich Inhalte in der nächsten Zeile habe...
Und wenn ich in die while-schleife "input.nextLine()" schreibe, dann springt er ja eine Zeile weiter...
Oder muss ich dann einfach mit input arbeiten, da dies die zeile ist, mit der er in der while-bedingung eins weitergesprungen ist?