我刚刚开始使用 ebay查找 API和反馈 API,我需要在 GAE/J 上部署一个基本的 API 实现。
问题是:
我们如何从 ebay SDK 的本地开发环境入手?
Find API 和反馈没有 Java 教程。
GAE/J + ebay API 不会造成任何复杂性,对吧?
我正在寻找正确的方向,我正在使用 Eclipse + GAE 插件。
一个完整的例子永远不会伤害任何人,所以我将发布一个我用来使用 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 ;
}
}
快乐编码!
分步指南: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)