1

我刚刚开始使用 ebay查找 API反馈 API,我需要在 GAE/J 上部署一个基本的 API 实现。

问题是:

  1. 我们如何从 ebay SDK 的本地开发环境入手?

  2. Find API 和反馈没有 Java 教程。

  3. GAE/J + ebay API 不会造成任何复杂性,对吧?

我正在寻找正确的方向,我正在使用 Eclipse + GAE 插件。

4

2 回答 2

4

一个完整的例子永远不会伤害任何人,所以我将发布一个我用来使用 ebay REST API 获取信息的代码示例

package ebay;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import ebay.URLReader;

/**
 *
 * @author rajeev jha (xxx@yyy.com)
 *
 */
public class EbayDriver {

    public final static String EBAY_APP_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public final static String EBAY_FINDING_SERVICE_URI = "http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME="
            + "{operation}&SERVICE-VERSION={version}&SECURITY-APPNAME="
            + "{applicationId}&GLOBAL-ID={globalId}&keywords={keywords}"
            + "&paginationInput.entriesPerPage={maxresults}";
    public static final String SERVICE_VERSION = "1.0.0";
    public static final String OPERATION_NAME = "findItemsByKeywords";
    public static final String GLOBAL_ID = "EBAY-US";
    public final static int REQUEST_DELAY = 3000;
    public final static int MAX_RESULTS = 10;
    private int maxResults;

    public EbayDriver() {
        this.maxResults = MAX_RESULTS;

    }

    public EbayDriver(int maxResults) {
        this.maxResults = maxResults;
    }

    public String getName() {
        return IDriver.EBAY_DRIVER;
    }

    public void run(String tag) throws Exception {

        String address = createAddress(tag);
        print("sending request to :: ", address);
        String response = URLReader.read(address);
        print("response :: ", response);
        //process xml dump returned from EBAY
        processResponse(response);
        //Honor rate limits - wait between results
        Thread.sleep(REQUEST_DELAY);


    }

    private String createAddress(String tag) {

        //substitute token
        String address = EbayDriver.EBAY_FINDING_SERVICE_URI;
        address = address.replace("{version}", EbayDriver.SERVICE_VERSION);
        address = address.replace("{operation}", EbayDriver.OPERATION_NAME);
        address = address.replace("{globalId}", EbayDriver.GLOBAL_ID);
        address = address.replace("{applicationId}", EbayDriver.EBAY_APP_ID);
        address = address.replace("{keywords}", tag);
        address = address.replace("{maxresults}", "" + this.maxResults);

        return address;

    }

    private void processResponse(String response) throws Exception {


        XPath xpath = XPathFactory.newInstance().newXPath();
        InputStream is = new ByteArrayInputStream(response.getBytes("UTF-8"));
        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = domFactory.newDocumentBuilder();


        Document doc = builder.parse(is);
        XPathExpression ackExpression = xpath.compile("//findItemsByKeywordsResponse/ack");
        XPathExpression itemExpression = xpath.compile("//findItemsByKeywordsResponse/searchResult/item");

        String ackToken = (String) ackExpression.evaluate(doc, XPathConstants.STRING);
        print("ACK from ebay API :: ", ackToken);
        if (!ackToken.equals("Success")) {
            throw new Exception(" service returned an error");
        }

        NodeList nodes = (NodeList) itemExpression.evaluate(doc, XPathConstants.NODESET);

        for (int i = 0; i < nodes.getLength(); i++) {

            Node node = nodes.item(i);

            String itemId = (String) xpath.evaluate("itemId", node, XPathConstants.STRING);
            String title = (String) xpath.evaluate("title", node, XPathConstants.STRING);
            String itemUrl = (String) xpath.evaluate("viewItemURL", node, XPathConstants.STRING);
            String galleryUrl = (String) xpath.evaluate("galleryURL", node, XPathConstants.STRING);

            String currentPrice = (String) xpath.evaluate("sellingStatus/currentPrice", node, XPathConstants.STRING);

            print("currentPrice", currentPrice);
            print("itemId", itemId);
            print("title", title);
            print("galleryUrl", galleryUrl);

        }

        is.close();

    }

    private void print(String name, String value) {
        System.out.println(name + "::" + value);
    }

    public static void main(String[] args) throws Exception {
        EbayDriver driver = new EbayDriver();
        String tag = "Velo binding machine";
        driver.run(java.net.URLEncoder.encode(tag, "UTF-8"));

    }
}

这是 URLReader 类

package ebay;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/**
 *
 * @author rajeev jha(xxx@yyy.com)
 * 
 */
public class URLReader {

    public static String read(String address) throws Exception{

        URL url = new URL(address);
        URLConnection connection = url.openConnection();
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8");

        String line;
        String response;
        long totalBytes = 0  ;

        StringBuilder builder = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        while ((line = reader.readLine()) != null) {
            builder.append(line);
            totalBytes += line.getBytes("UTF-8").length ;
            //System.out.println("Total bytes read ::  " + totalBytes);
        }

        response = builder.toString();

        return response ;
    }

}

快乐编码!

于 2010-08-10T10:21:13.977 回答
1

分步指南:http: //developer.ebay.com/DevZone/XML/docs/HowTo/FirstCall/MakingCallJava.html


明白了,最简单的实现可以是 HTTP GET/POST:(使用名称-值(NV)对)

http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords
   &SERVICE-VERSION=1.0.0
   &SECURITY-APPNAME=YourAppID
   &RESPONSE-DATA-FORMAT=XML
   &REST-PAYLOAD
   &keywords=harry%20potter%20phoenix

来源

现在,如果您将 SECURITY-APPNAME 指定为 appid,它将返回 XML 中的项目列表。现在我只需要将 XML 格式化为 HTML。

示例:thelostlogbook.appspot.com

构建使用:JSP、http 请求(POST)

于 2010-06-02T21:37:11.257 回答