package com.hao.fetcher;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import com.hao.util.HttpClientUtil;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import static com.hao.common.Commons.*;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Comparator;
import java.util.Map;
import static com.hao.common.Commons.*;
/**
* http://aam-china.contitech.de/pages/web-katalog/web-katalog_cn.cshtml
* Created by user on 2016/4/11.
*/
public class FetcherContitech {
public static Map<String,String> brands() {
String url = "http://aam-china.contitech.de/pages/web-katalog/web-katalog_cn.cshtml";
Document content = getDocument(url, "UTF-8");
Elements optElems = content.select("#Select1_Markenauswahl").select("option");
Map<String,String> brands = Maps.newTreeMap(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int i1 = Integer.parseInt(o1);
int i2 = Integer.parseInt(o2);
if (i1 > i2) {
return -1;
} else {
return 1;
}
}
});
optElems.stream().filter(optElem -> !optElem.attr("value").equals("0")).forEach(optElem -> brands.put(optElem.attr("value"),optElem.text()));
// System.out.println(brands);
return brands;
}
public static Map<String,String> models(String herstellerID) {
String url = "http://aam-china.contitech.de/pages/web-katalog/WebService.asmx/FahrzeugsucheModelleAuslesen";
Map<String,String> payloadMap = Maps.newLinkedHashMap();
payloadMap.put("HerstellerID",herstellerID);
String content = content(url,payloadMap);
Map<String, String> modelMap = parseContent(content);
// System.out.println(modelMap);
return modelMap;
}
public static Map<String, String> types(String modelId) {
String url = "http://aam-china.contitech.de/pages/web-katalog/WebService.asmx/FahrzeugsucheTypenAuslesen";
Map<String,String> payloadMap = Maps.newLinkedHashMap();
payloadMap.put("ModellID",modelId);
String content = content(url,payloadMap);
Map<String, String> typeMap = parseContent(content);
// System.out.println(typeMap);
return typeMap;
}
public static Map<String, String> art(String typId) {
String url = "http://aam-china.contitech.de/pages/web-katalog/WebService.asmx/FahrzeugsucheArtikelAuslesen";
Map<String,String> payloadMap = Maps.newLinkedHashMap();
payloadMap.put("TypID",typId);
String content = content(url, payloadMap);
Map<String, String> typeMap = parseContent(content);
Map<String,String> urlMap = Maps.newLinkedHashMap();
typeMap.forEach((k,v) -> {
String val = v.substring(0,v.indexOf("\""));
try {
val = URLEncoder.encode(val,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String specUrl = "http://aam-china.contitech.de/pages/pic/produkte.cshtml?lg=cn&applg=cn&ArtikelID=" + val;
urlMap.put(specUrl,v);
});
typeMap.putAll(urlMap);
// System.out.println(typeMap);
return typeMap;
}
public static String content(String url,Map<String,String> payloadMap) {
String content = HttpClientUtil.sendJsonHttpPost(url, payloadMap);
if (Strings.isNullOrEmpty(content)) {
content(url, payloadMap);
}
return content;
}
public static Map<String,String> parseContent(String json) {
json = json.replace("\\","");
json = json.replace(":\"",":").replace("\"}","}");
Map<String,String> map = Maps.newLinkedHashMap();
JSONObject jsonObject = JSON.parseObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("d");
for (int i = 0; i < jsonArray.size(); i++) {
JSONArray data = jsonArray.getJSONArray(i);
String value = "";
for (int k = 1; k < data.size(); k++) {
if (k == 1) {
value += data.getString(k) + "\"" + ",";
} else {
value += "\"" + data.getString(k) + "\"" + ",";
}
}
map.put(data.getString(0),value);
}
return map;
}
public static String spec(String url) {
Document document = getDocument(url, "UTF-8");
Elements trElems = document.select("#Technischedaten > tbody > tr");
String imgSrc = document.select("#StuecklistenHauptbild > img").attr("src");
String img = "http://aam-china.contitech.de/pages/pic/" + imgSrc;
String val = "";
for (Element trElem : trElems) {
Elements tdElems = trElem.select("td");
for (Element tdElem : tdElems) {
val += "\"" + tdElem.text() + "\"" + ",";
}
}
val += "\"" + img + "\"" + ",";
return val;
}
public static void execute(String filePath) throws IOException {
Map<String, String> brandMap = brands();
for (Map.Entry<String,String> brandEntry : brandMap.entrySet()) {
Map<String, String> modelMap = models(brandEntry.getKey());
for (Map.Entry<String,String> modelEntry : modelMap.entrySet()) {
Map<String, String> typeMap = types(modelEntry.getKey());
for (Map.Entry<String,String> typeEntry : typeMap.entrySet()) {
Map<String, String> artMap = art(typeEntry.getKey());
for (Map.Entry<String,String> artEntry : artMap.entrySet()) {
String data = "";
if (artEntry.getKey().startsWith("http:")) {
data = spec(artEntry.getKey());
}else{
continue;
}
String value = "\"" + brandEntry.getValue() + "\"" + "," +
"\"" + modelEntry.getValue() +
"\""+typeEntry.getValue() +
"\"" + artEntry.getValue() +
data;
writeStringtoFile(filePath,value + "\n",true);
System.out.println(value);
}
}
}
}
}
public static void main(String[] args) throws Exception {
// brands();
// models("99");
// types("1425");
// art("5146");
// spec("http://aam-china.contitech.de/pages/pic/produkte.cshtml?lg=cn&applg=cn&ArtikelID=AVX10X800");
execute("D:/tmp/tech0427.txt");
}
}