Informationen aus dem Internet Abgleichen

MiMa

Top Contributor
Guck mal hier: HtmlUnit - Welcome to HtmlUnit

Etwas leichtgewichtiger würde es vielleicht auch mit HttpURLConnection-Rumgefummel und einem HTML-Parser gehen ... [/url]

Ark

Da ich das mit dem JAX und XML nicht hin bekommen habe, versuche ich das mal über einen HTML Parser. HTML Kenntnisse besitze ich kaum, aber vielleicht schaffe ich es ja mit dieser Vorgehensweise.

Das Problem sehe ich nicht, eine Webseite heraus zu finden. Viel mehr sehe ich das Problem auf einer Seite wie z.B. DNB - Home nach einer ISBN zu suchen. Dort wird zwar ein Suchfeld zur Verfügung gestellt, aber die Eingangsseite ist nicht das was ich Parsen möchte.

Mi
 

Warrior7777

Bekanntes Mitglied
So wie ich das sehe, kommst Du leider nicht darum herum, Dir die Website-Grundlagen zu erarbeiten. Das umfasst meiner Meinung nach mindestens HTML+CSS (wirklich ein absolutes Muss für jeden, der im Internet tätig ist!), JavaScript wäre auch nicht schlecht, da Daten z. T. über Scripts nachgeladen werden (z. B. bei Youtube die Videos). Weiterhin nützlich ist PHP, damit Du besser verstehst, was ein Server macht. Das bietet dann auch nützliche Kenntnisse, wenn es darum geht, ein Formular abzuschicken. Bei Dir ist das der Fall, da Du ja eine Suchanfrage an die ebsite senden möchtest.

Kurzer Überblick: Funktionsweise des HTTP-Protokolls*
1.) Der Client (z. B. ein Browser/eine Zeitungsapp etc.) schickt eine Anfrage (Request).
2.) Der Server wertet die Anfrage aus, stellt die entsprechende Website zusammen und schickt sie als Teil der Antwort an den Absender des Requests. Diese Antwort wird auch als Respond bezeichnet.
3.) Der Client wertet nun seinerseits die empfangenen Daten aus. Der Browser stellt die Website dar, Deine Anwendung erstellt eine Liste mit ISBN's. ;)

Nun mehr ins Detail:
Daten, die z. B. der Nutzer eingegeben hat, werden als Teil des HHTP-Body (Name dieser Methode: POST) übertragen oder an die URL angehängt (GET). Die Zeichenkette, die Du bei der Suche eingibst, wird durch eine dieser beiden Methoden verschickt. Du musst also Dein Programm so schreiben, dass es entsprechende Requests an den Server schickt. Bei GET ist das einfach: Schick mal mit dem Browser Deiner Wahl eine Suchanfrage ab. Nach der URL siehst Du bei Verwendung von GET etwa so etwas:

Code:
?varname1=wert1&varname2=wert2

Schau mal in die URLs dieses Forums. Dort sieht man es auch.
Alternativ kannst Du Dir auch die id und name Attribute des Textfeldes im Sourcecode ansehen. Dann weisst Du, wie die Felder heissen. Bei POST musst Du die Felder "programmatisch" senden. Wo man die hinschreiben muss, weiss ich leider nicht, aber wenn ich mich richtig erinnere sollte es hier stehen. ;) Die Anfrage musst Du dann an den Server schicken, der schickt Dir die Antwort, die Du dann auswerten musst.
Ich kenn mich mit HTTP nicht so gut aus, aber wenn Du Dich ein wenig mit diesem Protokoll beschäftigst, hast Du's in einer halben bis ein, zwei Stunden. Es ist nichts Schwieriges.

Hab nachgeschaut: Die Parameter müssen unmittelbar nach dem Header stehen. Bei Wikipedia ist das auf den ersten Blick gut dargestellt, aber ich habs nicht gelesen... :oops:

*Bitte korrigiert mich, wenn ich etwas Falsches schreibe. :)

Wenn Du Fragen hast, melde Dich einfach.

Viel Erfolg, Spass und einen schönen Abend!

[EDIT]Ich hab mir jetzt die von Dir genannte Website angesehen. Der Suchtext wird per GET übertragen.[/EDIT]
 
Zuletzt bearbeitet:

MiMa

Top Contributor
Vielen Dank für die Umfangreiche Antwort.

Dann werde ich mich mal auch mit HTML und JavaScript beschäftigen.
Hätte nicht gedacht, das ich noch so einige Programmiersprachen zwischen lernen muss.
Mit PHP und MySQL hatte ich mich schon beschäftigt.

Mi
 

Warrior7777

