Skip to content

Commit d9712a6

Browse files
committed
refactoring Extractors
1 parent eba2d86 commit d9712a6

File tree

1 file changed

+54
-69
lines changed

1 file changed

+54
-69
lines changed

src/main/java/im/nll/data/extractor/Extractors.java

Lines changed: 54 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -83,60 +83,41 @@ public String asString() {
8383
for (Extractor extractor : extractors) {
8484
result = extractor.extract(result);
8585
}
86-
List<Filter> filters = filtersMap.getOrDefault(DEFAULT_FIELD, Lists.newLinkedList());
87-
for (Filter filter : filters) {
88-
result = filter.process(result);
89-
}
86+
result = filter(DEFAULT_FIELD, result);
9087
return result;
9188
}
9289

9390
public Map<String, String> asMap() {
94-
Map<String, String> map = Maps.newLinkedHashMap();
95-
for (Map.Entry<String, List<Extractor>> one : extractorsMap.entrySet()) {
96-
String name = one.getKey();
97-
List<Extractor> extractors = one.getValue();
98-
String result = html;
99-
for (Extractor extractor : extractors) {
100-
result = extractor.extract(result);
101-
}
102-
List<Filter> filters = filtersMap.getOrDefault(name, Lists.newLinkedList());
103-
for (Filter filter : filters) {
104-
result = filter.process(result);
105-
}
106-
try {
107-
map.put(name, result);
108-
} catch (Exception e) {
109-
LOGGER.error("convert to map error! can't set '{}' with '{}'", name, result, e);
110-
}
111-
}
112-
return map;
91+
return extractMap(html);
11392
}
11493

94+
11595
public List<Map<String, String>> asMapList() {
11696
Validate.notNull(htmlList, "must split first!");
11797
List<Map<String, String>> mapList = Lists.newLinkedList();
11898
for (String input : htmlList) {
119-
Map<String, String> map = Maps.newLinkedHashMap();
120-
for (Map.Entry<String, List<Extractor>> one : extractorsMap.entrySet()) {
121-
String name = one.getKey();
122-
List<Extractor> extractors = one.getValue();
123-
String result = input;
124-
for (Extractor extractor : extractors) {
125-
result = extractor.extract(result);
126-
}
127-
List<Filter> filters = filtersMap.getOrDefault(name, Lists.newLinkedList());
128-
for (Filter filter : filters) {
129-
result = filter.process(result);
130-
}
131-
map.put(name, result);
132-
}
133-
mapList.add(map);
99+
mapList.add(extractMap(input));
134100
}
135101
return mapList;
136102
}
137103

138104

139105
public <T> T asBean(Class<T> clazz) {
106+
return extractBean(html, clazz);
107+
}
108+
109+
public <T> List<T> asBeanList(Class<T> clazz) {
110+
Validate.notNull(htmlList, "must split first!");
111+
List<T> entityList = Lists.newLinkedList();
112+
for (String input : htmlList) {
113+
entityList.add(extractBean(input, clazz));
114+
}
115+
return entityList;
116+
}
117+
118+
//------------ internal --------------//
119+
120+
private <T> T extractBean(String html, Class<T> clazz) {
140121
T entity = Reflect.on(clazz).create().get();
141122
for (Map.Entry<String, List<Extractor>> one : extractorsMap.entrySet()) {
142123
String name = one.getKey();
@@ -145,10 +126,7 @@ public <T> T asBean(Class<T> clazz) {
145126
for (Extractor extractor : extractors) {
146127
result = extractor.extract(result);
147128
}
148-
List<Filter> filters = filtersMap.getOrDefault(name, Lists.newLinkedList());
149-
for (Filter filter : filters) {
150-
result = filter.process(result);
151-
}
129+
result = filter(name, result);
152130
try {
153131
Reflect.on(entity).set(name, result);
154132
} catch (Exception e) {
@@ -158,36 +136,41 @@ public <T> T asBean(Class<T> clazz) {
158136
return entity;
159137
}
160138

161-
public <T> T asBean(EntityExtractor<T> entityExtractor) {
162-
T entity = entityExtractor.extract(html);
163-
return entity;
139+
private Map<String, String> extractMap(String html) {
140+
Map<String, String> map = Maps.newLinkedHashMap();
141+
for (Map.Entry<String, List<Extractor>> one : extractorsMap.entrySet()) {
142+
String name = one.getKey();
143+
List<Extractor> extractors = one.getValue();
144+
String result = html;
145+
for (Extractor extractor : extractors) {
146+
result = extractor.extract(result);
147+
}
148+
result = filter(name, result);
149+
try {
150+
map.put(name, result);
151+
} catch (Exception e) {
152+
LOGGER.error("convert to map error! can't set '{}' with '{}'", name, result, e);
153+
}
154+
}
155+
return map;
164156
}
165157

166-
public <T> List<T> asBeanList(Class<T> clazz) {
167-
Validate.notNull(htmlList, "must split first!");
168-
List<T> entityList = Lists.newLinkedList();
169-
for (String input : htmlList) {
170-
T entity = Reflect.on(clazz).create().get();
171-
for (Map.Entry<String, List<Extractor>> one : extractorsMap.entrySet()) {
172-
String name = one.getKey();
173-
List<Extractor> extractors = one.getValue();
174-
String result = input;
175-
for (Extractor extractor : extractors) {
176-
result = extractor.extract(result);
177-
}
178-
List<Filter> filters = filtersMap.getOrDefault(name, Lists.newLinkedList());
179-
for (Filter filter : filters) {
180-
result = filter.process(result);
181-
}
182-
try {
183-
Reflect.on(entity).set(name, result);
184-
} catch (Exception e) {
185-
LOGGER.error("convert to bean error! can't set '{}' with '{}'", name, result, e);
186-
}
187-
}
188-
entityList.add(entity);
158+
private String filter(String name, String result) {
159+
List<Filter> filters = filtersMap.getOrDefault(name, Lists.newLinkedList());
160+
for (Filter filter : filters) {
161+
result = filter.process(result);
189162
}
190-
return entityList;
163+
return result;
164+
}
165+
166+
//------------ internal --------------//
167+
168+
169+
//------------ custom process --------------//
170+
171+
public <T> T asBean(EntityExtractor<T> entityExtractor) {
172+
T entity = entityExtractor.extract(html);
173+
return entity;
191174
}
192175

193176
public <T> List<T> asBeanList(EntityExtractor<T> entityExtractor) {
@@ -203,6 +186,8 @@ public <T> List<T> asBeanList(EntityExtractor<T> entityExtractor) {
203186
public <T> List<T> asBeanList(EntityListExtractor<T> entityListExtractor) {
204187
return entityListExtractor.extractList(html);
205188
}
189+
//------------ custom process --------------//
190+
206191

207192
public static Extractor selector(String query) {
208193
return new SelectorExtractor(query);

0 commit comments

Comments
 (0)