记录:
开发配置:java、jdk1.8、idea、springboot、windows
一、拼多多
1、进入拼多多开放平台 http://open.pinduoduo.com/#/index 注册为开发者
2、进入控制台,创建一个应用,选择多多客联盟(也可选择其它),等待审核通过。
3、审核通过之后能够拿到client_id和client_secret
4、(PS:因我本地maven没安装,因此只能用线上)在pom.xml中引入配置
javax.websocket
javax.websocket-client-api
1.0
org.glassfish.tyrus.bundles
tyrus-standalone-client
1.13.1
com.fasterxml.jackson.core
jackson-databind
2.9.6
commons-codec
commons-codec
1.10
org.apache.logging.log4j
log4j-core
2.11.1
org.apache.logging.log4j
log4j-api
2.11.1
org.apache.logging.log4j
log4j-slf4j-impl
2.11.1
org.apache.httpcomponents
httpclient
4.5.3
commons-io
commons-io
2.5
com.fasterxml.jackson.core
jackson-databind
2.8.11
具体配置可以参考 拼多多开发者文档->sdk指南,有明确标识有哪些jar包
然后先点击某个api,拉到最下面点击api工具测试,先测试是否可用(有的没有权限,需要申请)
最后在控制器里面进行测试调用:拼多多是post请求,并且有签名。看官网的教程是有类的,可以直接set设置值,但不知道为啥引入jar包之后还是不能用。就只能手动拼接
1、生成签名,签名的规则在sdk指南中有明确说明,对于数据进行首字母排序,并在数据的首尾加上client_secret
我个人用了两种方式:第一,最原始的,自己看有哪些参数,然后一个一个拼接。
//拼接签名
String signD = pddUtil.client_secret +"client_id"+ pddUtil.client_id + "data_typeJSON"
+ "sort_type0" +"timestamp"+timestamp+ "typepdd.ddk.goods.search"
+ "with_coupontrue"+pddUtil.client_secret;
//生成签名
String encode = MD5Util.encode(signD);
第二种采用map,然后转为string
//获得时间戳(10位)
long timeStampSec = System.currentTimeMillis()/1000;
String timestamp = String.format("%010d", timeStampSec);
//设置参数
Map map = new TreeMap();
map.put("type", "pdd.ddk.goods.search");
map.put("data_type", "JSON");
map.put("timestamp", timestamp);
map.put("client_id", pddUtil.client_id);
map.put("sort_type", "0");
map.put("with_coupon", "true");
//转换数据为String
StringBuilder sb = new StringBuilder(pddUtil.client_secret);//应规则首尾加上client_secret
for (Map.Entry entry : map.entrySet()) {
String name = (String) entry.getKey();
String value = (String) entry.getValue();
//检测参数是否为空
if (this.areNotEmpty(new String[]{name, value})) {
sb.append(name).append(value);
}
}
sb.append(pddUtil.client_secret);//应规则首尾加上client_secret
//进行签名
String sign = MD5Util.encode(sb.toString());
//验证是否为空
public static boolean areNotEmpty(String[] values) {
boolean result = true;
if ((values == null) || (values.length == 0))
result = false;
else {
for (String value : values) {
result &= !isEmpty(value);
}
}
return result;
}
2、发送请求,正式请求地址:https://gw-api.pinduoduo.com/api/router
//post参数
String param = "type=pdd.ddk.goods.search&data_type=JSON×tamp="+
timestamp +"&client_id="+pddUtil.client_id+
"&sort_type=0&with_coupon=true&opt_id"+id+"&sign="+encode;
//发起请求
String s = api.sendPost(pddUtil.getURL(), param);
//打印结果
return s;
结果:到此拼多多结束
最后记录,推广采用优惠券,调用接口为:1、pdd.ddk.goods.search 2、pdd.ddk.goods.promotion.url.generate即可最后结果为 拼多多接口有返回数据,对应的可以拉起拼多多或者就网页等可以自行选择
不需要去自己拼接,不需要注意参数的顺序,工具类已经上传。
PS:若是注册的多多客,应用是多多客(即我文章这种,当你应用审核通过之后拿到了client_id以后,需要到http://jinbao.pinduoduo.com/ 多多进宝去绑定client_id)否则没有权限调用API
二、淘宝
1、进入 淘宝开发者平台 http://open.taobao.com/ 进行开发者注册
2、进入创建应用,创建成功能够得到appkey和appsecret
3、下载sdk,进入控制台,进入其中一个应用的SDK下载页面,选择自己语言的sdk下载
com.taobao
taobao-sdk-java-auto_1468685308771
20181109
com.taobao
taobao-sdk-java-auto_1468685308771-20181109
source
具体怎么引入可以百度maven怎么引入外部jar包(我这里大概说下1、pom.xml中配置好,名字随便取,只要
5、查看 淘宝客api 进行调用(看看调用以及示例)淘宝只要引入了jar包就可以直接使用对象方便快捷。
结果:
//构建系统参数
TaobaoClient client = new DefaultTaobaoClient(url, appkey, appsecret);
//构建可变参数
TbkDgItemCouponGetRequest req = new TbkDgItemCouponGetRequest();
req.setAdzoneId(56322550367L);
req.setQ(name);
req.setPageSize(20L);
//实例化请求类
TbkDgItemCouponGetResponse response = new TbkDgItemCouponGetResponse();
try {
//请求
response = client.execute(req);
} catch (ApiException e) {
e.printStackTrace();
}
//打印结果
return response.getResults();
若是优惠券需要:1、taobao.tbk.item.get(商品查询接口) 2、taobao.tbk.dg.item.coupon.get 在进行一点匹配,判断操作即可
结果:
PS:若是要区分天猫或者淘宝,判断 user_type Number 1 卖家类型,0表示集市,1表示商城
PS:对于淘宝的商品详情
第一种采用爬取,根据接口返回的详情页转换为h5手机页面,然后爬取图片。
第二种是采用第三方,如大淘客啥的等通过第三方平台查询(数据没那么同步,有的查询不到)。
第三种采用接口,淘宝接口查询详情。
到此淘宝结束
三、京东
1、进入京东联盟 https://media.jd.com
2、创建 应用(根据需要是网站还是app)
3、审核通过(7个工作日)之后,在推广管理里面找到你的app或者网站,点击查看,获得appkey和secretkey
4、下载sdk(这里有个坑,京东联盟里面死都找不到进入sdk的路径最后问的客服>_<)https://news.jd.com/153_1.html 下载下来就一个jar包
5、项目引入sdk
com.jingdong
jd-cps-client
1.0
6、若没有引用好,就如上面的拼多多,那就只能自己拼接写原生
public Object test(){
//设置参数
Map map = new TreeMap();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//时间格式
map.put("timestamp", sdf.format(new Date()));
map.put("v", "1.0");
map.put("sign_method", "md5");
map.put("format", "json");
map.put("method", "jd.union.open.order.query");
//param_json为空的时候需要写成 "{}"
map.put("param_json", "{\"orderReq\":{\"time\":\"20181112\",\"pageNo\":1,\"pageSize\":20,\"type\":1}}");
map.put("access_token", accessToken);
map.put("app_key", appKey);
StringBuilder sb = new StringBuilder(appSecret);//应规则首尾加上appSecret
for (Map.Entry entry : map.entrySet()) {
String name = (String) entry.getKey();
String value = (String) entry.getValue();
//检测参数是否为空
if (this.areNotEmpty(new String[]{name, value})) {
sb.append(name).append(value);
}
}
sb.append(appSecret);//应规则首尾加上appSecret
//生成签名
String encode = MD5Util.encode(sb.toString());
//拼接请求参数
String prarm = "sign="+encode+"×tamp="+map.get("timestamp")+"&v=1.0"+
"&sign_method=md5&format=json&method=jd.union.open.order.query"+
"¶m_json={\"orderReq\":{\"time\":\"20181112\",\"pageNo\":1,\"pageSize\":20,\"type\":1}}"+
"&access_token="+accessToken+"&app_key="+appKey;
String s = api.sendPost(SERVER_URL, prarm);//发送post请求
//打印
return s;
}
若引用上了,则可以使用类
public Object test2(){
//构建系统参数
JdClient client=new DefaultJdClient(SERVER_URL,accessToken,appKey,appSecret);
//实例化封装请求参数类
UnionOpenOrderQueryRequest unionOpenOrderQueryRequest = new UnionOpenOrderQueryRequest();
//设置变动参数
OrderReq orderReq = new OrderReq();
orderReq.setPageNo(1);
orderReq.setPageSize(3);
orderReq.setType(1);
orderReq.setTime("2018092018");
//封装
unionOpenOrderQueryRequest.setOrderReq(orderReq);
//请求
UnionOpenOrderQueryResponse response = null;
try {
response= client.execute(unionOpenOrderQueryRequest);
} catch (JdException e) {
e.printStackTrace();
}
//打印结果
return response;
}
若生成优惠券~~~~~~~~~~还需要申请权限。。麻烦,后面在发
京东开始只能采取嵌入广告的形式,等订单量起来了,才能申请权限。具体京东开放平台有写,就是获取京东的代码放到自己的app或者网站里面,达到推广的效果。