diff --git a/API/pom.xml b/API/pom.xml index 1ac9ac9..55c398c 100644 --- a/API/pom.xml +++ b/API/pom.xml @@ -11,25 +11,6 @@ API - - org.projectlombok - lombok - 1.18.22 - compile - - - junit - junit - 4.13.1 - test - - - org.testng - testng - RELEASE - test - - com.google.protobuf protobuf-java diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java index d49299a..cdc7f5c 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java @@ -2,9 +2,9 @@ package io.github.jwdeveloper.tiktok.live; public interface LiveClient { - void run(); + void connect(); - void stop(); + void disconnect(); - LiveMeta getMeta(); + LiveRoomInfo getRoomInfo(); } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveMeta.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveMeta.java deleted file mode 100644 index bd636eb..0000000 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveMeta.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.jwdeveloper.tiktok.live; - -public interface LiveMeta -{ - int getViewersCount(); - - String getRoomId(); - String getUserName(); -} diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java index 68c7201..82b8c59 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java @@ -1,9 +1,9 @@ package io.github.jwdeveloper.tiktok.live; -import lombok.Data; - -@Data -public class LiveRoomInfo +public interface LiveRoomInfo { - private int status; + int getViewersCount(); + + String getRoomId(); + String getUserName(); } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomMeta.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomMeta.java new file mode 100644 index 0000000..a3ffe92 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomMeta.java @@ -0,0 +1,9 @@ +package io.github.jwdeveloper.tiktok.live; + +import lombok.Data; + +@Data +public class LiveRoomMeta +{ + private int status; +} diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/TikTokLiveMeta.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/TikTokRoomInfo.java similarity index 87% rename from API/src/main/java/io/github/jwdeveloper/tiktok/live/TikTokLiveMeta.java rename to API/src/main/java/io/github/jwdeveloper/tiktok/live/TikTokRoomInfo.java index 9c1b8ec..b357207 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/TikTokLiveMeta.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/TikTokRoomInfo.java @@ -3,7 +3,7 @@ package io.github.jwdeveloper.tiktok.live; import lombok.Data; @Data -public class TikTokLiveMeta implements LiveMeta +public class TikTokRoomInfo implements LiveRoomInfo { private int viewersCount; diff --git a/Client/pom.xml b/Client/pom.xml index cbe1c8d..bf01fc0 100644 --- a/Client/pom.xml +++ b/Client/pom.xml @@ -19,24 +19,7 @@ - - org.java-websocket - Java-WebSocket - 1.5.4 - - - org.slf4j - slf4j-api - 1.7.0 - - - - org.projectlombok - lombok - 1.18.22 - compile - com.google.code.gson @@ -44,25 +27,6 @@ 2.10.1 - - org.mockito - mockito-core - 3.12.4 - test - - - - junit - junit - 4.13.1 - test - - - org.junit.jupiter - junit-jupiter - RELEASE - test - io.github.jwdeveloper.tiktok API diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java index 3b89a22..b890500 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -5,14 +5,14 @@ import io.github.jwdeveloper.tiktok.handlers.TikTokEventHandler; import io.github.jwdeveloper.tiktok.http.TikTokApiService; import io.github.jwdeveloper.tiktok.live.ConnectionState; import io.github.jwdeveloper.tiktok.live.LiveClient; -import io.github.jwdeveloper.tiktok.live.LiveMeta; -import io.github.jwdeveloper.tiktok.live.TikTokLiveMeta; +import io.github.jwdeveloper.tiktok.live.LiveRoomInfo; +import io.github.jwdeveloper.tiktok.live.TikTokRoomInfo; import io.github.jwdeveloper.tiktok.websocket.TikTokWebsocketClient; import java.util.logging.Logger; public class TikTokLiveClient implements LiveClient { - private final TikTokLiveMeta meta; + private final TikTokRoomInfo meta; private final TikTokGiftManager giftManager; private final TikTokApiService apiClient; private final TikTokWebsocketClient webSocketClient; @@ -21,7 +21,7 @@ public class TikTokLiveClient implements LiveClient { private final Logger logger; - public TikTokLiveClient(TikTokLiveMeta tikTokLiveMeta, + public TikTokLiveClient(TikTokRoomInfo tikTokLiveMeta, TikTokApiService tikTokApiService, TikTokWebsocketClient webSocketClient, TikTokGiftManager tikTokGiftManager, @@ -38,28 +38,25 @@ public class TikTokLiveClient implements LiveClient { - public void run() { - tryConnect(); - } - - public void stop() { - if (!meta.hasConnectionState(ConnectionState.CONNECTED)) { - return; - } - disconnect(); - setState(ConnectionState.DISCONNECTED); - } - - public void tryConnect() { + public void connect() { try { - connect(); + tryConnect(); } catch (Exception e) { e.printStackTrace(); setState(ConnectionState.DISCONNECTED); } } - public void connect() { + public void disconnect() { + if (!meta.hasConnectionState(ConnectionState.CONNECTED)) { + return; + } + webSocketClient.stop(); + setState(ConnectionState.DISCONNECTED); + } + + + public void tryConnect() { if (meta.hasConnectionState(ConnectionState.CONNECTED)) throw new RuntimeException("Already connected"); if (meta.hasConnectionState(ConnectionState.CONNECTING)) @@ -82,13 +79,10 @@ public class TikTokLiveClient implements LiveClient { setState(ConnectionState.CONNECTED); } - public void disconnect() - { - webSocketClient.stop(); - } - public LiveMeta getMeta() { + + public LiveRoomInfo getRoomInfo() { return meta; } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java index 9bb6c3b..8ac82cd 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -10,9 +10,8 @@ import io.github.jwdeveloper.tiktok.http.TikTokCookieJar; import io.github.jwdeveloper.tiktok.http.TikTokHttpApiClient; import io.github.jwdeveloper.tiktok.http.TikTokHttpRequestFactory; import io.github.jwdeveloper.tiktok.live.LiveClient; -import io.github.jwdeveloper.tiktok.live.TikTokLiveMeta; +import io.github.jwdeveloper.tiktok.live.TikTokRoomInfo; import io.github.jwdeveloper.tiktok.websocket.TikTokWebsocketClient; -import io.github.jwdeveloper.tiktok.handlers.WebResponseHandlerBase; import java.time.Duration; import java.util.Map; @@ -23,8 +22,8 @@ public class TikTokLiveClientBuilder implements TikTokEventBuilder clientParameters; - private Logger logger; - private TikTokEventHandler tikTokEventHandler; + private final Logger logger; + private final TikTokEventHandler tikTokEventHandler; public TikTokLiveClientBuilder(String userName) { this.tikTokEventHandler = new TikTokEventHandler(); @@ -92,7 +91,7 @@ public class TikTokLiveClientBuilder implements TikTokEventBuilder "+info.getStatus()); diff --git a/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokApiServiceTest.java b/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokApiServiceTest.java index 78abbf1..79bdc42 100644 --- a/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokApiServiceTest.java +++ b/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokApiServiceTest.java @@ -1,34 +1,20 @@ package io.github.jwdeveloper.tiktok.http; import com.google.gson.JsonParser; - -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpHeaders; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; +import org.junit.Test; import java.nio.charset.StandardCharsets; -import java.time.Duration; import java.util.HashMap; -import java.util.Map; import java.util.Scanner; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; -import java.util.concurrent.CountDownLatch; import java.util.logging.Logger; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class TikTokApiServiceTest { @Test - void testFetchAvailableGifts() { + public void testFetchAvailableGifts() { // Arrange var mockApiClient = mock(TikTokHttpApiClient.class); var mockLogger = mock(Logger.class); @@ -48,40 +34,12 @@ public class TikTokApiServiceTest { var gifts = tikTokApiService.fetchAvailableGifts(); + assertNotNull(gifts); } - @Test - void test() throws Exception { - HttpClient client = HttpClient.newHttpClient(); - HttpRequest request = HttpRequest.newBuilder() - .uri(new URI("https://tiktok.eulerstream.com/webcast/fetch/?room_id=7263690606554188577&client=ttlive-net&uuc=1&apiKey=&isSignRedirect=1&iph=658d90239052e48dabc4e5b61004661e")) - .build(); - - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - - System.out.println("Response code: " + response.statusCode()); - HttpHeaders headers = response.headers(); - headers.map().forEach((k, v) -> System.out.println(k + ":" + v)); - - System.out.println("Response body: " + response.body()); - } - - - @Test - void testws2() - { - - var url = "wss://webcast16-ws-useast1a.tiktok.com/webcast/im/push/?cursor=1691243226540_7263834340956643180_1_1_0_0&room_id=7263759223213132577&app_language=en-US&focus_state=true&last_rtt=0&did_rule=3&is_fullscreen=false&from_page=user&update_version_code=1.3.0&screen_height=1152&tz_name=Europe/Berlin&cookie_enabled=true&identity=audience&browser_platform=Win32&browser_version=5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36&browser_language=en&fetch_rule=1&value=u6Laa_b3czc3iEAb4x6oLXindKyTO&internal_ext=fetch_time:1691243226540|start_time:0|ack_ids:,|flag:0|seq:1|next_cursor:1691243226540_7263834340956643180_1_1_0_0|wss_info:0-1691243226540-0-0&screen_width=2048&version_code=180800&history_len=4&webcast_sdk_version=1.3.0&msToken=&app_name=tiktok_web&browser_name=Mozilla&resp_content_type=protobuf&live_id=12&webcast_language=en-US&name=imprp&device_platform=web&is_page_visible=true&aid=1988&browser_online=true"; - - var split = url.substring(373,url.length()-1); - - var i =0; - - var uri = URI.create(url); - } } \ No newline at end of file diff --git a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java index caa6026..3828beb 100644 --- a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java +++ b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java @@ -28,7 +28,7 @@ public class Main { .buildAndRun(); - var viewers = client.getMeta().getViewersCount(); + var viewers = client.getRoomInfo().getViewersCount(); System.in.read(); } diff --git a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java new file mode 100644 index 0000000..aaac433 --- /dev/null +++ b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java @@ -0,0 +1,30 @@ +package io.github.jwdeveloper.tiktok; + +public class SimpleExample { + public static void main(String[] args) { + // Username of someone who is currently live + var tiktokUsername = "officialgeilegisela"; + + TikTokLive.newClient(tiktokUsername) + .clientSettings(settings -> + { + }) + .onConnected(event -> + { + System.out.println("Connected"); + }) + .onJoin(event -> + { + System.out.println("User joined -> " + event.getUser().getNickName()); + }) + .onComment(event -> + { + System.out.println(event.getUser().getUniqueId() + ": " + event.getText()); + }) + .onError(event -> + { + event.getException().printStackTrace(); + }) + .buildAndRun(); + } +} diff --git a/Tools/src/main/java/io/github/jwdeveloper/tiktok/GenerateEventsListRun.java b/Tools/src/main/java/io/github/jwdeveloper/tiktok/GenerateEventsListRun.java new file mode 100644 index 0000000..3f6e88a --- /dev/null +++ b/Tools/src/main/java/io/github/jwdeveloper/tiktok/GenerateEventsListRun.java @@ -0,0 +1,31 @@ +package io.github.jwdeveloper.tiktok; + +import io.github.jwdeveloper.tiktok.events.TikTokEvent; +import org.reflections.Reflections; + +public class GenerateEventsListRun +{ + + + //[a](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokBarrageMessageEvent.java) + //Message Events: + //- [member](#member) + + public static void main(String[] args) + { + Reflections reflections = new Reflections("io.github.jwdeveloper.tiktok.events.messages"); + var classes = reflections.getSubTypesOf(TikTokEvent.class); + classes.add(TikTokEvent.class); + + var builder = new StringBuilder(); + builder.append("Events:").append(System.lineSeparator()); + for(var event : classes) + { + var name = event.getSimpleName(); + var baseUrl ="https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/"+name+".java"; + builder.append("- [").append(name).append("](").append(baseUrl).append(")").append(System.lineSeparator()); + } + + System.out.println(builder.toString()); + } +} diff --git a/pom.xml b/pom.xml index 5a50bc9..acf3c18 100644 --- a/pom.xml +++ b/pom.xml @@ -21,4 +21,26 @@ UTF-8 + + + org.projectlombok + lombok + 1.18.22 + compile + + + junit + junit + 4.13.1 + test + + + org.mockito + mockito-core + 3.12.4 + test + + + + \ No newline at end of file