Commit 2feea950 by 朽木不可雕也

backup

parent deca54a2
......@@ -58,11 +58,9 @@ public class BarrageCollectionTask {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(currentTime);
// calendar.set(Calendar.MINUTE, 0);
calendar.add(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
// calendar.add(Calendar.HOUR_OF_DAY, 1);
this.startTime = (int) (calendar.getTimeInMillis() / 1000);
int minute = (int) (Math.random() * (MAX_COLLECTION_TIME + 1));
......
package com.zhiweidata.automatictest.barragecrawlerserver.entity;
import com.zhiweidata.automatictest.barragecrawlerserver.enums.BarrageStatusEnums;
import com.zhiweidata.automatictest.barragecrawlerserver.enums.PlatformEnum;
import java.io.Serializable;
import lombok.Data;
/**
* 弹幕信息实体类
*
* @author aszswaz
* @createTime 2021-09-06 11:40:09
* @ide IntelliJ IDEA
*/
@SuppressWarnings("JavaDoc")
@Data
public class BarrageTaskResponse implements Serializable {
private String id;
private String name;
private String url;
private String roomId;
private int startTime;
private int endTime;
private BarrageStatusEnums status;
private PlatformEnum platform;
private int createTime;
private int collectionCount;
}
package com.zhiweidata.automatictest.barragecrawlerserver.enums;
/**
* @author aszswaz
* @createTime 2021-09-06 11:59:49
* @ide IntelliJ IDEA
*/
@SuppressWarnings({"JavaDoc", "unused"})
public enum BarrageStatusEnums {
/**
* 等待中
*/
WAIT,
/**
* 采集中
*/
COLLECTING,
/**
* 采集失败
*/
FAIL,
/**
* 已结束
*/
ENDED
}
package com.zhiweidata.automatictest.barragecrawlerserver.enums;
/**
* 直播平台
*
* @author aszswaz
* @date 2021/7/20 15:28:45
* @IDE IntelliJ IDEA
*/
@SuppressWarnings({"JavaDoc", "NonAsciiCharacters", "unused"})
public enum PlatformEnum {
/**
* bilibili
*/
BILIBILI,
/**
* 斗鱼
*/
斗鱼,
/**
* 虎牙
*/
虎牙;
}
package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask;
import com.zhiweidata.automatictest.barragecrawlerserver.util.JsonPretty;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
......@@ -38,7 +41,16 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob {
BarrageCollectionTask collectionTask = (BarrageCollectionTask) requireNonNull(dataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY));
String url = BASE_URL + "tasks?limit=20&page=1&name=" + collectionTask.getName();
HttpResponse response = HTTP_CLIENT.execute(new HttpGet(url));
log.info(EntityUtils.toString(response.getEntity()));
ObjectMapper jsonMapper = new ObjectMapper();
Map<?, ?> jsonMap = jsonMapper.readValue(EntityUtils.toString(response.getEntity()), Map.class);
int code = (Integer) jsonMap.get("code");
if (code != 200) {
log.error((String) jsonMap.get("message"));
return;
}
log.info("{}{}", System.lineSeparator(), jsonMapper.writer(new JsonPretty()).writeValueAsString(jsonMap));
} catch (Exception e) {
log.error(e.getMessage(), e);
}
......
package com.zhiweidata.automatictest.barragecrawlerserver.util;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonStreamContext;
import com.fasterxml.jackson.core.PrettyPrinter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.jetbrains.annotations.NotNull;
/**
* json格式化输出,
* 请注意,本json格式化工具类,对json进行了换行、缩进、高亮,因此增加了CPU的资源消耗,最适合应用于本地开发时的json日志打印,不建议应用于大量的json数据场景
*
* @author aszswaz
* @createTime 2021-08-05 22:57:40
* @ide IntelliJ IDEA
*/
@SuppressWarnings({"JavaDoc", "unused"})
public class JsonPretty implements PrettyPrinter {
/**
* 缩进层次
*/
private int indentation = 0;
/**
* 制表符
*/
private static final String TABS = " ";
/**
* 字段的高亮颜色
*/
private static final String KEY_COLOR = "\033[35m";
/**
* null 布尔值高亮
*/
private static final String NULL_BOOLEAN_COLOR = "\033[33m";
/**
* 数值颜色
*/
private static final String NUMBER_COLOR = "\033[34m";
/**
* 字符串颜色
*/
private static final String STRING_COLOR = "\033[32m";
/**
* 是否需要高亮
*/
private final boolean ansi;
public JsonPretty() {
this.ansi = true;
}
public JsonPretty(boolean ansi) {
this.ansi = ansi;
}
/**
* 根元素分割符
*/
@Override
public void writeRootValueSeparator(@NotNull JsonGenerator gen) throws IOException {
gen.writeRaw(',');
gen.writeRaw(System.lineSeparator());
}
/**
* 一个新的对象开始输出之前,由于可能会出现空对象,所以,层级缩进操作放在 {@link #beforeObjectEntries(JsonGenerator)}
*/
@Override
public void writeStartObject(@NotNull JsonGenerator gen) throws IOException {
gen.writeRaw('{');
}
/**
* 对象输出完毕
*/
@Override
public void writeEndObject(@NotNull JsonGenerator gen, int nrOfEntries) throws IOException {
// 关闭上一个值的高亮
this.closureAnsi(gen);
if (nrOfEntries > 0) {
gen.writeRaw(System.lineSeparator());
// 递减缩进的层级
this.indentation = Math.max(0, this.indentation - 1);
this.writeTabs(gen);
}
gen.writeRaw("}");
}
/**
* 对象属性分割符
*/
@Override
public void writeObjectEntrySeparator(@NotNull JsonGenerator gen) throws IOException {
// 关闭上一个值的高亮
this.closureAnsi(gen);
gen.writeRaw(',');
gen.writeRaw(System.lineSeparator());
this.writeTabs(gen);
// 开启下一个 KEY 的高亮
if (this.ansi) gen.writeRaw(KEY_COLOR);
}
/**
* 对象的字段和值的分割符
*/
@Override
public void writeObjectFieldValueSeparator(@NotNull JsonGenerator gen) throws IOException {
try {
// 关闭上一个 KEY 的高亮
this.closureAnsi(gen);
gen.writeRaw(": ");
if (!this.ansi) return;
JsonStreamContext streamContext = gen.getOutputContext();
final String name = streamContext.getCurrentName();
final Object obj = streamContext.getCurrentValue();
Object value;
if (obj instanceof Map) {
value = ((Map<?, ?>) obj).get(name);
this.writeAnsi(gen, value);
} else {
Class<?> aClass = obj.getClass();
while (Objects.nonNull(aClass) && aClass != Object.class) {
// 先对比注解
final Field[] fields = aClass.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(JsonProperty.class)) {
if (name.equals(field.getAnnotation(JsonProperty.class).value())) {
value = this.invokeGet(aClass, obj, field);
this.writeAnsi(gen, value);
return;
}
}
}
// 对比属性名称
for (Field field : fields) {
if (name.equals(field.getName())) {
value = this.invokeGet(aClass, obj, field);
this.writeAnsi(gen, value);
return;
}
}
// 当前类没发现对应的属性,就去扫描父类
aClass = aClass.getSuperclass();
}
}
} catch (ReflectiveOperationException e) {
throw new JsonGenerationException(e.getMessage(), e, gen);
}
}
/**
* 一个数组开始输出之前,由于可能会出现空数据,所以,缩进层级操作放在{@link #beforeArrayValues(JsonGenerator)}
*/
@Override
public void writeStartArray(@NotNull JsonGenerator gen) throws IOException {
gen.writeRaw('[');
}
/**
* 一个数组输出完毕
*/
@Override
public void writeEndArray(@NotNull JsonGenerator gen, int nrOfValues) throws IOException {
this.closureAnsi(gen);
if (nrOfValues > 0) {
gen.writeRaw(System.lineSeparator());
this.indentation = Math.max(0, this.indentation - 1);
this.writeTabs(gen);
}
gen.writeRaw(']');
}
/**
* 数组中的元素分割符
*/
@Override
public void writeArrayValueSeparator(@NotNull JsonGenerator gen) throws IOException {
this.closureAnsi(gen);
gen.writeRaw(',');
gen.writeRaw(System.lineSeparator());
this.writeTabs(gen);
// 高亮下一个元素
JsonStreamContext context = gen.getOutputContext();
// 这个索引已经指向下一个元素,所以直接获取就行
int index = context.getCurrentIndex();
List<?> list = (List<?>) context.getCurrentValue();
this.writeAnsi(gen, list.get(index));
}
/**
* 数组第一个元素开始输出之前
*/
@Override
public void beforeArrayValues(@NotNull JsonGenerator gen) throws IOException {
gen.writeRaw(System.lineSeparator());
// 递增缩进层级
this.indentation += 1;
this.writeTabs(gen);
// 给 value 设置高亮
JsonStreamContext context = gen.getOutputContext();
int index = context.getCurrentIndex();
Object value = ((List<?>) context.getCurrentValue()).get(index);
this.writeAnsi(gen, value);
}
/**
* 一个对象的第一个字段输出之前
*/
@Override
public void beforeObjectEntries(@NotNull JsonGenerator gen) throws IOException {
gen.writeRaw(System.lineSeparator());
this.indentation += 1;
this.writeTabs(gen);
if (this.ansi) gen.writeRaw(KEY_COLOR);
}
/**
* 输出 ANSI 颜色
*/
private void writeAnsi(JsonGenerator generator, Object value) throws IOException {
if (this.ansi) {
if (Objects.isNull(value) || value instanceof Boolean) {
generator.writeRaw(NULL_BOOLEAN_COLOR);
} else if (value instanceof String) {
generator.writeRaw(STRING_COLOR);
} else if (value instanceof Number) {
generator.writeRaw(NUMBER_COLOR);
}
}
}
/**
* 执行对象属性的get方法
*/
private Object invokeGet(@NotNull Class<?> aClass, Object obj, @NotNull Field field) throws ReflectiveOperationException {
char[] chars = field.getName().toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
String camelCase = new String(chars);
Class<?> type = field.getType();
if (type == boolean.class) {
return aClass.getMethod("is" + camelCase).invoke(obj);
} else {
return aClass.getMethod("get" + camelCase).invoke(obj);
}
}
/**
* 闭合 ANSI颜色
*/
private void closureAnsi(@NotNull JsonGenerator jsonGenerator) throws IOException {
if (this.ansi) {
jsonGenerator.writeRaw("\033[0m");
}
}
/**
* 按照层级,输出制表符
*/
private void writeTabs(JsonGenerator generator) throws IOException {
for (int i = 0; i < this.indentation; i++) {
generator.writeRaw(TABS);
}
}
}
\ No newline at end of file
......@@ -18,11 +18,11 @@ import static com.zhiweidata.automatictest.publics.BeanContainer.SCHEDULER;
@SuppressWarnings("JavaDoc")
class BiliBiliExportTaskJobTest {
public static void main(String[] args) throws SchedulerException {
public static void main(String[] args) throws SchedulerException, InterruptedException {
JobBuilder builder = JobBuilder.newJob(BiliBiliExportTaskJob.class);
BarrageCollectionTask collectionTask = new BarrageCollectionTask(
"https://live.bilibili.com/23351279?hotRank=0", "cc423a3c-21de-4eab-99be-2f28cd85e7ad", 1630894154000L
"https://live.bilibili.com/4354601?hotRank=0", "1857a60e-a70a-4977-977d-97d8e6e839a8", 1630894154000L
);
JobDataMap dataMap = new JobDataMap();
dataMap.put(BARRAGE_COLLECTION_TASK_JOB_KEY, collectionTask);
......@@ -31,6 +31,7 @@ class BiliBiliExportTaskJobTest {
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
triggerBuilder.startNow();
SCHEDULER.scheduleJob(builder.build(), triggerBuilder.build());
Thread.sleep(100);
SCHEDULER.shutdown(true);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment