Adjust xxx scraping

This commit is contained in:
DariusIII
2025-08-15 15:35:41 +02:00
parent cf5831d156
commit 00253967bc
5 changed files with 69 additions and 35 deletions
+10 -8
View File
@@ -66,16 +66,14 @@ class ADE extends AdultMovies
'#(?:streamID:\s\")(?P<streamid>[0-9A-Z]+)(?:\")#',
$this->_response,
$hits
)
) {
)) {
$this->_res['trailers']['streamid'] = trim($hits['streamid']);
}
if (preg_match(
'#(?:BaseStreamingUrl:\s\")(?P<baseurl>[\d]+.[\d]+.[\d]+.[\d]+)(?:\")#',
'#(?:BaseStreamingUrl:\s\")(?P<baseurl>[\d]+\.[\d]+\.[\d]+\.[\d]+)(?:\")#',
$this->_response,
$hits
)
) {
)) {
$this->_res['trailers']['baseurl'] = $hits['baseurl'];
}
}
@@ -105,9 +103,13 @@ class ADE extends AdultMovies
*/
protected function synopsis(): array
{
$ret = $this->_html->findOne('meta[name=og:description]')->content;
if ($ret !== false) {
$this->_res['synopsis'] = trim($ret);
// Prefer OpenGraph description, fall back to standard meta description
$meta = $this->_html->findOne('meta[property=og:description]');
if (! $meta) {
$meta = $this->_html->findOne('meta[name=description]');
}
if ($meta && isset($meta->content) && $meta->content !== false) {
$this->_res['synopsis'] = trim($meta->content);
}
return $this->_res;
+20 -11
View File
@@ -109,22 +109,26 @@ class AEBN extends AdultMovies
*/
protected function cast(): array
{
$this->_res = [];
// Do not reset the whole results array; only populate the cast key.
$cast = [];
$ret = $this->_html->findOne('div.starsFull');
if (! $ret instanceof SimpleHtmlDomNodeBlank) {
foreach ($ret->find('span[itemprop=name]') as $star) {
$this->_res['cast'][] = trim($star->plaintext);
$cast[] = trim($star->plaintext);
}
} else {
$ret = $this->_html->findOne('div.detailsLink');
if (! $ret instanceof SimpleHtmlDomNodeBlank) {
foreach ($ret->find('span') as $star) {
if (str_contains($star->plaintext, '/More/') && str_contains($star->plaintext, '/Stars/')) {
$this->_res['cast'][] = trim($star->plaintext);
$cast[] = trim($star->plaintext);
}
}
}
}
if (! empty($cast)) {
$this->_res['cast'] = $cast;
}
return $this->_res;
}
@@ -160,14 +164,19 @@ class AEBN extends AdultMovies
*/
protected function synopsis(): array
{
if ($ret = $this->_html->findOne('span[itemprop=about]')) {
if ($ret === null) {
if ($ret = $this->_html->findOne('div.movieDetailDescription')) {
$this->_res['synopsis'] = preg_replace('/Description:\s/', '', $this->_res['plot']);
}
} else {
$this->_res['synopsis'] = trim($ret->plaintext);
}
// Prefer the modern schema attribute
$ret = $this->_html->findOne('span[itemprop=about]');
if ($ret && $ret->plaintext !== null) {
$this->_res['synopsis'] = trim($ret->plaintext);
return $this->_res;
}
// Fallback to legacy description container
$ret = $this->_html->findOne('div.movieDetailDescription');
if ($ret && $ret->plaintext !== null) {
$text = trim($ret->plaintext);
$this->_res['synopsis'] = preg_replace('/^Description:\s*/', '', $text);
}
return $this->_res;
+6 -2
View File
@@ -45,8 +45,12 @@ abstract class AdultMovies
public function getAll(): bool|array
{
$results = [];
if ($this->_directUrl !== null) {
$results['title'] = $this->_title;
// Only include when present
if (! empty($this->_directUrl)) {
if (! empty($this->_title)) {
$results['title'] = $this->_title;
}
$results['directurl'] = $this->_directUrl;
}
+24 -6
View File
@@ -130,13 +130,31 @@ class Hotmovies extends AdultMovies
protected function cast(): array
{
$cast = [];
if ($this->_html->find('.stars bottom_margin')) {
foreach ($this->_html->find('a[title]') as $e) {
$e = trim($e->title);
$e = preg_replace('/\((.*)\)/', '', $e);
$cast[] = trim($e);
// Prefer scoped search within stars container to avoid unrelated links
if ($container = $this->_html->findOne('.stars')) {
foreach ($container->find('a[title]') as $e) {
$name = trim($e->title);
$name = preg_replace('/\((.*)\)/', '', $name);
$name = trim($name);
if ($name !== '') {
$cast[] = $name;
}
}
$this->_res['cast'] = $cast;
}
// Fallback: anchors that look like performer links
if (empty($cast)) {
foreach ($this->_html->find('a[href*="/performers/"]') as $e) {
$name = trim($e->plaintext);
if ($name !== '') {
$cast[] = $name;
}
}
}
if (! empty($cast)) {
$this->_res['cast'] = array_values(array_unique($cast));
}
return $this->_res;
+9 -8
View File
@@ -115,7 +115,7 @@ class Popporn extends AdultMovies
{
// Method 1: Try structured data
if (preg_match('/"description":\s*"(.*?)"/is', $this->_response, $match)) {
$this->_res['synopsis'] = trim(html_entity_decode(str_replace('\u', '\\u', $match[1])));
$this->_res['synopsis'] = trim(html_entity_decode(str_replace('\\u', '\\u', $match[1])));
return $this->_res;
}
@@ -193,10 +193,11 @@ class Popporn extends AdultMovies
// Method 3: Original flash-based trailer extraction
if ($ret = $this->_html->findOne('input#thickbox-trailer-link')) {
$ret->value = trim($ret->value);
$ret->value = str_replace('..', '', $ret->value);
$val = \property_exists($ret, 'value') ? (string) $ret->value : '';
$val = trim($val);
$val = str_replace('..', '', $val);
$tmprsp = $this->_response;
$this->_trailUrl = $ret->value;
$this->_trailUrl = $val;
if (preg_match_all('/productID="\+(?<id>\d+),/', $this->_response, $hits)) {
$productid = $hits['id'][0];
$random = ((float) mt_rand() / (float) mt_getrandmax()) * 5400000000000000;
@@ -204,12 +205,12 @@ class Popporn extends AdultMovies
$this->_postParams = 'method=pipeStreamLoc&productID='.$productid;
$response = getRawHtml(self::BASE_URL.$this->_trailUrl, $this->cookie, $this->_postParams);
if (! empty($response)) {
$ret = json_decode(json_decode($response, true), true);
if ($ret && isset($ret['LOC'])) {
$retJson = json_decode(json_decode($response, true), true);
if ($retJson && isset($retJson['LOC'])) {
$this->_res['trailers']['baseurl'] = self::BASE_URL.'/flashmediaserver/trailerPlayer.swf';
$this->_res['trailers']['flashvars'] = 'subscribe=false&image=&file='.self::BASE_URL.'/'.$ret['LOC'].'&autostart=false';
$this->_res['trailers']['flashvars'] = 'subscribe=false&image=&file='.self::BASE_URL.'/'.$retJson['LOC'].'&autostart=false';
// Also provide a modern URL if possible
$this->_res['trailers']['url'] = self::BASE_URL.'/'.$ret['LOC'];
$this->_res['trailers']['url'] = self::BASE_URL.'/'.$retJson['LOC'];
}
}
$this->_response = $tmprsp;