Bekanntes Mitglied
Wenn Du schon PHP-Kenntnisse hast, solltest Du doch auch wissen, wie Formulare ausgewertet werden. (Es sei denn, Du bist noch ein Einsteiger ;) oder benutzt ein schlechtes Lehrmittel, z. B. die offizielle PHP-Seite :D.) HTML ist eine Auszeichnungssprache, damit kann man den Inhalt der Website logisch strukturieren, aber nichts programmieren.
Ich empfehle ich Dir dieses Buch, um ins Website-"Programmieren" einzusteigen. Es bietet einen guten Überblick über (fast) alle Webtechnologien. Meiner Meinung nach werden HTML und CSS praktisch vollständig abgedeckt, HTML5 und CSS3 werden aber noch nicht behandelt. Das findet man jedoch im Internet sehr schnell, viel Neues ist nicht hinzugekommen, was aber nicht heisst, dass die Änderungen/Ergänzungen nicht enorm wichtig sind! Der Programmierteil wird sehr schlecht abgedeckt: Die gängigsten Alltagsprobleme des Website-Erstellens werden zwar aufgezeigt und exemplarisch gelöst, z. B. Formularauswertung, SQL-Grundlagen etc., aber in die Tiefe geht es nicht und es ist auch nicht systematisch. Hier würde ich folgende Vertiefungsliteratur benutzen:
Für JavaScript
Für PHP und MySQL

Das Website-Handbuch habe ich bereits bereits "durchgearbeitet", d. h. die für mich relevanten Teile gelesen. ;) An den beiden anderen Büchern bin ich noch dran, v. a. das PHP-Buch führt schnell zu sichtbaren Resultaten. Beim JavaScript muss man erst "durch die Grundlagen durch", damit man etwas einigermassen Nützliches bekommt. (Diese verdammte Prototypen-Vererbung...) Aber diese Technologie sollte man auch nur zum Abrunden des Web-Auftritts benutzen, nicht als Hauptgestaltungselement. Da gibt es jedoch Ausnahmen, z. B. Multimedia-Sites wie Youtube, Playit etc. Die sind natürlich auf JavaScript angewiesen und ... Ich schweife schon wieder ab. :oops:
Wie schon gesagt: Wenn Du Fragen hast, schick mir eine PM oder poste es hier, sofern es mit Java zu tun hat. Schick mir auch eine PM, wenn es um HTML/CSS/... geht.

Viel Spass und Erfolg beim Lernen, insbesondere beim Lernen der vielen Abkürzungen, und bei deinem Projekt!

Warrior7777
 

MiMa

Top Contributor
Hi,

PHP und MySQL habe ich bis zur Hälfte durchgearbeitet, bin also noch Einsteiger.
Ich wollte wissen, ob ich meine Problemlösung mit PHP machbar ist, ist es schon aber mit erheblichen Aufwand.
Deshalb habe ich dann Java angefangen und habe dort auch 2-3 Bücher zur Hand. Die Probleme kann ich mittlerweile ganz gut lösen, muss aber jetzt wegen dem speziellen Problem XML und JAX nebenher lernen. Da ich ja schon ein bischen PHP und HTML kenne, weiss ich auch in welche Richtung das geht.

Das Website Handbuch habe ich auch, bin aus der Unibibliothek mit 10 Büchern heraus gekommen. :)
Bin auch richtig stolz darauf, das ich nach 3 Monaten Java schon wirklich brauchbaren Code erstellen kann.

Viele Grüsse
Mi
 
Zuletzt bearbeitet:

insane80

Aktives Mitglied
Hallo,

ich bin zwar erst jetzt auf den Thread gestoßen und hab mehr überflogen, aber ich mache grad was ähnliches und zwar eine kleine Anwendung, mit der man Bücher verwalten kann und eben auch eine ISBN-Abfrage. Ich habe das mit der Google Books API gemacht. Darüber solltest Du auch alle Infos bekommen, die Du benötigst. Du musst Dir einen API-Key holen (Einfach nach google api console googeln, anmelden und unter Services Book API auswählen. Ich hab keinen Link angehängt, weil ich grad eingeloggt bin und nicht sicher war, ob Du dann direkt mit meinen Daten rein kommst, auch wenn das nicht passieren dürfte...) und hast dann 1000 Request pro Tag kostenlos, falls Dir das reicht.

Als Beispiel für eine Klasse, mit der Du die Infos holst und verarbeitest. Das ist kein kompletter Code sondern nur ein Auszug davon, wie ich es gelöst habe als Ansatz:

