# Informationen aus dem Internet Abgleichen



## MiMa (18. Sep 2012)

Hi,

ich habe eine ISBN Nummer und möchte Informationen dazu aus dem Internet abgreifen.
Wie ist denn da die Vorgehensweise?

Ich habe mal einiges in Google probiert, aber es sind zu viele und unterschiedliche Informationen.
Ebenfalls habe ich die ISBN zerlegt um gezielter suchen zu können, aber leider sind die Datenbanken für Verlagsnummern unter Verschluss. Das heisst zahlen für die Daten.

Dann ist  mir der Gedanke gekommen auf der Verlagsseite zu den Informationen zu kommen, aber leider weiss ich nicht wie ich den Verlag erst mal finden soll?

Ich möchte gerne die Verlage anhand der ISBN Nummer, welche auch die Verlagsnummer enthält, aus dem Internet finden lassen. Wenn alle Stricke reissen, werde ich eine eigene Auflistung der Verlage und der zugehörigen Nummern machen müssen. Das wäre aber erst meine letzte Wahl.

Hat vielleicht jemand eine andere Idee.

Vielen Dank

Mi


----------



## Ark (18. Sep 2012)

Ich habe keine Ahnung, ob die Verwendung von Bots gestattet ist, aber mit ein bisschen Glück reicht schon Amazon mit folgendem Muster: [c]http://www.amazon.de/dp/HierISBNeinsetzen[/c] Zum Beispiel http://www.amazon.de/dp/1241719381 Dort findet man dann zumindest weitere Anhaltspunkte, zum Beispiel den Verlag. Na ja, und dann könnte man ja anfangen mit Raten und gucken, inwiefern da irgendwas korreliert. 

Aber wie gesagt: ich weiß nicht, ob das so gedacht/erlaubt ist, und noch viel weniger, ob das für deine Zwecke taugt.

Ark


----------



## Templarthelast (18. Sep 2012)

Es gibt ein Verzeichnis lieferbarer Bücher(vlb) mit dem du ISBN abgeleichen könntest.


----------



## ARadauer (18. Sep 2012)

Amazon bietet auch eine gute api die man über rest ansprechen kann...


----------



## MiMa (18. Sep 2012)

Ark hat gesagt.:


> Ich habe keine Ahnung, ob die Verwendung von Bots gestattet ist, aber mit ein bisschen Glück reicht schon Amazon mit folgendem Muster: [c]http://www.amazon.de/dp/HierISBNeinsetzen[/c] Zum Beispiel Japanese Culture,Vol. 6: Fashion from Kimonos to Harajuku Including Traditional Accessories,Fruits Magazine,Lolita,Gothic,Cosplay,Ganguro,: Amazon.de: Elane Casselberry: Englische Bücher Dort findet man dann zumindest weitere Anhaltspunkte, zum Beispiel den Verlag. Na ja, und dann könnte man ja anfangen mit Raten und gucken, inwiefern da irgendwas korreliert.
> 
> Aber wie gesagt: ich weiß nicht, ob das so gedacht/erlaubt ist, und noch viel weniger, ob das für deine Zwecke taugt.
> 
> Ark



Habe da smal versucht mit "http://www.amazon.de/dp/9783834805690" da komt ein 404 Fehler.
Wenn ich bei Amazon diekt in die Suchmaske die iSBN 978-3-8348-0569-0 eingebe, erscheint das Buch aber. In Amazon drin ist es aber dann auch.

Lange gesucht und bin auf die Deutsche Nationalbibliothek gestossen.
DNB - Home
Dort konnte ich in der Suchmaske das Buch finden.
https://portal.dnb.de/opac.htm?query=978-3-8348-0569-0&method=simpleSearch

Ist nur die Frage, wie schaffe ich das mit Java in die Suchmaske ein zu tragen und dann bei dem Ergebnis die Informationen zu entnehmen?

Mi


----------



## MiMa (18. Sep 2012)

Templarthelast hat gesagt.:


> Es gibt ein Verzeichnis lieferbarer Bücher(vlb) mit dem du ISBN abgeleichen könntest.



Leider sind die zu und kosten.

Mi


----------



## MiMa (18. Sep 2012)

ARadauer hat gesagt.:


> Amazon bietet auch eine gute api die man über rest ansprechen kann...



Amazon WebService, danke da werde ich mal rein schauen.

Mi


----------



## Ark (18. Sep 2012)

Guck mal hier: HtmlUnit - Welcome to HtmlUnit

Etwas leichtgewichtiger würde es vielleicht auch mit HttpURLConnection-Rumgefummel und einem HTML-Parser gehen, z.B. HTML Parser - HTML Parser

Ark


----------



## MiMa (18. Sep 2012)

Warscheinlich wird es auf Lucene hinaus laufen.

Das hat eine API für suchen und Parsen.

Dann wird das wohl noch eine weile dauern, bis ich das verstanden habe.

Mi


----------



## ARadauer (18. Sep 2012)

Lucene geht in die falsche richtung...


----------



## MiMa (18. Sep 2012)

Damit kann man doch suchen und parsen?
Oder sehe ich das falsch?

Mi


----------



## MiMa (18. Sep 2012)

Habe da was gefunden, was öffentlich ist.

About Us (Open Library)

Mi


----------



## Templarthelast (18. Sep 2012)

Du brauchst dafür noch nichtmal irgendein framwork, sondern kannst das ganze per httpstream und ein bisschen kleinarbeit selber machen und würdest dabei noch eine Menge lernen.


----------



## MiMa (18. Sep 2012)

Ok, habe mittlerweile viel über Java gelernt, aber man lernt ja nie aus und deshalb sitze ich hier täglich sehr sehr viele Stunden und lerne, programmiere.

HttpStream sagt mir nichts, muss da erst mal einen Einstieg suchen. Stichwort habe ich ja jetzt. 
Vielen Dank


Mi


----------



## Templarthelast (18. Sep 2012)

Du ließt den HTMLinhalt einer Website mit dem Stream aus. Danach filterst du die richtigen Infos raus und speicherst sie ab. Ansonsten mal im JavaDoc bzw. Java ist auch eine Insel bzw. mehr als eine Insel schauen.


----------



## MiMa (18. Sep 2012)

Kennt Jemand da ein Tutorial für ein kleines Beispiel?

Danke

Mi


----------



## ARadauer (18. Sep 2012)

nimm die amazon ws api!! https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html

ok für einen anfänger ist das nicht sehr einfach.
aber im grunde kannst du den Webservice über Rest aufrufen und musst nur das was zurück kommt mit jaxb in ein objekt parsen.

Das mit dem Request absetzen ist etwas kritisch... aber da gibts eine hilfsklasse..

ok also mit jaxb aus dieser wsdl die objekte erzeugen...
http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl
ich mach das mit dem jaxws-maven-plugin, aber auf der jaxb homepage ist sicher beschrieben wie das auf der konsole geht..

so dann diese hilfsklasse und den request abzusetzen...
die hab ich von der amazon ws homepage... musst du nicht verstehen...


```
/**********************************************************************************************
 * Copyright 2009 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file 
 * except in compliance with the License. A copy of the License is located at
 *
 *       [url=http://aws.amazon.com/apache2.0/]Apache License[/url]
 *
 * or in the "LICENSE.txt" file accompanying this file. This file is distributed on an "AS IS"
 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under the License. 
 *
 * ********************************************************************************************
 *
 *  Amazon Product Advertising API
 *  Signed Requests Sample Code
 *
 *  API Version: 2009-03-31
 *
 */

package com;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;
import java.net.URLEncoder;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
import java.util.TimeZone;
import java.util.TreeMap;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

/**
 * This class contains all the logic for signing requests
 * to the Amazon Product Advertising API.
 */
public class SignedRequestsHelper {
    /**
     * All strings are handled as UTF-8
     */
    private static final String UTF8_CHARSET = "UTF-8";
    
    /**
     * The HMAC algorithm required by Amazon
     */
    private static final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
    
    /**
     * This is the URI for the service, don't change unless you really know
     * what you're doing.
     */
    private static final String REQUEST_URI = "/onca/xml";
    
    /**
     * The sample uses HTTP GET to fetch the response. If you changed the sample
     * to use HTTP POST instead, change the value below to POST. 
     */
    private static final String REQUEST_METHOD = "GET";

    private String endpoint = null;
    private String awsAccessKeyId = null;
    private String awsSecretKey = null;

    private SecretKeySpec secretKeySpec = null;
    private Mac mac = null;

    /**
     * You must provide the three values below to initialize the helper.
     *  
     * @param endpoint          Destination for the requests.
     * @param awsAccessKeyId    Your AWS Access Key ID
     * @param awsSecretKey      Your AWS Secret Key
     */
    public static SignedRequestsHelper getInstance(
            String endpoint, 
            String awsAccessKeyId, 
            String awsSecretKey
    ) throws IllegalArgumentException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException
    {
        if (null == endpoint || endpoint.length() == 0)
            { throw new IllegalArgumentException("endpoint is null or empty"); }
        if (null == awsAccessKeyId || awsAccessKeyId.length() == 0) 
            { throw new IllegalArgumentException("awsAccessKeyId is null or empty"); }
        if (null == awsSecretKey || awsSecretKey.length() == 0)   
            { throw new IllegalArgumentException("awsSecretKey is null or empty"); }
        
        SignedRequestsHelper instance = new SignedRequestsHelper();
        instance.endpoint = endpoint.toLowerCase();
        instance.awsAccessKeyId = awsAccessKeyId;
        instance.awsSecretKey = awsSecretKey;

        byte[] secretyKeyBytes = instance.awsSecretKey.getBytes(UTF8_CHARSET);
        instance.secretKeySpec = new SecretKeySpec(secretyKeyBytes, HMAC_SHA256_ALGORITHM);
        instance.mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
        instance.mac.init(instance.secretKeySpec);

        return instance;
    }
    
    /**
     * The construct is private since we'd rather use getInstance()
     */
    private SignedRequestsHelper() {}

    /**
     * This method signs requests in hashmap form. It returns a URL that should
     * be used to fetch the response. The URL returned should not be modified in
     * any way, doing so will invalidate the signature and Amazon will reject
     * the request.
     */
    public String sign(Map<String, String> params) {
        // Let's add the AWSAccessKeyId and Timestamp parameters to the request.
        params.put("AWSAccessKeyId", this.awsAccessKeyId);
        params.put("Timestamp", this.timestamp());

        // The parameters need to be processed in lexicographical order, so we'll
        // use a TreeMap implementation for that.
        SortedMap<String, String> sortedParamMap = new TreeMap<String, String>(params);
        
        // get the canonical form the query string
        String canonicalQS = this.canonicalize(sortedParamMap);
        
        // create the string upon which the signature is calculated 
        String toSign = 
            REQUEST_METHOD + "\n" 
            + this.endpoint + "\n"
            + REQUEST_URI + "\n"
            + canonicalQS;

        // get the signature
        String hmac = this.hmac(toSign);
        String sig = this.percentEncodeRfc3986(hmac);

        // construct the URL
        String url = 
            "http://" + this.endpoint + REQUEST_URI + "?" + canonicalQS + "&Signature=" + sig;

        return url;
    }

    /**
     * This method signs requests in query-string form. It returns a URL that
     * should be used to fetch the response. The URL returned should not be
     * modified in any way, doing so will invalidate the signature and Amazon
     * will reject the request.
     */
    public String sign(String queryString) {
        // let's break the query string into it's constituent name-value pairs
        Map<String, String> params = this.createParameterMap(queryString);
        
        // then we can sign the request as before
        return this.sign(params);
    }

    /**
     * Compute the HMAC.
     *  
     * @param stringToSign  String to compute the HMAC over.
     * @return              base64-encoded hmac value.
     */
    private String hmac(String stringToSign) {
        String signature = null;
        byte[] data;
        byte[] rawHmac;
        try {
            data = stringToSign.getBytes(UTF8_CHARSET);
            rawHmac = mac.doFinal(data);
            Base64 encoder = new Base64();
            signature = new String(encoder.encode(rawHmac));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(UTF8_CHARSET + " is unsupported!", e);
        }
        return signature;
    }

    /**
     * Generate a ISO-8601 format timestamp as required by Amazon.
     *  
     * @return  ISO-8601 format timestamp.
     */
    private String timestamp() {
        String timestamp = null;
        Calendar cal = Calendar.getInstance();
        DateFormat dfm = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        dfm.setTimeZone(TimeZone.getTimeZone("GMT"));
        timestamp = dfm.format(cal.getTime());
        return timestamp;
    }

    /**
     * Canonicalize the query string as required by Amazon.
     * 
     * @param sortedParamMap    Parameter name-value pairs in lexicographical order.
     * @return                  Canonical form of query string.
     */
    private String canonicalize(SortedMap<String, String> sortedParamMap) {
        if (sortedParamMap.isEmpty()) {
            return "";
        }

        StringBuffer buffer = new StringBuffer();
        Iterator<Map.Entry<String, String>> iter = sortedParamMap.entrySet().iterator();

        while (iter.hasNext()) {
            Map.Entry<String, String> kvpair = iter.next();
            buffer.append(percentEncodeRfc3986(kvpair.getKey()));
            buffer.append("=");
            buffer.append(percentEncodeRfc3986(kvpair.getValue()));
            if (iter.hasNext()) {
                buffer.append("&");
            }
        }
        String cannoical = buffer.toString();
        return cannoical;
    }

    /**
     * Percent-encode values according the RFC 3986. The built-in Java
     * URLEncoder does not encode according to the RFC, so we make the
     * extra replacements.
     * 
     * @param s decoded string
     * @return  encoded string per RFC 3986
     */
    private String percentEncodeRfc3986(String s) {
        String out;
        try {
            out = URLEncoder.encode(s, UTF8_CHARSET)
                .replace("+", "%20")
                .replace("*", "%2A")
                .replace("%7E", "~");
        } catch (UnsupportedEncodingException e) {
            out = s;
        }
        return out;
    }

    /**
     * Takes a query string, separates the constituent name-value pairs
     * and stores them in a hashmap.
     * 
     * @param queryString
     * @return
     */
    private Map<String, String> createParameterMap(String queryString) {
        Map<String, String> map = new HashMap<String, String>();
        String[] pairs = queryString.split("&");

        for (String pair: pairs) {
            if (pair.length() < 1) {
                continue;
            }

            String[] tokens = pair.split("=",2);
            for(int j=0; j<tokens.length; j++)
            {
                try {
                    tokens[j] = URLDecoder.decode(tokens[j], UTF8_CHARSET);
                } catch (UnsupportedEncodingException e) {
                }
            }
            switch (tokens.length) {
                case 1: {
                    if (pair.charAt(0) == '=') {
                        map.put("", tokens[0]);
                    } else {
                        map.put(tokens[0], "");
                    }
                    break;
                }
                case 2: {
                    map.put(tokens[0], tokens[1]);
                    break;
                }
            }
        }
        return map;
    }
}
```

so und jetzt die eigentliche arbeit... gar nicht mehr so schwer...


```
package com;

import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import com.ECS.client.jax.Item;
import com.ECS.client.jax.ItemAttributes;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.Items;

public class AmazonTest {

	public static void main(String[] args) throws Exception {
		AmazonTest amazonProductFinder = new AmazonTest();
		amazonProductFinder.findBook("3897214482");
	}

	private static final String AWS_ACCESS_KEY_ID = "deine id";
	private static final String AWS_SECRET_KEY = " dein key";
	private static final String ASSOCIATE_TAG = "dein tag...";

	private static final String ENDPOINT = "ecs.amazonaws.de";
	private SignedRequestsHelper signedRequestsHelper = null;

	private Unmarshaller unmarshaller;

	public AmazonTest() throws InvalidKeyException, IllegalArgumentException, UnsupportedEncodingException, NoSuchAlgorithmException, JAXBException {
		if (signedRequestsHelper == null) {
			signedRequestsHelper = SignedRequestsHelper.getInstance(ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_KEY);
		}
		JAXBContext jaxbContext = JAXBContext.newInstance("com.ECS.client.jax");
		unmarshaller = jaxbContext.createUnmarshaller();

	}

	public void findBook(String isbn) throws Exception {

		Map<String, String> params = new HashMap<String, String>();
		params.put("Service", "AWSECommerceService");
		params.put("Version", "2011-08-01");
		params.put("Operation", "ItemLookup");
		params.put("ResponseGroup", "Medium");
		params.put("IdType", "ISBN");
		params.put("SearchIndex", "Books");
		params.put("ItemId", isbn);
		params.put("AssociateTag", ASSOCIATE_TAG);

		ItemLookupResponse itemLookupResponse = (ItemLookupResponse) execute(params);

		for (Items item : itemLookupResponse.getItems()) {
			for (Item i : item.getItem()) {
				ItemAttributes itemAttr = i.getItemAttributes();

				System.out.println("Title   = " + itemAttr.getTitle());
				System.out.println("Autor   = " + itemAttr.getAuthor());
				System.out.println("Bindung = " + itemAttr.getBinding());
				System.out.println("Verlag  = " + itemAttr.getPublisher());
				System.out.println("Seiten  = " + itemAttr.getNumberOfPages());
				System.out.println("Jahr    = " + itemAttr.getPublicationDate());
			}
		}

	}

	public Object execute(Map<String, String> params) throws Exception {
		String url = signedRequestsHelper.sign(params);
		System.out.println("URL     = " + url);
		return unmarshaller.unmarshal(new URL(url));
	}
}
```

bei mir kommt da sauber ein ergebnis...


> Title   = Java von Kopf bis Fuß
> Autor   = [Kathy Sierra, Bert Bates]
> Bindung = Broschiert
> Verlag  = O'Reilly
> ...



das key, id, tag zeugs bekommst du auf der amazon ws homepage...

fertig...


----------



## hüteüberhüte (18. Sep 2012)

MiMa hat gesagt.:


> Kennt Jemand da ein Tutorial für ein kleines Beispiel?
> 
> Danke
> 
> Mi




```
public static void main(String[] args) throws MalformedURLException, IOException {
        BufferedReader br = null;
        try {
            br =
                    new BufferedReader(
                    new InputStreamReader(
                    new URL("http://www.java-forum.org/").openStream()));
            String s;
            while ((s = br.readLine()) != null) {
                System.out.println(s);
            }
        } finally {
            if (br != null) {
                br.close();
            }
        }
    }
```

Ganz knappee, gleich kommt noch eins


----------



## MiMa (18. Sep 2012)

Vielen Dank für die Informationen.

Das Ergebnis was du da bekommen hast, reicht völlig aus.
Ich war erst mal geschockt von dem 300 Zeilen Listig, habe mir das zweite Listing angeschaut und bin guter Dinge.

Da ich aber noch nicht so lange in Java Programmiere, wird mich das noch ziemlich beschäftigen.
Dann schau ich jetzt erst mal was ich da laden und installieren muss damit ich ebenfalls so ein tolles Ergebnis bekomme.

Mi


----------



## hüteüberhüte (18. Sep 2012)

2. Beispiel:


```
package javaforum;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author hüte
 */
public class ReadTest {

    public static void main(String[] args) throws MalformedURLException, IOException {
        Pattern p = Pattern.compile(
                "<a href=\"[^\"]+\" style=\"white-space:nowrap\" ><strong>([^<]+)</strong></a></span>");
        BufferedReader br = null;
        try {
            br =
                    new BufferedReader(
                    new InputStreamReader(
                    new URL("http://www.java-forum.org/").openStream()));
            String s;
            while ((s = br.readLine()) != null) {
                Matcher m = p.matcher(s);
                if (m.find()) {
                    System.out.println("Neustes Thema: " + m.group(1));
                }
            }
        } finally {
            if (br != null) {
                br.close();
            }
        }
    }
}
```


```
Neustes Thema: Informationen aus dem Internet...
Neustes Thema: batch datei wird nicht aufgerufen
Neustes Thema: JButton deaktivieren greift nicht
Neustes Thema: Sortierung Java vs DB
Neustes Thema: JDBC pr�fen ob Table existiert
Neustes Thema: Video Gui Konzeptfrage (Mit After...
Neustes Thema: HtmlUnit Problem
Neustes Thema: Gui Labels �bersetzen
Neustes Thema: Numberformatexception bei Int
Neustes Thema: Eclipse Plugin
Neustes Thema: Buckminster hilfe
Neustes Thema: Liste von empfohlenen B�chern
Neustes Thema: MAVEN + CDI + JSF + TomEE
Neustes Thema: [JSF] Zugriff auf Bean (Eclispe,JBoss)
Neustes Thema: org.jboss.weld.exceptions.UnproxyableRes...
Neustes Thema: Criteria API length()
Neustes Thema: JAX-WS Parameter &quot;USER&quot; immer...
Neustes Thema: JBoss 7.1.1 st�rzt ab
Neustes Thema: Scala Schulung - Gratis vom...
Neustes Thema: Kritische Sicherheitsl�cke in Java 7
Neustes Thema: Hallo wir suchen Java Programierer f�r...
Neustes Thema: MVC noch Zeitgem�� oder anderes...
Neustes Thema: Steigung einer Parabel
Neustes Thema: Blog zu Datum und Zeit in Java
Neustes Thema: Nicht jeder kann ein Programmierer...
Neustes Thema: Toshiba PA3191U-1BRS Akku problem?
Neustes Thema: Einlesen von CSV Dateien
Neustes Thema: Javascript Maus Funktion
```

Post requests sind natürlich etwas schwieriger. Dafür benötigst du auch 
	
	
	
	





```
.openConnection().getOutputStream()
```


----------



## MiMa (18. Sep 2012)

ARadauer hat gesagt.:


> nimm die amazon ws api!! https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html
> das key, id, tag zeugs bekommst du auf der amazon ws homepage...
> fertig...



Ist es das "AWS SDK for Java" ?
Darin konnte ich zwei Bibliotheken finden.
1. aws-java-sdk-1.3.20.jar
2. aws-java-sdk-flow-build-tools-1.3.20.jar


diese imports konnten noch nicht gefunden werden.


```
import com.ECS.client.jax.Item;
import com.ECS.client.jax.ItemAttributes;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.Items;
```

Mi


----------



## MiMa (19. Sep 2012)

So, ich habe nun die Bibliothek amazon-ecs.jar gefunden, importiert und nun klappen die o.a. Importe.
Kaum hatte ich die Bibliothek eingebunden kam wiede rein Problem mit dem import von.

```
import com.amazonaws.services.simpledb.model.Item;
```



> com.ECS.client.jax.item is already defined in a single-type import
> unused import



Wenn ich das auskommentiere, gibt es keine Compilerfehler.
Wenn ich das programm aber ausführe, erhalte ich folgende Meldungen


```
Exception in thread "main" javax.xml.bind.UnmarshalException
 - with linked exception:
[java.io.IOException: Server returned HTTP response code: 403 for URL: http://ecs.amazonaws.de/onca/xml?AWSAccessKeyId=deine%20id&AssociateTag=dein%20tag...&IdType=ISBN&ItemId=3897214482&Operation=ItemLookup&ResponseGroup=Medium&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2012-09-19T05%3A35%3A07Z&Version=2011-08-01&Signature=MY4lByHR8PS114ceK5I8YXj%2Fwq9york2i1VxqXGB2OI%3D]
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:205)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:174)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
	at testprogramme.AmazonTest.execute(AmazonTest.java:81)
	at testprogramme.AmazonTest.findBook(AmazonTest.java:61)
	at testprogramme.AmazonTest.main(AmazonTest.java:28)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://ecs.amazonaws.de/onca/xml?AWSAccessKeyId=deine%20id&AssociateTag=dein%20tag...&IdType=ISBN&ItemId=3897214482&Operation=ItemLookup&ResponseGroup=Medium&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2012-09-19T05%3A35%3A07Z&Version=2011-08-01&Signature=MY4lByHR8PS114ceK5I8YXj%2Fwq9york2i1VxqXGB2OI%3D
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1615)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:630)
	at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:799)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202)
	... 7 more
```

Ich habe folgende Bibliotheken hinzugefügt:
amazon-ecs.jar
was-java-sdk-1.3.20.jar

Klasse
SignedRequestHelper.java

Aufgefallen ist mir auch noch die Zeilen:


```
private static final String AWS_ACCESS_KEY_ID = "deine id";
private static final String AWS_SECRET_KEY = " dein key";
private static final String ASSOCIATE_TAG = "dein tag...";
```

Was muss ich denn da eingeben?
Benötige ich eine ID, was ist das denn für eine ID, sowie key (Passwort?)
und Tags ?

Danke

Mi


----------



## ARadauer (19. Sep 2012)

mhn...

@hüteüberhüte: Ist die Frage ob man sich die Daten von einer Website ziehen will die sich jederzeit ändert oder ob man die angebotene Schnittstelle verwenden will

ich glaub diese jars brauchst du gar nicht....

die objekte die dir fehlen musst du generieren... hab ich schon geschrieben...


ARadauer hat gesagt.:


> ok also mit jaxb aus dieser wsdl die objekte erzeugen...
> http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl
> ich mach das mit dem jaxws-maven-plugin, aber auf der jaxb homepage ist sicher beschrieben wie das auf der konsole geht..



aber die exception schaut schon ganz gut aus.. Server returned HTTP response code: 403 for URL: 



> Aufgefallen ist mir auch noch die Zeilen:


ähm ja... hast du meinen beitrag gelesen?


ARadauer hat gesagt.:


> das key, id, tag zeugs bekommst du auf der amazon ws homepage...


https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html da rechts oben sign up usw...


----------



## MiMa (19. Sep 2012)

Ja hatte ich schon gelesen, hatte gedacht das wären Bibliotheken, weil die import Anweisungen Fehler meldeten. Nach der Einbindung der Bibliotheken waren die Fehlermeldungen weg.

Entstehen da Kosten, wenn man auf die Datenbank zugreifen will?

Danke

Mi


----------



## ARadauer (19. Sep 2012)

MiMa hat gesagt.:


> Entstehen da Kosten, wenn man auf die Datenbank zugreifen will?



Nö, aber ist leider auf ein paar Tausend zugriffe am Tag beschränkt...


----------



## MiMa (19. Sep 2012)

Puh,  das ist ja wirklich nicht so einfach.
Ich habe mich jetzt registriert und nach etwas suchen habe ich auch den Zugriffsschlüssel gefunden, den ich dann bei "AWS_SECRET_KEY" angeben muss?

Was muss ich denn bei "AWS_ACCESS_KEY_ID" angeben?, die registirierte email?
Was ist mir "ASSOCIATE_TAG" was kommt den da rein?

Mi


----------



## MiMa (19. Sep 2012)

Ok,

also den Secret Key habe ich mittlerweile auch gefunden.
Bei "AWS_ACCESS_KEY_ID" muss ich bestimmt die AWS-Konto-ID angeben welche zwei Bindestriche enthält.

Bleibt nur noch "ASSOCIATE_TAG" offen?

Danke

Mi


----------



## ARadauer (19. Sep 2012)

mhn lass ihn mal leer... sollte klappen... das ist die referenz auf dich wenn du aus der api werbelinks generierst.. kann sein, dass die nicht geprüft wird...
ich hab die von hier .. https://partnernet.amazon.de/

Oder du nimmst meinen aradauersig-21


----------



## MiMa (19. Sep 2012)

Ja danke, aber es klappt immer noch nicht.

Ich habe AWS_ACCESS_KEY_ID mal mit der AWS-Konto-ID probiert, dann mal mit der Zugriffsschlüssel-ID, mit der emailadresse und zuletzt mit der Kanonischen Benutzer ID.

AWS_Secret_Key ist der der Geheime Zugriffsschlüssel und den
ASSOCIATE_TAG habe ich mal Deinen genommen.

Da kommt ein Ellen langer Einzeiler und beginnt mit 

```
AWSAccessKeyId=............... ,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleYears>

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3063)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:174)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
at testprogramme.AmazonTest.execute(AmazonTest.java:85)
at testprogramme.AmazonTest.findBook(AmazonTest.java:63)
at testprogramme.AmazonTest.main(AmazonTest.java:25)
```

???:L

Mi


----------



## ARadauer (19. Sep 2012)

was kommt wenn die url die ganz unten von  System.out.println("URL     = " + url); ausgegeben wird, in den browser eingibst?

Also entweder hast du beim generieren der Klassen JAXB was falsch gemacht oder die Antwort vom Server passt nicht...


----------



## MiMa (19. Sep 2012)

Da kommt


```
URL     = http://ecs.amazonaws.de/onca/xml?AWSAccessKeyId=.......
```

JAX Klassen generieren ???

Ich habe die beiden Bibliotheken zugefügt, (aws-java-sdk-1.3.20.jar, amazon-ecs.jar und den SignedRequestsHelper.java wie im Post erzeugt und alle compilerfehler durch importe behoben.

Mi


----------



## ARadauer (19. Sep 2012)

was sagt der browser wenn du dort die url eingibst?

ja vielleicht stimmen die klassen aus der ecs.jar nicht mit der aktuellen schnittstelle überein...

Also schau mal was da über diese url zurück kommt... 

hab auch nie geschrieben, dass du diese jar einbinden sollst (ich kenn die gar nicht)... vielleicht ist es besser, wenn du dir die klassen neu mit JAXB aus der wsdl generierst (wobei ich nicht genau weiß wie das am einfachsten geht).... nur not schick ich dir die klassen am abend..

aber schau mal was vom server zurück kommt, das ist ein rest aufruf, das heißt du kannst das in deinen browser eingeben...


----------



## ARadauer (19. Sep 2012)

zb hier http://javathreads.de/2010/04/mit-jaxb-einfach-von-xml-daten-zu-java-objekten/

"Java Klassen mit JAXB Annotationen aus XML Schema generieren" die WSDL Datei beschreibt Plattformunanhängig die Schittstellle des Services... der liefert dann XML zurück, und mit dem xjc befehlt von jaxb kann man sich aus der WSDL (Beschreibung der Schnittstelle) Objekte generieren, und jaxb kann dann aus dem XML Java Objekte machen..

wenns gut klappt muss man mit dem ganzen xml gedöns nicht arbeiten. WSDL -> Klassen, mit JAXB XML zu Objekten...


----------



## MiMa (19. Sep 2012)

Ich habe mir das mal angeschaut und muss ehrlich sagen, das ich von XML und dem ganzen keine Ahnung habe.

Ich habe die Bibliotheken wieder entfernt und die fehlenden Importmeldungen sind wieder da.
Leuchtet mir auch ein, denn die Jax Bibliothek oder Klassen fehlen ja.

Als ich die Seite "Mit JAXB einfach von XML Daten zu Java Objekten" auf gemacht habe, dachte ich gleich, och ne, musst das jetzt auch noch lernen!?! ;(
Aber nicht heute.

Desweiteren habe ich mal überlegt, wenn ich mein Programm weiter geben möchte, dann funktioniert das nicht ohne MEINE Amazon Zugangsdaten.

Wäre eine super Lösung, wenn man nicht einen Account, IDs, Keys und den ganzen kram bräuchte.

Ich glaub da muss ein anderer Lösungsansatz gefunden werden. 

Mi


----------



## MiMa (19. Sep 2012)

Habe noch mal den Ansatz genommen aus den Webseiten informationen zu gewinnen.



Ark hat gesagt.:


> mit ein bisschen Glück reicht schon Amazon mit folgendem Muster: [c]http://www.amazon.de/dp/HierISBNeinsetzen[/c] Zum Beispiel Japanese Culture,Vol. 6: Fashion from Kimonos to Harajuku Including Traditional Accessories,Fruits Magazine,Lolita,Gothic,Cosplay,Ganguro,: Amazon.de: Elane Casselberry: Englische Bücher
> Ark



Sieht nicht so aus, als ob Amazon da einheitliche Muster hat aber ich habe das mal im Browser eingegeben und heraus ist folgendes Muster gekommen.


```
http://www.amazon.de/Algorithmen-kompakt-verständlich-Lösungsstrategien-Computer/dp/3834805696
```

Nochmal scharf nachdenken.
Den Verlag habe ich durch die ISBN, aber kann das nicht zuordnen, weil das Datenbankstück nicht verfügbar ist.

Eine Lösung wäre eine eigene Datenbank auf zu bauen und Verlage zu addieren durch manuelle Eingaben. :noe:

Eine weitere Lösung wäre den Verlag aus den Inhalt zu extrahieren. Ist dann nur die Frage woran erkenne ich einen Verlag? Da bräuchte ich ebenfalls eine Gegenstück, das sagt, Springer ist eine Verlag. Also da wäre es ebenfalls eine Datenbank als Gegenstück nötig?

Wenn ich den Verlag nicht über die ISBN ermittle, kann es vorkommen, das ich im Inhalt Springer und Pearson und oder Vieweg ermittle und dann? Wäre wieder die identifikation über die ISBN sicherer.

Ich glaube der beste Lösungsansatz wäre über die dnb.de (Deutsche Nationalbibliothek)zu gehen.

https://portal.dnb.de/opac.htm;jses...4?query=978-3-8348-0569-0&method=simpleSearch

Ich werde mir mal den HTML Quellcode ansehen, dort ist bestimmt der Text Strukturiert, den man dann über HTML parsen kann.

Mi


----------



## bone2 (19. Sep 2012)

simple xml api:
Developer Area at ISBNdb.com: API: Request & Response
Developer Area at ISBNdb.com: API: Identification, Access Keys

bei der suche nach der isbn:
Java von Kopf bis Fuß


----------



## MiMa (19. Sep 2012)

ARadauer hat gesagt.:


> nimm die amazon ws api!! https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html
> 
> ok für einen anfänger ist das nicht sehr einfach.
> 
> ...



Ich habe mir das noch mal verinnerlicht und ärgere mich, das ich es nicht hin bekomme.

Mir ist aufgefallen, das ich diese .wsdl vergessen habe.
Ich habe keine Ahnung von Maven und weiss nicht wie ich die Konvertieren soll?

Mi


----------



## ARadauer (19. Sep 2012)

ich weiß, darum hab ich auch das hier geschreiben... hier (ungefähr in der mitte des artikels) sollte erklärt werden wie du aus der wsdl Java Objekte erzeugen kannst. (ohne maven)



ARadauer hat gesagt.:


> zb hier http://javathreads.de/2010/04/mit-jaxb-einfach-von-xml-daten-zu-java-objekten/
> 
> "Java Klassen mit JAXB Annotationen aus XML Schema generieren" die WSDL Datei beschreibt Plattformunanhängig die Schittstellle des Services... der liefert dann XML zurück, und mit dem xjc befehlt von jaxb kann man sich aus der WSDL (Beschreibung der Schnittstelle) Objekte generieren, und jaxb kann dann aus dem XML Java Objekte machen..
> 
> wenns gut klappt muss man mit dem ganzen xml gedöns nicht arbeiten. WSDL -> Klassen, mit JAXB XML zu Objekten...



Ich versteh dich ja... das ist nicht einfach, überhaupt wenn einem die ganzen begriffe fremd sind.
Aber nimm dir Zeit und ließ dir die einzelnen themen in ruhe durch, im Grunde ist es simpel. Url erzeugen, die kannst du dann auch im browser eingeben, da sollte ein xml zurück kommen. (Nach dem hab ich schon gefragt, du postest es aber nicht)
 Damit du das XML nicht von hand verarbeiten musst  kannst du mit jaxb das xml in objekte umwandeln. damit es diese objekte gibt und jaxb weiß wie das mit dem xml zusammen passt, muss irgenwer die definiert haben... das steht im wsdl (schnittstellen beschreibung) 

Wenn du sowas machen willst, musst du dich einfach mit den themen kurz beschäftigen... hilft nicht.. wobei du musst das ja gar nicht machen...


----------



## MiMa (19. Sep 2012)

Habe den ganzen Tag damit verbracht die Klassen aus der .wsdl Datei zu generieren.
Mittlerweile Frage ich mich, ob eine es nicht einfacher gewesen wäre in Maven ein zu steigen und das von dort zu machen?

Ich kenne Maven nicht und weiss auch nicht wie komplex es ist, aber ich habe schon öfters bei Lucene und Tika gelesen, das es Maven Pakete gibt und in Netbeans gibt es auch etwas zu Maven.

Aber nur nicht abschweifen, sonst komme ich nie zum Ziel.

Heute habe ich es sogar geschafft trang im Terminal laufen zu lassen, aber probiere immer noch mit den Parametern herum.

Morgen schaue ich noch mal im nach Netz ob ich noch etwas finden kann, was ich noch nicht gelesen habe. :lol:

Mi


----------



## MiMa (20. Sep 2012)

ARadauer hat gesagt.:


> ... wenn du dir die klassen neu mit JAXB aus der wsdl generierst (wobei ich nicht genau weiß wie das am einfachsten geht).... nur not schick ich dir die klassen am abend..



Es wäre super, wenn Du mir die Bibliotheken zusenden könntest, damit ich mit Java weiter komme. 

Ich habe gesehen, das der Datenaustausch mit den Datenbanken, egal von wem, immer mit XML zusammenarbeitet. Also wird das auch in Zukunft ein Thema für mich sein.

Deshalb werde ich Grundeinstellungen für Java und DNB einfliessen lassen und diese nutzen.
Auch bei DNB werden die Ergebnisse in XML bereitgestellt.

Um nicht immer so viel Zeit im Internet zu verlieren, meist auch von der Suche abdriftet, habe ich mir in der Unibibliothek das zurücklegen lassen, welches ich mir heute Abend abholen werde.

JAXB 2.0: Ein Programmiertutorial für die Java Architecture for XML Binding: Amazon.de: Samuel Michaelis,Wolfgang Schmiesing: Bücher

Vielen Dank

Mi


----------



## MiMa (21. Sep 2012)

So ich habe jetzt noch mal Schritt für Schritt gemacht und mit Netbeans das Projekt "AmazonWebService" gemacht.

Ich habe zuerst wie im Post die Jax Klassen hergestellt. 
Jetzt weiss ich endlich wie das geht.

Dann die Hilfsklasse integriert und die AmazonTest Klasse.

Es trat dann noch ein Importfehler von Org.apache.commons.codec.binary.Base64.
Ich habe daraufhin von der Apache Seite die commons-codec-1.7-bin geladen und
als Jar Bibliothek hinzugefügt und gut war es.

Der einzige übrig gebliebene Fehler sind die importe von com.ECS....
Ich habe dann die Bibliothek von amazon-ecs.jar hinzugefügt und keine Compiler Fehler mehr.

Dann meine Zugangdaten eingetragen und war gespannt.

ich erhalte dann folgende Meldungen im Output:


```
ant -f /Users/michael/NetBeansProjects/AmazonWebService -Djavac.includes=com/AmazonTest.java -Drun.class=com.AmazonTest run-single
init:
Deleting: /Users/michael/NetBeansProjects/AmazonWebService/build/built-jar.properties
deps-jar:
Updating property file: /Users/michael/NetBeansProjects/AmazonWebService/build/built-jar.properties
xjc-typedef-target:
jaxb-code-generation:
files are up to date
Compiling 1 source file to /Users/michael/NetBeansProjects/AmazonWebService/build/classes
compile-single:
run-single:
URL     = http://ecs.amazonaws.de/onca/xml?AWSAccessKeyId="Hier war der Access Key" &AssociateTag=&IdType=ISBN&ItemId=3897214482&Operation=ItemLookup&ResponseGroup=Medium&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2012-09-21T06%3A27%3A04Z&Version=2011-08-01&Signature=BRHefgBazA3%2BvRrpmz20J63SYj7aoy7vs1yamF1da8g%3D
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://webservices.amazon.com/AWSECommerceService/2011-08-01", local:"ItemLookupResponse"). Expected elements are <{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Accessories>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Arguments>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}AudienceRating>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Bin>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}BrowseNode>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}BrowseNodeLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}BrowseNodeLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}BrowseNodes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Cart>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartAdd>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartAddResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartClear>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartClearResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartCreate>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartCreateResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartGet>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartGetResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartItems>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartModify>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CartModifyResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Collections>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Condition>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CorrectedQuery>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Customer>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CustomerContentLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CustomerContentLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CustomerContentSearch>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CustomerContentSearchResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}CustomerReviews>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Customers>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}DeliveryMethod>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}EditorialReview>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}EditorialReviews>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Errors>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Fitment>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}FitmentAttributes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Fitments>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Guide>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}HTTPHeaders>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Help>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}HelpResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ImageSet>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Information>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Item>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemAttributes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemLink>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemLinks>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemSearch>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemSearchResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Items>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}List>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ListItem>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ListLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ListLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ListSearch>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ListSearchResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ListmaniaLists>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Lists>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}LoyaltyPoints>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Merchant>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}MerchantItemAttributes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}MissingVehicleAttributes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}MultiOperation>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}MultiOperationResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}NewReleases>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Offer>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}OfferAttributes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}OfferListing>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}OfferSummary>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Offers>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}OperationInformation>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}OperationRequest>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}OtherCategoriesSimilarProducts>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Part>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}PartBrandBins>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}PartBrowseNodeBins>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Promotion>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Promotions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Property>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}RelatedItem>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}RelatedItems>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Request>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ResponseGroupInformation>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Review>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Reviewer>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SavedForLaterItems>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SearchBinSet>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SearchBinSets>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SearchInside>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SearchResultsMap>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Seller>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerFeedback>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerListing>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerListingLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerListingLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerListingSearch>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerListingSearchResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerListings>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SellerLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Sellers>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SimilarProducts>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SimilarViewedProducts>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SimilarityLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}SimilarityLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Tag>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TagLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TagLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TaggedGuides>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TaggedItems>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TaggedListmaniaLists>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Tags>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TopItemSet>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TopSellers>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Tracks>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Transaction>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TransactionItem>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TransactionLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}TransactionLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Transactions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}UniversalListItem>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VariationAttribute>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VariationDimensions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VariationSummary>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}Variations>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleBed>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleBedOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleBodyStyle>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleBodyStyleOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleBrakes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleBrakesOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleDriveType>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleDriveTypeOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleEngine>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleEngineOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleMake>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleMakes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleMfrBodyCode>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleMfrBodyCodeOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleModel>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleModels>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehiclePartFit>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehiclePartLookup>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehiclePartLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehiclePartSearch>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehiclePartSearchResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleParts>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleSearch>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleSearchResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleSpringTypes>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleSpringTypesOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleSteering>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleSteeringOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleTransmission>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleTransmissionOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleTrim>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleTrims>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleWheelbase>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleWheelbaseOptions>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleYear>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}VehicleYears>
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3063)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:174)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:172)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:177)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:186)
	at com.AmazonTest.execute(AmazonTest.java:81)
	at com.AmazonTest.findBook(AmazonTest.java:61)
	at com.AmazonTest.main(AmazonTest.java:23)
Java Result: 1
BUILD SUCCESSFUL (total time: 6 seconds)
```

Wenn ich die amazon-ecs.jar wieder entferne, kommen die import fehler wieder.
Sag doch mal, welche Bibliothek du sonst dafür verwendest?

Mi


----------



## ARadauer (21. Sep 2012)

gib dir url mal in den browser ein und poste was da kommt....

ich schau mirs dann am abend zuhause genauer an...


----------



## MiMa (21. Sep 2012)

Habe in den Browser folgendes Eingegeben


```
http://ecs.amazonaws.de/onca/xml?
```

Und habe zurückerhalten


```
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Errors>
<Error>
<Code>AWS.MissingServiceParameter</Code>
<Message>
Your request is missing the Service parameter. Please add the Service parameter to your request and retry.
</Message>
</Error>
</Errors>
```

Ich hoffe, das war richtig so?

Danke
Mi


----------



## ARadauer (21. Sep 2012)

MiMa hat gesagt.:


> Ich hoffe, das war richtig so?
> Mi



Nein.... mhn...

ok, trinke ein glas wasser und einen espresso... dann nochmal nach denken.

Was macht das Programm genau?
1. Es stellt einen Url zusammen anhand der Amazon ein Suchergebnis in Maschinen lesbarer Form zurück gbit
2. Es schickt dir Url an amazon
3. Es bekommt ein XML zurück
4. Es wandelt mit JAXB dieses XML in Objekte um
5. Es gibt den Inhalt der Objekte aus.

So du hast einen Fehler bei Punkt 4. Jetzt wäre es Interessant zu wissen, was Amazon zurück geschickt hat. Ich frage zum 4. mal was das ist.

Also die Url aus Punkt 1 in Browser eingeben. Woher bekommst du die? Zeile 75 von dem Programm das ich gepostet habe  System.out.println("URL     = " + url);... da wird sie ausgegeben...
Browser zeigt XML an ... xml hier posten.


http://ecs.amazonaws.de/onca/xml? ??? was soll amazon damit machen? Sie wissen ja gar nicht welchen Service du aurufen willst..


> Your request is missing the Service parameter. Please add the Service parameter to your request and retry.


relativ klar oder? :autsch:

Also ich denke, dass diese ganze Sache eigentlich ganz einfach ist....
url an amazon senden, ergbnis auswerten...


----------



## MiMa (21. Sep 2012)

So ich hoffe, das war jetzt richtig.

sieht jetzt auch wie ein XML aus.

[XML]
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<OperationRequest>
<HTTPHeaders>
<Header Name="UserAgent" Value="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25"/>
</HTTPHeaders>
<RequestId>1afa63f4-ce68-48a6-8c2c-0ad0cdb67618</RequestId>
<Arguments>
<Argument Name="Operation" Value="ItemLookup"/>
<Argument Name="Service" Value="AWSECommerceService"/>
<Argument Name="AssociateTag" Value="aradauersig-21"/>
<Argument Name="Version" Value="2011-08-01"/>
<Argument Name="SearchIndex" Value="Books"/>
<Argument Name="Signature" Value="WP45P1SAdhn15NZpwlQY6P8oWnSN5O+uXLLHv3qTBYE="/>
<Argument Name="ItemId" Value="3897214482"/>
<Argument Name="IdType" Value="ISBN"/>
<Argument Name="AWSAccessKeyId" Value="AWS_ACCESS_KEY_ID"/>
<Argument Name="Timestamp" Value="2012-09-21T07:29:31Z"/>
<Argument Name="ResponseGroup" Value="Medium"/>
</Arguments>
<RequestProcessingTime>0.0145370000000000</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<IdType>ISBN</IdType>
<ItemId>3897214482</ItemId>
<ResponseGroup>Medium</ResponseGroup>
<SearchIndex>Books</SearchIndex>
<VariationPage>All</VariationPage>
</ItemLookupRequest>
</Request>
<Item>
<ASIN>3897214482</ASIN>
<DetailPageURL>
Java von Kopf bis Fuß: Amazon.de: Kathy Sierra,Bert Bates,Lars Schulten,Elke Buchholz: Bücher
</DetailPageURL>
<ItemLinks>
<ItemLink>
<Description>Add To Wishlist</Description>
<URL>
http://www.amazon.de/gp/registry/wi...p=2025&creative=12738&creativeASIN=3897214482
</URL>
</ItemLink>
<ItemLink>
<Description>Tell A Friend</Description>
<URL>
http://www.amazon.de/gp/pdp/taf/389...p=2025&creative=12738&creativeASIN=3897214482
</URL>
</ItemLink>
<ItemLink>
<Description>All Customer Reviews</Description>
<URL>
http://www.amazon.de/review/product...p=2025&creative=12738&creativeASIN=3897214482
</URL>
</ItemLink>
<ItemLink>
<Description>All Offers</Description>
<URL>
http://www.amazon.de/gp/offer-listi...p=2025&creative=12738&creativeASIN=3897214482
</URL>
</ItemLink>
</ItemLinks>
<SalesRank>11530</SalesRank>
<SmallImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">64</Width>
</SmallImage>
<MediumImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL160_.jpg
</URL>
<Height Units="pixels">160</Height>
<Width Units="pixels">138</Width>
</MediumImage>
<LargeImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL.jpg
</URL>
<Height Units="pixels">500</Height>
<Width Units="pixels">430</Width>
</LargeImage>
<ImageSets>
<ImageSet Category="primary">
<SwatchImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL30_.jpg
</URL>
<Height Units="pixels">30</Height>
<Width Units="pixels">26</Width>
</SwatchImage>
<SmallImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">64</Width>
</SmallImage>
<ThumbnailImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">64</Width>
</ThumbnailImage>
<TinyImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL110_.jpg
</URL>
<Height Units="pixels">110</Height>
<Width Units="pixels">95</Width>
</TinyImage>
<MediumImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL._SL160_.jpg
</URL>
<Height Units="pixels">160</Height>
<Width Units="pixels">138</Width>
</MediumImage>
<LargeImage>
<URL>
http://ecx.images-amazon.com/images/I/51v-C6zXpGL.jpg
</URL>
<Height Units="pixels">500</Height>
<Width Units="pixels">430</Width>
</LargeImage>
</ImageSet>
</ImageSets>
<ItemAttributes>
<Author>Kathy Sierra</Author>
<Author>Bert Bates</Author>
<Binding>Broschiert</Binding>
<Creator Role="Übersetzer">Lars Schulten</Creator>
<Creator Role="Übersetzer">Elke Buchholz</Creator>
<EAN>9783897214484</EAN>
<EANList>
<EANListElement>9783897214484</EANListElement>
</EANList>
<Edition>1</Edition>
<ISBN>3897214482</ISBN>
<IsEligibleForTradeIn>1</IsEligibleForTradeIn>
<Label>O'Reilly</Label>
<Languages>
<Language>
<Name>Deutsch</Name>
<Type>Unbekannt</Type>
</Language>
<Language>
<Name>Deutsch</Name>
<Type>Original</Type>
</Language>
<Language>
<Name>Deutsch</Name>
<Type>Published</Type>
</Language>
</Languages>
<ListPrice>
<Amount>4990</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 49,90</FormattedPrice>
</ListPrice>
<Manufacturer>O'Reilly</Manufacturer>
<NumberOfPages>720</NumberOfPages>
<PackageDimensions>
<Height Units="hundredths-inches">165</Height>
<Length Units="hundredths-inches">921</Length>
<Weight Units="hundredths-pounds">313</Weight>
<Width Units="hundredths-inches">795</Width>
</PackageDimensions>
<ProductGroup>Book</ProductGroup>
<ProductTypeName>ABIS_BOOK</ProductTypeName>
<PublicationDate>2006-05-28</PublicationDate>
<Publisher>O'Reilly</Publisher>
<SKU>9783897214484</SKU>
<Studio>O'Reilly</Studio>
<Title>Java von Kopf bis Fuß</Title>
<TradeInValue>
<Amount>1960</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 19,60</FormattedPrice>
</TradeInValue>
</ItemAttributes>
<OfferSummary>
<LowestNewPrice>
<Amount>4500</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 45,00</FormattedPrice>
</LowestNewPrice>
<LowestUsedPrice>
<Amount>4181</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 41,81</FormattedPrice>
</LowestUsedPrice>
<TotalNew>88</TotalNew>
<TotalUsed>8</TotalUsed>
<TotalCollectible>0</TotalCollectible>
<TotalRefurbished>0</TotalRefurbished>
</OfferSummary>
</Item>
</Items>
</ItemLookupResponse>
[/XML]


Habe meine Zugriffs-ID in AWS_ACCESS_KEY_ID für das Forum ersetzt.

Mi


----------



## ARadauer (21. Sep 2012)

ok... sehr gut schaut das aus... das sollte passen... warum kann er es nicht parsen... mhn

ok... da haben wir das problem... 
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://webservices.amazon.com/AWSECommerceService/*2011-08-01*", local:"ItemLookupResponse").

Expected elements are <{http://webservices.amazon.com/AWSECommerceService/2010-11-01} blabla blabalb 

blabal balab
Accessorieshttp://webservices.amazon.com/AWSECommerceService/<b>*2010-11-01*</b>}ItemLookupResponse>,<{http://webservices.amazon.com/AWSECommerceService/2010-11-01}ItemSearch

moment...


----------



## MiMa (21. Sep 2012)

Bei den Generated Sources (jaxb) hat ger folgendes Package erzeugt

```
com.amazon.webservices.awsecommerceservice._2011_08_01
```

in der ca 80 Klassen enthalten sind

Mi


----------



## ARadauer (21. Sep 2012)

Also in dem Beitrag von mir
http://www.java-forum.org/java-basi...rmationen-internet-abgleichen.html#post941156

Hab ich auf diese WSDL verlinkt:
http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl
diese liefert bei mir diese Dinge "....targetNamespace="http://webservices.amazon.com/AWSECommerceService/2011-08-01" "...
2011-08-01

Im Code darunter steht auch params.put("Version", "2011-08-01");

Passt also.. verstehe gerade nicht mhn warum kommt da beim Service.. 2010-11-01 zurück...

Zeig mal die url..


----------



## MiMa (21. Sep 2012)

Die URL ist:


```
http://ecs.amazonaws.de/onca/xml?AWSAccessKeyId=ACCESS_KEY&AssociateTag=aradauersig-21&IdType=ISBN&ItemId=3897214482&Operation=ItemLookup&ResponseGroup=Medium&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2012-09-21T08%3A34%3A27Z&Version=2011-08-01&Signature=oeb6bLdftvsVcXU5Xtbm8%2BKQCG4O7cF3QCun6oKazP4%3D
```

Mi


----------



## ARadauer (21. Sep 2012)

Version=2011-08-01... stimmt... versteh ich nicht..
ich meld mich am Abend... ich schau mir nochmal genau an, wie das bei mir ist...


----------



## MiMa (21. Sep 2012)

Wenn es hilft, kann ich Dir per email das Netbeansprojekt mal zusenden.

Danke 
Mi


----------



## MiMa (25. Sep 2012)

Ark hat gesagt.:


> 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 (25. Sep 2012)

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:


```
?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]


----------



## MiMa (25. Sep 2012)

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 (26. Sep 2012)

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!

Warrior7777


----------



## MiMa (26. Sep 2012)

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


----------



## insane80 (26. Sep 2012)

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:


```
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


----------



## MiMa (26. Sep 2012)

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


----------



## insane80 (26. Sep 2012)

Meinst Du die? 
Let me google that for you

Oder meinst Du, wo Du das in der Console findest?


----------



## MiMa (26. Sep 2012)

Die Seiten habe ich schon gefunden, aber nicht den richtigen Donwloadlink für die Book API.

https://developers.google.com/books/docs/v1/libraries

Wenn ich auf Google Books Client Library for Java klicke erhalte ich Error 404.
Den api client habe ich schon geladen.

Kannst Du mir die Book API per email senden ?

Mi.


----------



## MiMa (1. Okt 2012)

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:


```
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 (2. Okt 2012)

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 (2. Okt 2012)

Juhu :toll:

Ich habe es geschafft.


```
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


----------

