【问题标题】:Implement eBay Finding/Feedback API实施 eBay 查找/反馈 API
【发布时间】:2010-06-02 18:04:08
【问题描述】:

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

问题是:

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

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

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

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

【问题讨论】:

    标签: java ebay-sdk


    【解决方案1】:

    一个完整的例子永远不会伤害任何人,所以我将发布一个我用来使用 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 ;
        }
    
    }
    

    编码愉快!

    【讨论】:

      【解决方案2】:

      分步指南: 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
      

      Source

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

      示例:thelostlogbook.appspot.com

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多