jafea7-ctbrec-v5.3.0-based/common/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java

175 lines
5.2 KiB
Java

package ctbrec.sites.chaturbate;
import static ctbrec.io.HttpConstants.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ctbrec.Config;
import ctbrec.Model;
import ctbrec.io.HtmlParser;
import ctbrec.io.HttpClient;
import ctbrec.sites.AbstractSite;
import okhttp3.Request;
import okhttp3.Response;
public class Chaturbate extends AbstractSite {
static String baseUrl = "https://chaturbate.com";
public static final String AFFILIATE_LINK = "https://chaturbate.com/in/?track=default&tour=grq0&campaign=55vTi";
public static final String REGISTRATION_LINK = "https://chaturbate.com/in/?track=default&tour=g4pe&campaign=55vTi";
private ChaturbateHttpClient httpClient;
@Override
public void init() throws IOException {
baseUrl = Config.getInstance().getSettings().chaturbateBaseUrl;
}
@Override
public String getName() {
return "Chaturbate";
}
@Override
public String getBaseUrl() {
return baseUrl;
}
@Override
public String getAffiliateLink() {
return getBaseUrl() + "/in/?track=default&tour=LQps&campaign=55vTi&room=0xb00bface";
}
@Override
public Model createModel(String name) {
ChaturbateModel m = new ChaturbateModel(this);
m.setName(name);
m.setUrl(getBaseUrl() + '/' + name + '/');
m.setPreview("https://roomimg.stream.highwebmedia.com/ri/" + name + ".jpg?" + Instant.now().getEpochSecond());
return m;
}
@Override
public Double getTokenBalance() throws IOException {
String username = Config.getInstance().getSettings().username;
if (username == null || username.trim().isEmpty()) {
throw new IOException("Not logged in");
}
String url = "https://chaturbate.com/p/" + username + "/";
Request req = new Request.Builder()
.url(url)
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
.build();
Response resp = getHttpClient().execute(req);
if (resp.isSuccessful()) {
String profilePage = resp.body().string();
String tokenText = HtmlParser.getText(profilePage, "span.tokencount");
int tokens = Integer.parseInt(tokenText);
return (double) tokens;
} else {
throw new IOException("HTTP response: " + resp.code() + " - " + resp.message());
}
}
@Override
public String getBuyTokensLink() {
return AFFILIATE_LINK;
}
@Override
public synchronized boolean login() throws IOException {
return credentialsAvailable() && getHttpClient().login();
}
@Override
public HttpClient getHttpClient() {
if (httpClient == null) {
httpClient = new ChaturbateHttpClient();
}
return httpClient;
}
@Override
public void shutdown() {
if (httpClient != null) {
httpClient.shutdown();
}
}
@Override
public boolean supportsFollow() {
return true;
}
@Override
public boolean supportsTips() {
return true;
}
@Override
public boolean supportsSearch() {
return true;
}
@Override
public List<Model> search(String q) throws IOException, InterruptedException {
String url = baseUrl + "?keywords=" + URLEncoder.encode(q, "utf-8");
List<Model> result = new ArrayList<>();
// search online models
Request req = new Request.Builder()
.url(url)
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
.build();
try(Response resp = getHttpClient().execute(req)) {
if(resp.isSuccessful()) {
result.addAll(ChaturbateModelParser.parseModels(this, resp.body().string()));
}
}
// since chaturbate does not return offline models, we at least try, if the profile page
// exists for the search string
url = baseUrl + '/' + q;
req = new Request.Builder()
.url(url)
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
.build();
try(Response resp = getHttpClient().execute(req)) {
if(resp.isSuccessful()) {
Model model = createModel(q);
result.add(model);
}
}
return result;
}
@Override
public boolean isSiteForModel(Model m) {
return m instanceof ChaturbateModel;
}
@Override
public boolean credentialsAvailable() {
String username = Config.getInstance().getSettings().username;
return username != null && !username.trim().isEmpty();
}
@Override
public Model createModelFromUrl(String url) {
Matcher m = Pattern.compile("https?://.*?chaturbate.com(?:/p)?/([^/]*?)/?").matcher(url);
if(m.matches()) {
String modelName = m.group(1);
return createModel(modelName);
} else {
return super.createModelFromUrl(url);
}
}
}