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 ein alternativer Browser verwenden.
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.
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...
*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]
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.
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 .) 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.
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!
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.
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.
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:
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