Java:
import com.google.api.client.googleapis.services.GoogleKeyInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.books.Books;
import com.google.api.services.books.model.Volume;
import com.google.api.services.books.model.Volumes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GoogleBooks {

    private Books booksApi;

    public GoogleBooks(String key) {
        JsonFactory jf = new JacksonFactory();
        // das Objekt für die Abfrage bauen -- key ist dann natürlich Dein API-Key
		booksApi = Books.builder(new NetHttpTransport(), jf).setJsonHttpRequestInitializer(new GoogleKeyInitializer(key)).build();
    }

     private List<BookResult> resultFromQuery() {
        try {
            //Query für die Abfrage bauen als z.B. "isbn:9783897214217"
			String query = "isbn:" + isbn;
            List<BookResult> resultList = new ArrayList<BookResult>();
            List<Volume> volumeList = new ArrayList<Volume>();
			Books.Volumes.List list = booksApi.volumes().list(query);
            Volumes volumes = list.execute();
            if (volumes.getTotalItems() > 0) {
                //die Liste füllen
                volumeList = volumes.getItems();
            }
            if (volumeList != null && !volumeList.isEmpty()) {
                //die Liste durchnudeln
                for (Volume v : volumeList) {
                    //Objekt einer Klasse erzeugen, die die Ergebnisse sammelt (als Beispiel)
                    BookResult bookResult = new BookResult();
                    bookResult.setTitle( v.getVolumeInfo().getTitle());
                    bookResult.setPublisher(v.getVolumeInfo().getPublisher());
                    resultList.add(bookResult);
                }
            }
        return resultList;                

        } catch (IOException e) {
            e.printStackTrace();
            return Collections.emptyList();
        }

    }

Im Anhang noch eine Debugger-Ansicht des erhaltenen Volume.

Grüße
Christian
 

Anhänge

  • volume.jpg
    volume.jpg
    78,1 KB · Aufrufe: 35

MiMa

Top Contributor
Danke, habe gleich mal einen Google Account generiert.
Habe die Library google-api-java-client gefunden, aber die Book api suche ich noch.

Ist wohl die API service?

Mi
 

MiMa

Top Contributor
So,

mittlerweile habe ich mit DOM ein Objektmodell im Hauptspeicher anhand einer XML Datei erzeugt und konnte die Variablen und Inhalte in die Konsole ausgeben.

Die XML Datei wurde erzeugt, indem ich die Zeilen aus dem Browser manuell kopiert habe und eine XML Datei auf der Festplatte geschrieben habe.

Die XML hatte ich mir von der Datenbank geholt, indem ich im Browser folgende Zeile eingegeben hatte:

Code:
http://services.dnb.de/sru/dnb?version=1.1&operation=searchRetrieve&query=NUM%3D9783834805690&recordSchema=MARC21-xml&accessToken=xxXXxxXXxxXXxxXX

Wie macht man das, damit das aus dem Quellcode heraus aufrufen kann und das dann direkt aus dem Hauptspeicher verwendet wird??

Danke

Mi
 

MiMa

Top Contributor
Ich habe nach token Access gesucht, finde aber immer nur Befehle in Java für Facebook oder Twitter.

Ich habe derzeit eine String-Variable deklariert für den XML Text der zurückgegeben werden soll und die
Suchabfrage mit dem Token in einen String gespeichert.

Die Frage ist nur mit welchem Befehl oder API Klasse ist für eine Suchabfrage über das Internet zu einer Datenbank zu benutzen.

Entweder habe ich etwas gefunden über JDB oder Facebook und Twitter. ???:L

Vielen Dank

Mi
 

MiMa

Top Contributor
Juhu :toll:

Ich habe es geschafft.

Java:
String buchFile = new String(sruAbfrage);

Damit hat es geklappt und ich habe im String buchFile das zurückgegebene Ergebnis erhalten und mal auf die Konsole ausgegeben. :applaus:

Ich hätte niemals gedacht, das es so einfach geht.

Vielen Dank an alle die mir so Tatkräftig geholfen haben

Mi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Zu Property Feld weitere Informationen hinzufügen? Java Basics - Anfänger-Themen 4
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
C Quelltext mit Formatierungs- und Style-Informationen versehen Java Basics - Anfänger-Themen 7
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
GreenTeaYT Wie gebe ich Informationen von einer Klasse zur anderen Klasse? Java Basics - Anfänger-Themen 9
I Informationen aus XML Datei auslesen Java Basics - Anfänger-Themen 2
C Bestimmte Informationen von Webseite suchen Java Basics - Anfänger-Themen 13
B Informationen zu einer URL sammeln? Java Basics - Anfänger-Themen 6
M Informationen von externem Programm bekommen (Firefox) Java Basics - Anfänger-Themen 6
D wie speichere ich die informationen der schüler Java Basics - Anfänger-Themen 29
D System Informationen auslesen Java Basics - Anfänger-Themen 7
S Winamp Informationen mit Java auslesen? Java Basics - Anfänger-Themen 3
D auslesen von informationen aus seitenquelltext Java Basics - Anfänger-Themen 6
2 Informationen zu Theoriethema Java Basics - Anfänger-Themen 3
cowabunga1984 Auslesen von Informationen aus Textdateien Java Basics - Anfänger-Themen 2
M Aus einer Datei (File) mehr Informationen auslesen ? Java Basics - Anfänger-Themen 8
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
E java mit Internet Explorer 11 Java Basics - Anfänger-Themen 8
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
E mit java-anwendung internet verbindung unterbrechen Java Basics - Anfänger-Themen 5
C File aus dem Internet herunterladen Java Basics - Anfänger-Themen 6
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
F DatagramSocket über das Internet benutzen Java Basics - Anfänger-Themen 14
G Internet-Zugriff // URL posten, Quelltext einlesen Java Basics - Anfänger-Themen 5
E Prüfen, ob ein Bild im Internet vorhanden ist? Java Basics - Anfänger-Themen 11
E Programm - Update via Internet? Java Basics - Anfänger-Themen 5
T Variable aus dem Web Netz Internet URL bestimmen Java Basics - Anfänger-Themen 13
O Java applet im Internet Java Basics - Anfänger-Themen 6
E Exe über das Internet starten? Java Basics - Anfänger-Themen 14
Y chat programm im internet realisieren Java Basics - Anfänger-Themen 5
M Prüfen ob pc im Internet ist Java Basics - Anfänger-Themen 5
Developer_X Sounds abspielen, die im internet sind (.wav) Java Basics - Anfänger-Themen 2
A Java lernen übers Internet Java Basics - Anfänger-Themen 9
G Internet-Javascript-Funktion per Java-Programm aufrufen Java Basics - Anfänger-Themen 6
R Textdatei im Internet verändern... Java Basics - Anfänger-Themen 4
G Video aus dem Internet abspielen Java Basics - Anfänger-Themen 6
D Bild aus Internet laden und in Programm anzeigen Java Basics - Anfänger-Themen 5
Developer_X Mein erster Internet Explorer Java Basics - Anfänger-Themen 14
Developer_X Txt Document laden aus dem Internet Java Basics - Anfänger-Themen 12
V File aus internet Java Basics - Anfänger-Themen 5
S applets im internet ablaufen lassen Java Basics - Anfänger-Themen 6
N Hilfe zur Erstellung einer Internet-Plattform Java Basics - Anfänger-Themen 5
B Dateigröße ermitteln von Datein im Internet Java Basics - Anfänger-Themen 9
G Button mit Internet verknüpfen? Java Basics - Anfänger-Themen 10
D Datenbankanbindung über das Internet Java Basics - Anfänger-Themen 2
G fragen zum Internet Explorer Java Basics - Anfänger-Themen 6
S Bild vom Internet lokal abspeichern Java Basics - Anfänger-Themen 4
J Dateien aus dem internet downloaden ? Java Basics - Anfänger-Themen 16
A Binär-Datei versenden übers Internet Java Basics - Anfänger-Themen 2
W Kurse übers Internet aktualisieren Java Basics - Anfänger-Themen 6
J Datei aus Internet auslesen Java Basics - Anfänger-Themen 3
C Html-Seite aus dem Internet verarbeiten Java Basics - Anfänger-Themen 10
J Wo gibts quellen im Internet von Feiertagen? Java Basics - Anfänger-Themen 6
T Bilddatei aus Internet abspeichern Java Basics - Anfänger-Themen 3
W Verbindungsaufbau zu Datenbank uebers Internet Java Basics - Anfänger-Themen 10
Y Timeserver im Internet, welches Protokoll, wie zugreifen Java Basics - Anfänger-Themen 6
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
B Serial Key prüfen -> String mit privatem Key und dann abgleichen; Summe = 0 Java Basics - Anfänger-Themen 8
H Namen abgleichen Java Basics - Anfänger-Themen 3
N Datum abgleichen und Frage zum Layout Java Basics - Anfänger-Themen 3
J OOP Vergebene Objekt Nummer abgleichen falls einer entfernt wird ? Java Basics - Anfänger-Themen 5
A Fahrzeug ID in substrings teilen und abgleichen Java Basics - Anfänger-Themen 9
S varible mit array abgleichen Java Basics - Anfänger-Themen 6
J Primzahlen errechnen.ArrayLists abgleichen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben