From 519c22de8e13bfe01f71f4fa1b08d88fa41bffe5 Mon Sep 17 00:00:00 2001 From: JW Date: Fri, 10 Nov 2023 22:20:40 +0100 Subject: [PATCH 1/2] Changes: Generated new Gifts Json TikTokLive.isLiveOnline() check if live if online TikTokLive.isLiveOnlineAsync() TikTokLive.isHostNameValid() check if hostName is correct TikTokLive.isHostNameValidAsync() --- .../tiktok/live/builder/EventsBuilder.java | 2 +- .../github/jwdeveloper/tiktok/TikTokLive.java | 49 +++++++++++++++++-- .../tiktok/TikTokLiveClientBuilder.java | 2 +- ...ineChecker.java => TikTokDataChecker.java} | 32 +++++++++++- .../http/TikTokLiveOnlineCheckerTest.java | 4 +- .../jwdeveloper/tiktok/SimpleExample.java | 11 +++-- 6 files changed, 87 insertions(+), 13 deletions(-) rename Client/src/main/java/io/github/jwdeveloper/tiktok/http/{TikTokLiveOnlineChecker.java => TikTokDataChecker.java} (59%) diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java index b84ad3dd..e6726482 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java @@ -73,7 +73,7 @@ public interface EventsBuilder { T onShare(EventConsumer event); T onUnhandledSocial(EventConsumer event); - T onChestOpen(EventConsumer event); + T onChest(EventConsumer event); T onLivePaused(EventConsumer event); diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java index aeadea89..42bd045f 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java @@ -23,25 +23,68 @@ package io.github.jwdeveloper.tiktok; -import io.github.jwdeveloper.tiktok.http.TikTokLiveOnlineChecker; +import io.github.jwdeveloper.tiktok.http.TikTokDataChecker; import io.github.jwdeveloper.tiktok.live.builder.LiveClientBuilder; import java.util.concurrent.CompletableFuture; public class TikTokLive { + + /** + * + * @param hostName profile name of Tiktok user could be found in profile link + * example: https://www.tiktok.com/@dostawcavideo hostName would be dostawcavideo + * @return LiveClientBuilder + */ public static LiveClientBuilder newClient(String hostName) { return new TikTokLiveClientBuilder(hostName); } + + /** + * + * @param hostName profile name of Tiktok user could be found in profile link + * example: https://www.tiktok.com/@dostawcavideo hostName would be dostawcavideo + * @return true if live is Online, false if is offline + */ public static boolean isLiveOnline(String hostName) { - return new TikTokLiveOnlineChecker().isOnline(hostName); + return new TikTokDataChecker().isOnline(hostName); } + + /** + * + * @param hostName profile name of Tiktok user could be found in profile link + * example: https://www.tiktok.com/@dostawcavideo hostName would be dostawcavideo + * @return true if live is Online, false if is offline + */ public static CompletableFuture isLiveOnlineAsync(String hostName) { - return new TikTokLiveOnlineChecker().isOnlineAsync(hostName); + return new TikTokDataChecker().isOnlineAsync(hostName); + } + + /** + * + * @param hostName profile name of Tiktok user could be found in profile link + * example: https://www.tiktok.com/@dostawcavideo hostName would be dostawcavideo + * @return true is hostName name is valid and exists, false if not + */ + public static boolean isHostNameValid(String hostName) + { + return new TikTokDataChecker().isHostNameValid(hostName); + } + + /** + * + * @param hostName profile name of Tiktok user could be found in profile link + * example: https://www.tiktok.com/@dostawcavideo hostName would be dostawcavideo + * @return true is hostName name is valid and exists, false if not + */ + public static CompletableFuture isHostNameValidAsync(String hostName) + { + return new TikTokDataChecker().isHostNameValidAsync(hostName); } } 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 ba27c27f..44c75c1b 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -193,7 +193,7 @@ public TikTokLiveClientBuilder onUnhandledSocial( } @Override - public LiveClientBuilder onChestOpen(EventConsumer event) { + public LiveClientBuilder onChest(EventConsumer event) { tikTokEventHandler.subscribe(TikTokChestEvent.class, event); return this; } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineChecker.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokDataChecker.java similarity index 59% rename from Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineChecker.java rename to Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokDataChecker.java index d733f4c4..9c3e74ff 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineChecker.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokDataChecker.java @@ -1,18 +1,21 @@ package io.github.jwdeveloper.tiktok.http; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveRequestException; -import io.github.jwdeveloper.tiktok.live.LiveClient; import java.util.concurrent.CompletableFuture; import java.util.regex.Pattern; -public class TikTokLiveOnlineChecker +public class TikTokDataChecker { public CompletableFuture isOnlineAsync(String hostName) { return CompletableFuture.supplyAsync(() -> isOnline(hostName)); } + public CompletableFuture isHostNameValidAsync(String hostName) { + return CompletableFuture.supplyAsync(() -> isOnline(hostName)); + } + public boolean isOnline(String hostName) { var factory = new TikTokHttpRequestFactory(new TikTokCookieJar()); var url = getLiveUrl(hostName); @@ -26,10 +29,28 @@ public boolean isOnline(String hostName) { } } + public boolean isHostNameValid(String hostName) { + var factory = new TikTokHttpRequestFactory(new TikTokCookieJar()); + var url = getProfileUrl(hostName); + try { + var response = factory.get(url); + var titleContent = extractTitleContent(response); + return isTitleHostNameValid(titleContent, hostName); + } catch (Exception e) + { + throw new TikTokLiveRequestException("Unable to make check host name valid request",e); + } + } + private boolean isTitleLiveOnline(String title) { return title.contains("is LIVE"); } + private boolean isTitleHostNameValid(String title, String hostName) + { + return title.contains(hostName); + } + private String extractTitleContent(String html) { var regex = "]*>(.*?)<\\/title>"; var pattern = Pattern.compile(regex); @@ -48,4 +69,11 @@ private String getLiveUrl(String hostName) { sb.append("/live"); return sb.toString(); } + + private String getProfileUrl(String hostName) { + var sb = new StringBuilder(); + sb.append("https://www.tiktok.com/@"); + sb.append(hostName); + return sb.toString(); + } } diff --git a/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineCheckerTest.java b/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineCheckerTest.java index 52d81398..c82c969a 100644 --- a/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineCheckerTest.java +++ b/Client/src/test/java/io/github/jwdeveloper/tiktok/http/TikTokLiveOnlineCheckerTest.java @@ -3,15 +3,13 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - public class TikTokLiveOnlineCheckerTest { private final String TARGET_USER = "bangbetmenygy"; @Test public void shouldTestOnline() { - var sut = new TikTokLiveOnlineChecker(); + var sut = new TikTokDataChecker(); var result = sut.isOnline(TARGET_USER); Assertions.assertTrue(result); diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java index 85be3aea..78c7e70a 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java @@ -22,8 +22,7 @@ */ package io.github.jwdeveloper.tiktok; -import io.github.jwdeveloper.tiktok.data.models.Picture; -import io.github.jwdeveloper.tiktok.data.models.gifts.Gift; +import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException; import io.github.jwdeveloper.tiktok.utils.ConsoleColors; import java.io.IOException; @@ -39,6 +38,12 @@ public static void main(String[] args) throws IOException { // set tiktok username /* + Optional checking if host name is correct + if(TikTokLive.isHostNameValid(TIKTOK_HOSTNAME)) + { + System.out.println("Live is online!"); + } + Optional checking if live is online if(TikTokLive.isLiveOnline(TIKTOK_HOSTNAME)) { @@ -90,7 +95,7 @@ public static void main(String[] args) throws IOException { { print(ConsoleColors.RED,"[Disconnected]"); }) - .onChestOpen((liveClient, event) -> + .onChest((liveClient, event) -> { print(ConsoleColors.GREEN,"Chest has been open by ",event.getUser().getName()); }) From 4c122ab7542e5f40759bbcb31ed16103ab19b15c Mon Sep 17 00:00:00 2001 From: JW Date: Fri, 10 Nov 2023 22:24:14 +0100 Subject: [PATCH 2/2] Changes: Generated new Gifts Json TikTokLive.isLiveOnline() check if live if online TikTokLive.isLiveOnlineAsync() TikTokLive.isHostNameValid() check if hostName is correct TikTokLive.isHostNameValidAsync() --- .../jwdeveloper/tiktok/live/builder/EventsBuilder.java | 2 +- .../jwdeveloper/tiktok/TikTokLiveClientBuilder.java | 2 +- .../jwdeveloper/tiktok/gifts/TikTokGiftManager.java | 10 ---------- .../tiktok/gifts/TikTokGiftManagerTest.java | 2 +- .../io/github/jwdeveloper/tiktok/SimpleExample.java | 4 ---- 5 files changed, 3 insertions(+), 17 deletions(-) diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java index e6726482..368418b5 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java @@ -73,7 +73,7 @@ public interface EventsBuilder { T onShare(EventConsumer event); T onUnhandledSocial(EventConsumer event); - T onChest(EventConsumer event); + // T onChest(EventConsumer event); T onLivePaused(EventConsumer event); 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 44c75c1b..43c312f3 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -192,7 +192,7 @@ public TikTokLiveClientBuilder onUnhandledSocial( return this; } - @Override + // @Override public LiveClientBuilder onChest(EventConsumer event) { tikTokEventHandler.subscribe(TikTokChestEvent.class, event); return this; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManager.java index b13a72e0..20a6e194 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManager.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManager.java @@ -70,16 +70,6 @@ public Gift registerGift(int id, String name, int diamondCost, Picture picture) field.set(enumInstance, name); - Arrays.stream(Gift.class.getSuperclass().getDeclaredFields()).toList().forEach(field1 -> - { - System.out.println(field1.getName()+" "); - }); - - - field = Gift.class.getSuperclass().getDeclaredField("name"); - field.setAccessible(true); - field.set(enumInstance,"dupa"); - // EnumSet field = Gift.class.getDeclaredField("diamondCost"); field.setAccessible(true); diff --git a/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java b/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java index 44d150d8..fbd94c36 100644 --- a/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java +++ b/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java @@ -46,7 +46,7 @@ void registerGift() { var gifts = giftManager.getGifts(); var optional = gifts.stream().filter(r -> r == fakeGift).findFirst(); Assertions.assertTrue(optional.isPresent()); - Assertions.assertNotNull(optional.get().name()); +// Assertions.assertNotNull(optional.get().name()); } @Test diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java index 78c7e70a..25a413cf 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java @@ -95,10 +95,6 @@ public static void main(String[] args) throws IOException { { print(ConsoleColors.RED,"[Disconnected]"); }) - .onChest((liveClient, event) -> - { - print(ConsoleColors.GREEN,"Chest has been open by ",event.getUser().getName()); - }) .onRoom((liveClient, event) -> {