package com.geccocrawler.gecco.demo.jd;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.util.List;
import net.sf.cglib.beans.BeanMap;
import com.alibaba.fastjson.JSON;
import com.geccocrawler.gecco.annotation.FieldRenderName;
import com.geccocrawler.gecco.downloader.DownloaderContext;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.response.HttpResponse;
import com.geccocrawler.gecco.spider.SpiderBean;
import com.geccocrawler.gecco.spider.render.CustomFieldRender;
@FieldRenderName("jdPricesFieldRender")
public class JdPricesFieldRender implements CustomFieldRender {
@Override
public void render(HttpRequest request, HttpResponse response, BeanMap beanMap, SpiderBean bean, Field field) {
ProductList jd = (ProductList)bean;
StringBuffer sb = new StringBuffer();
/*for(String code : jd.getCodes()) {
sb.append("J_").append(code).append(",");
}*/
String skuIds = sb.toString();
try {
skuIds = URLEncoder.encode(skuIds, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String url = "http://p.3.cn/prices/mgets?skuIds="+skuIds;
HttpRequest subRequest = request.subRequest(url);
try {
HttpResponse subReponse = DownloaderContext.download(subRequest);
String json = subReponse.getContent();
List<JDPrice> prices = JSON.parseArray(json, JDPrice.class);
beanMap.put(field.getName(), prices);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}