Compare commits

..

9 Commits

Author SHA1 Message Date
JW
84bbfa97e9 Fixed bugs:
- addListeners() was throwing exception
  - 404 response code was return while connecting to tiktok for some users
  - configure.setRoomId() method for people that want to set roomId manually
  - client.roomInfo().isAgeRestricted() check if live has age restriction
2023-09-19 02:53:04 +02:00
Just wolololololololo
a2da5169db Update README.md 2023-09-19 02:39:53 +02:00
Just wolololololololo
bf8defbe3c Update README.md 2023-09-19 02:30:40 +02:00
Just wolololololololo
5ba935efaf Update README.md 2023-09-19 02:30:31 +02:00
Just wolololololololo
0a244a4a58 Update README.md 2023-09-19 02:29:58 +02:00
Just wolololololololo
ac911de6b3 Merge pull request #7 from abdurrahmanekr/bugfix-403
fix: 403 get response error
2023-09-18 22:51:46 +02:00
abdurrahmanekr
74208361fd fix: 403 get response error 2023-09-18 23:32:17 +03:00
JW
a6cb2be1a7 Update FUNDING.yml 2023-09-13 06:48:11 +02:00
GitHub Action
9267217ebd Update version in pom.xml 2023-09-13 04:40:49 +00:00
21 changed files with 120 additions and 53 deletions

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>API</artifactId>

View File

@@ -56,7 +56,7 @@ public class ClientSettings {
private boolean printMessageData;
/**
* Tiktok user name
* Optional: Use it if you need to change tiktok live hostname in builder
*/
private String hostName;
@@ -68,10 +68,16 @@ public class ClientSettings {
/*
* Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
* Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
* documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
*/
private String sessionId;
/*
* Optional: By default roomID is fetched before connect to live, but you can set it manually
*
*/
private String roomId;
}

View File

@@ -3,6 +3,7 @@ package io.github.jwdeveloper.tiktok.live;
public interface LiveRoomInfo
{
int getViewersCount();
boolean isAgeRestricted();
String getRoomId();
String getUserName();
ConnectionState getConnectionState();

View File

@@ -6,4 +6,6 @@ import lombok.Data;
public class LiveRoomMeta
{
private int status;
private boolean ageRestricted;
}

View File

@@ -0,0 +1,6 @@
package io.github.jwdeveloper.tiktok.mappers;
public interface Mapper<SOURCE,TARGET>
{
TARGET mapFrom(SOURCE source);
}

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -89,8 +89,20 @@ public class TikTokLiveClient implements LiveClient {
apiService.updateSessionId();
var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName());
liveRoomInfo.setRoomId(roomId);
if(clientSettings.getRoomId() != null)
{
liveRoomInfo.setRoomId(clientSettings.getRoomId());
logger.info("Using roomID from settings: "+clientSettings.getRoomId());
}
else
{
var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName());
liveRoomInfo.setRoomId(roomId);
}
var roomData = apiService.fetchRoomInfo();
if (roomData.getStatus() == 0 || roomData.getStatus() == 4) {
throw new TikTokLiveOfflineHostException("LiveStream for HostID could not be found. Is the Host online?");

View File

@@ -11,7 +11,10 @@ public class TikTokRoomInfo implements LiveRoomInfo
private String roomId;
private boolean ageRestricted;
private String userName;
private ConnectionState connectionState = ConnectionState.DISCONNECTED;
public boolean hasConnectionState(ConnectionState state)

View File

@@ -6,6 +6,7 @@ import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveRequestException;
import io.github.jwdeveloper.tiktok.live.LiveRoomMeta;
import io.github.jwdeveloper.tiktok.mappers.LiveRoomMetaMapper;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
@@ -100,22 +101,10 @@ public class TikTokApiService {
logger.info("Fetch RoomInfo");
try {
var response = tiktokHttpClient.getJObjectFromWebcastAPI("room/info/", clientSettings.getClientParameters());
if (!response.has("data")) {
return new LiveRoomMeta();
}
var data = response.getAsJsonObject("data");
if (!data.has("status")) {
return new LiveRoomMeta();
}
var status = data.get("status");
var info = new LiveRoomMeta();
info.setStatus(status.getAsInt());
logger.info("RoomInfo status -> " + info.getStatus());
return info;
var mapper = new LiveRoomMetaMapper();
var liveRoomMeta = mapper.mapFrom(response);
logger.info("RoomInfo status -> " + liveRoomMeta.getStatus());
return liveRoomMeta;
} catch (Exception e) {
throw new TikTokLiveRequestException("Failed to fetch room info from WebCast, see stacktrace for more info.", e);
}

View File

@@ -38,6 +38,14 @@ public class TikTokHttpRequestFactory implements TikTokHttpRequest {
public String get(String url) {
var uri = URI.create(url);
var request = HttpRequest.newBuilder().GET();
for (var header : defaultHeaders.entrySet())
{
if(header.getKey().equals("Connection") || header.getKey().equals("Accept-Encoding"))
{
continue;
}
request.setHeader(header.getKey(), header.getValue());
}
if (query != null) {
var baseUri = uri.toString();
var requestUri = URI.create(baseUri + "?" + query);

View File

@@ -19,10 +19,9 @@ public class TikTokListenersManager implements ListenersManager {
public TikTokListenersManager(List<TikTokEventListener> listeners, TikTokEventObserver tikTokEventHandler) {
this.eventObserver = tikTokEventHandler;
this.bindingModels = listeners.stream().map(this::bindToEvents).toList();
this.bindingModels = new ArrayList<>(listeners.stream().map(this::bindToEvents).toList());
}
@Override
public List<TikTokEventListener> getListeners() {
return bindingModels.stream().map(ListenerBindingModel::getListener).toList();

View File

@@ -0,0 +1,30 @@
package io.github.jwdeveloper.tiktok.mappers;
import com.google.gson.JsonObject;
import io.github.jwdeveloper.tiktok.live.LiveRoomMeta;
public class LiveRoomMetaMapper implements Mapper<JsonObject, LiveRoomMeta>
{
@Override
public LiveRoomMeta mapFrom(JsonObject input) {
var liveRoomMeta = new LiveRoomMeta();
if (!input.has("data")) {
return liveRoomMeta;
}
var data = input.getAsJsonObject("data");
if (data.has("status")) {
var status = data.get("status");
liveRoomMeta.setStatus(status.getAsInt());
}
if(data.has("age_restricted"))
{
var element = data.getAsJsonObject("age_restricted");
var restricted= element.get("restricted").getAsBoolean();
liveRoomMeta.setAgeRestricted(restricted);
}
return liveRoomMeta;
}
}

View File

@@ -1,3 +1,2 @@
github: [jwdeveloper]
patreon: jwdeveloper
custom: ["https://www.buymeacoffee.com/jwdev"]
custom: ["https://www.buymeacoffee.com/jwdev"]

View File

@@ -27,25 +27,25 @@ Do you prefer other programming languages?
```xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.jwdeveloper.TikTok-Live-Java</groupId>
<artifactId>Client</artifactId>
<version>0.0.22-Release</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.github.jwdeveloper.TikTok-Live-Java</groupId>
<artifactId>Client</artifactId>
<version>0.0.23-Release</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
```
2. Create your first chat connection
@@ -119,9 +119,12 @@ public class ConfigurationExample {
clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection
// Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
//Optional: Sometimes not every message from chat are send to TikTokLiveJava to fix this issue you can set sessionId
// documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
clientSettings.setSessionId("86c3c8bf4b17ebb2d74bb7fa66fd0000");
//Optional:
clientSettings.setRoomId("XXXXXXXXXXXXXXXXX");
})
.buildAndRun();
System.in.read();
@@ -152,7 +155,7 @@ public class ListenerExample
CustomListener customListener = new CustomListener();
// set tiktok username
TikTokLive.newClient(Main.TEST_TIKTOK_USER)
var client = TikTokLive.newClient(Main.TEST_TIKTOK_USER)
.addListener(customListener)
.buildAndRun();

View File

@@ -41,7 +41,7 @@
<parent>
<artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -21,9 +21,12 @@ public class ConfigurationExample {
clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection
//Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
//Optional: Sometimes not every message from chat are send to TikTokLiveJava to fix this issue you can set sessionId
// documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
clientSettings.setSessionId("86c3c8bf4b17ebb2d74bb7fa66fd0000");
//Optional:
clientSettings.setRoomId("XXXXXXXXXXXXXXXXX");
})
.buildAndRun();
System.in.read();

View File

@@ -18,7 +18,7 @@ public class ListenerExample
CustomListener customListener = new CustomListener();
// set tiktok username
TikTokLive.newClient(Main.TEST_TIKTOK_USER)
var client = TikTokLive.newClient(Main.TEST_TIKTOK_USER)
.addListener(customListener)
.buildAndRun();

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -35,5 +35,11 @@
<version>0.0.7-Release</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -7,7 +7,7 @@
<groupId>io.github.jwdeveloper.tiktok</groupId>
<artifactId>TikTokLiveJava</artifactId>
<packaging>pom</packaging>
<version>0.0.22-Release</version>
<version>0.0.23-Release</version>
<modules>
<module>API</module>
<module>Client</module>