Fix Flirt4Free thumb overviews
This commit is contained in:
parent
2d3bb0c5c8
commit
19c1719d20
|
@ -36,7 +36,7 @@ public class Flirt4FreeFavoritesUpdateService extends PaginatedScheduledService
|
||||||
@Override
|
@Override
|
||||||
public List<Model> call() throws IOException {
|
public List<Model> call() throws IOException {
|
||||||
List<Model> models = new ArrayList<>();
|
List<Model> models = new ArrayList<>();
|
||||||
String url = flirt4free.getBaseUrl() + "/my-account/secure/favorites.php?a=models&sort=online&pg=" + page;
|
String url = flirt4free.getBaseUrl() + "/my-account/secure/favorites.php?a=models&sort=online&status=all&pg=" + page;
|
||||||
SiteUiFactory.getUi(flirt4free).login();
|
SiteUiFactory.getUi(flirt4free).login();
|
||||||
Request request = new Request.Builder()
|
Request request = new Request.Builder()
|
||||||
.url(url)
|
.url(url)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import static ctbrec.io.HttpConstants.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -13,13 +12,11 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.jsoup.nodes.Element;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.io.HtmlParser;
|
|
||||||
import ctbrec.io.HttpException;
|
import ctbrec.io.HttpException;
|
||||||
import ctbrec.sites.flirt4free.Flirt4Free;
|
import ctbrec.sites.flirt4free.Flirt4Free;
|
||||||
import ctbrec.sites.flirt4free.Flirt4FreeModel;
|
import ctbrec.sites.flirt4free.Flirt4FreeModel;
|
||||||
|
@ -66,15 +63,20 @@ public class Flirt4FreeUpdateService extends PaginatedScheduledService {
|
||||||
private List<Model> parseResponse(Response response) throws IOException {
|
private List<Model> parseResponse(Response response) throws IOException {
|
||||||
List<Flirt4FreeModel> models = new ArrayList<>();
|
List<Flirt4FreeModel> models = new ArrayList<>();
|
||||||
String body = response.body().string();
|
String body = response.body().string();
|
||||||
Matcher m = Pattern.compile("window\\.homepageData = (\\{.*\\})", Pattern.DOTALL).matcher(body);
|
Matcher m = Pattern.compile("window\\.__homePageData__ = (\\{.*\\})", Pattern.DOTALL).matcher(body);
|
||||||
if (m.find()) {
|
if (m.find()) {
|
||||||
JSONObject data = new JSONObject(m.group(1));
|
JSONObject data = new JSONObject(m.group(1));
|
||||||
JSONArray modelData = data.getJSONArray("liveModels");
|
JSONArray modelData = data.getJSONArray("models");
|
||||||
LOG.debug("Found {} models", modelData.length());
|
LOG.debug("Found {} models", modelData.length());
|
||||||
for (int i = 0; i < modelData.length(); i++) {
|
for (int i = 0; i < modelData.length(); i++) {
|
||||||
Flirt4FreeModel model = parseModel(modelData.getString(i));
|
JSONObject modelJson = modelData.getJSONObject(i);
|
||||||
if (model != null) {
|
try {
|
||||||
models.add(model);
|
Flirt4FreeModel model = parseModel(modelJson);
|
||||||
|
if (model != null) {
|
||||||
|
models.add(model);
|
||||||
|
}
|
||||||
|
} catch(Exception e) {
|
||||||
|
LOG.warn("Couldn't parse model {}", modelJson);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return models.stream()
|
return models.stream()
|
||||||
|
@ -87,43 +89,22 @@ public class Flirt4FreeUpdateService extends PaginatedScheduledService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Flirt4FreeModel parseModel(String modelHtml) {
|
private Flirt4FreeModel parseModel(JSONObject modelData) {
|
||||||
if (modelHtml.trim().isEmpty() || !modelHtml.contains("modelLink")) {
|
String name = modelData.getString("model_seo_name");
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Element modelDiv = HtmlParser.getTag(modelHtml, "div[class~=homepageModel]");
|
|
||||||
String name = modelDiv.attr("data-model-seo-name");
|
|
||||||
Flirt4FreeModel model = (Flirt4FreeModel) flirt4Free.createModel(name);
|
Flirt4FreeModel model = (Flirt4FreeModel) flirt4Free.createModel(name);
|
||||||
model.setDisplayName(modelDiv.attr("data-model-name"));
|
model.setDisplayName(modelData.getString("display"));
|
||||||
Element img = HtmlParser.getTag(modelHtml, "a[class*=modelLink] img");
|
model.setDescription(modelData.getString("topic"));
|
||||||
img.setBaseUri(url);
|
model.setUrl(Flirt4Free.BASE_URI + "/rooms/" + model.getName() + '/');
|
||||||
if (img.hasAttr("data-live-image-src")) {
|
model.setNew(modelData.optString("is_new", "0").equals("1"));
|
||||||
model.setPreview(img.absUrl("data-live-image-src"));
|
String videoHost = modelData.getString("video_host");
|
||||||
} else if (img.hasAttr("data-static-image-src")) {
|
String modelId = modelData.getString("model_id");
|
||||||
model.setPreview(img.absUrl("data-static-image-src"));
|
|
||||||
} else if (img.hasAttr("data-image-url")) {
|
|
||||||
model.setPreview(img.absUrl("data-image-url"));
|
|
||||||
} else {
|
|
||||||
// background-image: url('https://cdn1.vscdns.com/images/models/samples-640x480/3241715.jpg')
|
|
||||||
Matcher m = Pattern.compile("background-image: url\\('(.*?)'\\)").matcher(img.attr("style"));
|
|
||||||
if (m.find()) {
|
|
||||||
model.setPreview(m.group(1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Element link = HtmlParser.getTag(modelHtml, "a.name");
|
|
||||||
model.setDisplayName(link.attr("title"));
|
|
||||||
Element modelLink = HtmlParser.getTag(modelHtml, "a[class~=modelLink]");
|
|
||||||
model.setUrl(Flirt4Free.BASE_URI + "/rooms/" + modelDiv.attr("data-model-seo-name") + '/');
|
|
||||||
model.setDescription("");
|
|
||||||
String videoHost = modelLink.attr("data-video-host");
|
|
||||||
String modelId = modelLink.attr("data-model-id").substring(5);
|
|
||||||
model.setId(modelId);
|
model.setId(modelId);
|
||||||
String streamUrl = "https://manifest.vscdns.com/manifest.m3u8.m3u8?key=nil&provider=level3&secure=true&host=" + videoHost
|
String streamUrl = "https://manifest.vscdns.com/manifest.m3u8.m3u8?key=nil&provider=level3&secure=true&host=" + videoHost
|
||||||
+ "&model_id=" + modelId;
|
+ "&model_id=" + modelId;
|
||||||
model.setStreamUrl(streamUrl);
|
model.setStreamUrl(streamUrl);
|
||||||
|
model.setPreview("https://live-screencaps.vscdns.com/"+ modelId +"-desktop.jpg");
|
||||||
model.setOnlineState(ctbrec.Model.State.ONLINE);
|
model.setOnlineState(ctbrec.Model.State.ONLINE);
|
||||||
model.setOnline(true);
|
model.setOnline(true);
|
||||||
model.setNew(!Optional.ofNullable(modelDiv.attr("data-model-new")).orElse("0").equals("0"));
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue