Skip to content

Commit 0b9f157

Browse files
committed
Optimized a few methods when calling and using the Api!
1 parent 7a4c7fe commit 0b9f157

File tree

8 files changed

+87
-83
lines changed

8 files changed

+87
-83
lines changed

Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,10 @@ protected void validate() {
136136
handler.setFormatter(new Formatter() {
137137
@Override
138138
public String format(LogRecord record) {
139-
var sb = new StringBuilder();
140-
sb.append(ConsoleColors.GREEN).append("[").append(record.getLoggerName()).append("] ");
141-
sb.append(ConsoleColors.GREEN).append("[").append(record.getLevel()).append("]: ");
142-
sb.append(ConsoleColors.WHITE_BRIGHT).append(record.getMessage());
143-
sb.append(ConsoleColors.RESET).append("\n");
144-
return sb.toString();
139+
return ConsoleColors.GREEN + "[" + record.getLoggerName() + "] " +
140+
ConsoleColors.GREEN + "[" + record.getLevel() + "]: " +
141+
ConsoleColors.WHITE_BRIGHT + record.getMessage() +
142+
ConsoleColors.RESET + "\n";
145143
}
146144
});
147145
logger.setUseParentHandlers(false);

Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpUtils.java

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,30 @@
2222
*/
2323
package io.github.jwdeveloper.tiktok.http;
2424

25-
import lombok.SneakyThrows;
26-
2725
import java.net.URLEncoder;
2826
import java.nio.charset.StandardCharsets;
2927
import java.util.Map;
28+
import java.util.stream.Collectors;
3029

3130
public class HttpUtils
3231
{
3332
public static String parseParameters(String url, Map<String,Object> parameters)
3433
{
35-
var parameterString = "";
36-
if (!parameters.isEmpty()) {
37-
var builder = new StringBuilder();
38-
builder.append("?");
39-
var first = false;
40-
for (var param : parameters.entrySet()) {
41-
42-
if (first) {
43-
builder.append("&");
44-
}
45-
builder.append(param.getKey()).append("=").append(param.getValue());
46-
first = true;
47-
}
48-
parameterString = builder.toString();
49-
}
34+
if (parameters.isEmpty())
35+
return url;
5036

51-
return url+parameterString;
37+
return url+ "?" + parameters.entrySet().stream().map(entry -> entry.getKey()+"="+entry.getValue()).collect(Collectors.joining("&"));
5238
}
5339

54-
@SneakyThrows
5540
public static String parseParametersEncode(String url, Map<String,Object> parameters)
5641
{
57-
58-
var parameterString = "";
59-
if (!parameters.isEmpty()) {
60-
var builder = new StringBuilder();
61-
builder.append("?");
62-
var first = false;
63-
for (var param : parameters.entrySet()) {
64-
65-
if (first) {
66-
builder.append("&");
67-
}
68-
69-
final String encodedKey = URLEncoder.encode(param.getKey(), StandardCharsets.UTF_8);
70-
final String encodedValue = URLEncoder.encode(param.getValue().toString(), StandardCharsets.UTF_8);
71-
builder.append(encodedKey).append("=").append(encodedValue);
72-
first = true;
73-
}
74-
parameterString = builder.toString();
75-
}
76-
77-
return url+parameterString;
42+
if (parameters.isEmpty())
43+
return url;
44+
45+
return url+ "?" + parameters.entrySet().stream().map(entry -> {
46+
String encodedKey = URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8);
47+
String encodedValue = URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8);
48+
return encodedKey+"="+encodedValue;
49+
}).collect(Collectors.joining("&"));
7850
}
79-
}
51+
}

Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokApiService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,19 @@ public TikTokUserInfo fetchUserInfoFromTikTokApi(String userName) {
7373
var message = roomData.get("message").getAsString();
7474

7575
if (message.equals("params_error")) {
76-
throw new TikTokLiveRequestException("fetchRoomIdFromTiktokApi -> Unable to fetch roomID, contact with developer");
76+
throw new TikTokLiveRequestException("fetchRoomIdFromTiktokApi -> Unable to fetch roomID, contact the developer");
7777
}
7878
if (message.equals("user_not_found")) {
7979
return new TikTokUserInfo(TikTokUserInfo.UserStatus.NotFound, "", -1);
8080
}
8181
//live -> status 2
8282
//live paused -> 3
8383
//not live -> status 4
84-
var data = roomData.getAsJsonObject("data");
84+
var element = roomData.get("data");
85+
if (element.isJsonNull()) {
86+
return new TikTokUserInfo(TikTokUserInfo.UserStatus.NotFound, "", -1);
87+
}
88+
var data = element.getAsJsonObject();
8589
var user = data.getAsJsonObject("user");
8690
var roomId = user.get("roomId").getAsString();
8791
var status = user.get("status").getAsInt();

Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokCookieJar.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@
2222
*/
2323
package io.github.jwdeveloper.tiktok.http;
2424

25-
import java.util.HashMap;
26-
import java.util.Map;
27-
import java.util.Set;
25+
import java.util.*;
26+
import java.util.stream.Collectors;
2827

2928
public class TikTokCookieJar {
3029
private final Map<String, String> cookies;
@@ -40,13 +39,7 @@ public void set(String key, String value) {
4039
cookies.put(key, value);
4140
}
4241

43-
public String parseCookies()
44-
{
45-
var sb = new StringBuilder();
46-
for(var entry : cookies.entrySet())
47-
{
48-
sb.append(entry.getKey()).append("=").append(entry.getValue()).append(";");
49-
}
50-
return sb.toString();
42+
public String parseCookies() {
43+
return cookies.entrySet().stream().map(entry -> entry.getKey()+"="+entry.getValue()+";").collect(Collectors.joining());
5144
}
52-
}
45+
}

Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokHttpClient.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,20 @@ public TikTokHttpClient(TikTokCookieJar tikTokCookieJar, TikTokHttpRequestFactor
4545
this.tikTokCookieJar = tikTokCookieJar;
4646
}
4747

48-
public void setSessionId(String sessionId)
49-
{
48+
public void setSessionId(String sessionId) {
5049
tikTokCookieJar.set("sessionid", sessionId);
5150
tikTokCookieJar.set("sessionid_ss", sessionId);
5251
tikTokCookieJar.set("sid_tt", sessionId);
5352
}
5453

5554

5655
public String getLivestreamPage(String userName) {
57-
5856
var url = Constants.TIKTOK_URL_WEB + "@" + userName + "/live/";
5957
var get = getRequest(url, null);
6058
return get;
6159
}
6260

63-
public JsonObject getJsonFromTikTokApi(String path, Map<String,Object> params)
64-
{
61+
public JsonObject getJsonFromTikTokApi(String path, Map<String,Object> params) {
6562
var get = getRequest(Constants.TIKTOK_URL_WEB + path, params);
6663
var json = JsonParser.parseString(get);
6764
var jsonObject = json.getAsJsonObject();
@@ -117,7 +114,6 @@ private byte[] getSignRequest(String url, Map<String, Object> parameters) {
117114
{
118115
var split = cookie.split(";")[0].split("=");
119116

120-
121117
var key = split[0];
122118
var value = split[1];
123119
tikTokCookieJar.set(key, value);
@@ -133,7 +129,6 @@ private byte[] getSignRequest(String url, Map<String, Object> parameters) {
133129

134130

135131
private String getSignedUrl(String url, Map<String, Object> parameters) {
136-
137132
var fullUrl = HttpUtils.parseParameters(url,parameters);
138133
var signParams = new TreeMap<String,Object>();
139134
signParams.put("client", "ttlive-java");
@@ -143,7 +138,6 @@ private String getSignedUrl(String url, Map<String, Object> parameters) {
143138
var request = requestFactory.setQueries(signParams);
144139
var content = request.get(Constants.TIKTOK_SIGN_API);
145140

146-
147141
try {
148142
var json = JsonParser.parseString(content);
149143
var jsonObject = json.getAsJsonObject();
@@ -157,4 +151,4 @@ private String getSignedUrl(String url, Map<String, Object> parameters) {
157151
}
158152
}
159153

160-
}
154+
}

Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokHttpRequestFactory.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.List;
4343
import java.util.Map;
4444
import java.util.TreeMap;
45+
import java.util.stream.Collectors;
4546

4647
public class TikTokHttpRequestFactory implements TikTokHttpRequest {
4748
private final CookieManager cookieManager;
@@ -122,18 +123,16 @@ public TikTokHttpRequest setAgent(String value) {
122123
public TikTokHttpRequest setQueries(Map<String, Object> queries) {
123124
if (queries == null)
124125
return this;
125-
var testMap = new TreeMap<String, Object>(queries);
126-
query = String.join("&", testMap.entrySet().stream().map(x ->
127-
{
126+
var testMap = new TreeMap<>(queries);
127+
query = testMap.entrySet().stream().map(x -> {
128128
var key = x.getKey();
129-
var value = "";
130129
try {
131-
value = URLEncoder.encode(x.getValue().toString(), StandardCharsets.UTF_8);
130+
return key+"="+URLEncoder.encode(x.getValue().toString(), StandardCharsets.UTF_8);
132131
} catch (Exception e) {
133132
e.printStackTrace();
133+
return key + "=";
134134
}
135-
return key + "=" + value;
136-
}).toList());
135+
}).collect(Collectors.joining("&"));
137136
return this;
138137
}
139138

@@ -162,10 +161,7 @@ private String getContent(HttpRequest request) throws Exception {
162161
var map = new HashMap<String, List<String>>();
163162
map.put(key, List.of(value));
164163
cookieManager.put(uri, map);
165-
166164
}
167165
return response.body();
168166
}
169-
170-
171-
}
167+
}

Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ private ListenerBindingModel bindToEvents(TikTokEventListener listener) {
115115
throw new TikTokEventListenerMethodException(e);
116116
}
117117
};
118-
eventsMap.computeIfAbsent(eventClazz, (a) -> new ArrayList<EventConsumer<?>>()).add(eventMethodRef);
118+
eventsMap.computeIfAbsent(eventClazz, (a) -> new ArrayList<>()).add(eventMethodRef);
119119
}
120120
return new ListenerBindingModel(listener, eventsMap);
121121
}
122-
}
122+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.github.jwdeveloper.tiktok.http;
2+
3+
import org.junit.Test;
4+
import org.junit.jupiter.api.Assertions;
5+
6+
import java.util.*;
7+
8+
public class HttpUtilsTest
9+
{
10+
@Test
11+
public void parseParameters_EmptyParameters_ShouldHaveNoParameters()
12+
{
13+
String parsed = HttpUtils.parseParameters("https://webcast.tiktok.com/webcast/im/fetch/", new HashMap<>());
14+
15+
Assertions.assertEquals("https://webcast.tiktok.com/webcast/im/fetch/", parsed);
16+
}
17+
18+
@Test
19+
public void parseParameters_ValidParameters_ShouldConstructValidURL()
20+
{
21+
LinkedHashMap<String, Object> testMap = new LinkedHashMap<>();
22+
testMap.put("room_id", 1);
23+
testMap.put("uniqueId", "randomName");
24+
String parsed = HttpUtils.parseParameters("https://webcast.tiktok.com/webcast/im/fetch/", testMap);
25+
26+
Assertions.assertEquals("https://webcast.tiktok.com/webcast/im/fetch/?room_id=1&uniqueId=randomName", parsed);
27+
}
28+
29+
@Test
30+
public void parseParametersEncode_EmptyParameters_ShouldHaveNoParameters()
31+
{
32+
String parsed = HttpUtils.parseParametersEncode("https://webcast.tiktok.com/webcast/im/fetch/", new HashMap<>());
33+
34+
Assertions.assertEquals("https://webcast.tiktok.com/webcast/im/fetch/", parsed);
35+
}
36+
37+
@Test
38+
public void parseParametersEncode_ValidParameters_ShouldConstructValidURL()
39+
{
40+
LinkedHashMap<String, Object> testMap = new LinkedHashMap<>();
41+
testMap.put("room_id", 1);
42+
testMap.put("root_referer", "https://www.tiktok.com/");
43+
String parsed = HttpUtils.parseParametersEncode("https://webcast.tiktok.com/webcast/im/fetch/", testMap);
44+
45+
Assertions.assertEquals("https://webcast.tiktok.com/webcast/im/fetch/?room_id=1&root_referer=https%3A%2F%2Fwww.tiktok.com%2F", parsed);
46+
}
47+
}

0 commit comments

Comments
 (0)