Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
automatic-test
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟涨钱
automatic-test
Commits
2feea950
Commit
2feea950
authored
Sep 06, 2021
by
朽木不可雕也
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
backup
parent
deca54a2
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
368 additions
and
5 deletions
+368
-5
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/entity/BarrageCollectionTask.java
+0
-2
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/entity/BarrageTaskResponse.java
+28
-0
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/enums/BarrageStatusEnums.java
+26
-0
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/enums/PlatformEnum.java
+24
-0
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/exporttasks/BiliBiliExportTaskJob.java
+13
-1
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/util/JsonPretty.java
+273
-0
barrage-crawler-server/src/test/java/com/zhiweidata/automatictest/barragecrawlerserver/exporttasks/BiliBiliExportTaskJobTest.java
+4
-2
No files found.
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/entity/BarrageCollectionTask.java
View file @
2feea950
...
...
@@ -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
));
...
...
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/entity/BarrageTaskResponse.java
0 → 100644
View file @
2feea950
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
;
}
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/enums/BarrageStatusEnums.java
0 → 100644
View file @
2feea950
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
}
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/enums/PlatformEnum.java
0 → 100644
View file @
2feea950
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
,
/**
* 斗鱼
*/
斗鱼
,
/**
* 虎牙
*/
虎牙
;
}
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/exporttasks/BiliBiliExportTaskJob.java
View file @
2feea950
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
);
}
...
...
barrage-crawler-server/src/main/java/com/zhiweidata/automatictest/barragecrawlerserver/util/JsonPretty.java
0 → 100644
View file @
2feea950
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
barrage-crawler-server/src/test/java/com/zhiweidata/automatictest/barragecrawlerserver/exporttasks/BiliBiliExportTaskJobTest.java
View file @
2feea950
...
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment