mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-28 01:09:40 -05:00
Changes:
- New event `onSuccessResponseMapping` triggered when Webcast.Message was successfully mapped to TikTokEvent - New Project Tools-collector: Tool generates instance of SqlLite database and collect to it both to events and exceptions occurred while TikTokLive client was running
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector;
|
||||
|
||||
import io.github.jwdeveloper.tiktok.TikTokLive;
|
||||
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveMessageException;
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.ExceptionInfoModel;
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokErrorModel;
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokMessageModel;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.Base64;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) throws SQLException {
|
||||
var tiktokUser = "mr_cios";
|
||||
var db = new TikTokDatabase("test");
|
||||
db.init();
|
||||
TikTokLive.newClient(tiktokUser)
|
||||
.onWebcastResponseDebug((liveClient, event) ->
|
||||
{
|
||||
var eventName = event.getEvent().getClass().getSimpleName();
|
||||
var binary = Base64.getEncoder().encodeToString(event.getMessage().getBinary().toByteArray());
|
||||
var model = TikTokMessageModel.builder()
|
||||
.type("message")
|
||||
.hostName(tiktokUser)
|
||||
.eventName(eventName)
|
||||
.eventContent(binary)
|
||||
.build();
|
||||
|
||||
db.insertMessage(model);
|
||||
System.out.println("EVENT: " + eventName);
|
||||
})
|
||||
.onError((liveClient, event) ->
|
||||
{
|
||||
var exception = event.getException();
|
||||
var exceptionContent = ExceptionInfoModel.getStackTraceAsString(exception);
|
||||
var builder = TikTokErrorModel.builder();
|
||||
if (exception instanceof TikTokLiveMessageException ex) {
|
||||
builder.hostName(tiktokUser)
|
||||
.errorName(ex.messageName())
|
||||
.errorType("error-message")
|
||||
.exceptionContent(exceptionContent)
|
||||
.message(ex.messageToBase64())
|
||||
.response(ex.webcastResponseToBase64());
|
||||
} else {
|
||||
builder.hostName(tiktokUser)
|
||||
.errorName(exception.getClass().getSimpleName())
|
||||
.errorType("error-system")
|
||||
.exceptionContent(exceptionContent)
|
||||
.message("")
|
||||
.response("");
|
||||
}
|
||||
|
||||
var error = builder.build();
|
||||
db.insertError(error);
|
||||
System.out.println("ERROR: "+error.getErrorName());
|
||||
exception.printStackTrace();
|
||||
|
||||
})
|
||||
.buildAndRun();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.db;
|
||||
|
||||
public class SqlConsts
|
||||
{
|
||||
public static String CREATE_MESSAGES_TABLE = """
|
||||
CREATE TABLE IF NOT EXISTS TikTokMessageModel (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
hostName TEXT,
|
||||
type TEXT,
|
||||
eventName TEXT,
|
||||
eventContent TEXT,
|
||||
createdAt TEXT
|
||||
);
|
||||
""";
|
||||
|
||||
public static String CREATE_ERROR_TABLE = """
|
||||
CREATE TABLE IF NOT EXISTS TikTokErrorModel (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
hostName VARCHAR(255),
|
||||
errorName VARCHAR(255),
|
||||
errorType VARCHAR(255),
|
||||
exceptionContent TEXT,
|
||||
message TEXT,
|
||||
response TEXT,
|
||||
createdAt DATETIME
|
||||
);
|
||||
""";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.db;
|
||||
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokErrorModel;
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokMessageModel;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.jdbi.v3.sqlobject.SqlObjectPlugin;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
public class TikTokDatabase
|
||||
{
|
||||
private final String database;
|
||||
private TikTokMessageModelDAO messagesTable;
|
||||
private TikTokErrorModelDAO errorTable;
|
||||
|
||||
public TikTokDatabase(String database) {
|
||||
this.database =database;
|
||||
}
|
||||
|
||||
public void init() throws SQLException {
|
||||
var jdbcUrl ="jdbc:sqlite:"+database+".db";
|
||||
var connection = DriverManager.getConnection(jdbcUrl);
|
||||
Jdbi jdbi = Jdbi.create(jdbcUrl)
|
||||
.installPlugin(new SqlObjectPlugin());
|
||||
jdbi.useHandle(handle -> {
|
||||
handle.execute(SqlConsts.CREATE_MESSAGES_TABLE);
|
||||
handle.execute(SqlConsts.CREATE_ERROR_TABLE);
|
||||
});
|
||||
messagesTable = jdbi.onDemand(TikTokMessageModelDAO.class);
|
||||
errorTable = jdbi.onDemand(TikTokErrorModelDAO.class);
|
||||
}
|
||||
|
||||
public void insertMessage(TikTokMessageModel message)
|
||||
{
|
||||
var dateFormat = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss.SSS");
|
||||
message.setCreatedAt(dateFormat.format(new Date()));
|
||||
messagesTable.insertTikTokMessage(message);
|
||||
}
|
||||
|
||||
public void insertError(TikTokErrorModel message)
|
||||
{
|
||||
var dateFormat = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss.SSS");
|
||||
message.setCreatedAt(dateFormat.format(new Date()));
|
||||
errorTable.insertTikTokMessage(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.db;
|
||||
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokErrorModel;
|
||||
|
||||
import org.jdbi.v3.sqlobject.customizer.BindBean;
|
||||
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
|
||||
|
||||
public interface TikTokErrorModelDAO
|
||||
{
|
||||
@SqlUpdate("INSERT INTO TikTokErrorModel (hostName, errorName, errorType, exceptionContent, message, response, createdAt) " +
|
||||
"VALUES (:hostName, :errorName, :errorType, :exceptionContent, :message, :response, :createdAt)")
|
||||
void insertTikTokMessage(@BindBean TikTokErrorModel message);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.db;
|
||||
|
||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokMessageModel;
|
||||
import org.jdbi.v3.sqlobject.customizer.BindBean;
|
||||
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
|
||||
|
||||
public interface TikTokMessageModelDAO
|
||||
{
|
||||
@SqlUpdate("INSERT INTO TikTokMessageModel (hostName, eventName,type, eventContent, createdAt) " +
|
||||
"VALUES (:hostName, :eventName, :type, :eventContent, :createdAt)")
|
||||
void insertTikTokMessage(@BindBean TikTokMessageModel message);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.tables;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
public class ExceptionInfoModel
|
||||
{
|
||||
private String message;
|
||||
private String stackTrace;
|
||||
|
||||
public ExceptionInfoModel(Throwable throwable) {
|
||||
this.message = throwable.getMessage();
|
||||
this.stackTrace = getStackTraceAsString(throwable);
|
||||
}
|
||||
|
||||
public static String getStackTraceAsString(Throwable throwable) {
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw);
|
||||
throwable.printStackTrace(pw);
|
||||
return sw.toString();
|
||||
}
|
||||
|
||||
// Getters for message and stackTrace
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public String getStackTrace() {
|
||||
return stackTrace;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.tables;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class TikTokErrorModel
|
||||
{
|
||||
private Integer id;
|
||||
|
||||
private String hostName;
|
||||
|
||||
private String errorName;
|
||||
|
||||
private String errorType;
|
||||
|
||||
private String exceptionContent;
|
||||
|
||||
private String message;
|
||||
|
||||
private String response;
|
||||
|
||||
private String createdAt;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package io.github.jwdeveloper.tiktok.tools.collector.tables;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class TikTokMessageModel
|
||||
{
|
||||
private Integer id;
|
||||
|
||||
private String hostName;
|
||||
|
||||
private String eventName;
|
||||
|
||||
private String type;
|
||||
|
||||
private String eventContent;
|
||||
|
||||
private String createdAt;
|
||||
}
|
||||
Reference in New Issue
Block a user