Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Brand New Amateurs/Add Support for Site #1884

Merged
merged 4 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Contents/Code/PAsiteList.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@
import siteXevUnleashed
import networkPKJMedia
import networkBellesa
import siteBrandNewAmateurs

searchSites = {
0: ('BlackedRaw', 'https://www.blackedraw.com', '/graphql'),
Expand Down Expand Up @@ -1891,6 +1892,8 @@
1796: ('Whorecraft VR', 'https://whorecraftvr.com', '/MemberSceneSearch?q='),
1797: ('Freeze', 'https://freeze.xxx', '/?s='),
1798: ('Plants vs Cunts', 'https://plantsvscunts.com', '/?s='),
1799: ('Brand New Amateurs', 'https://brandnewamateurs.com', '/models'),
1800: ('Hot Wives Cheating', 'https://hotwivescheating.com/', '/MemberSceneSearch?q='),
}

abbreviations = (
Expand Down Expand Up @@ -2719,7 +2722,7 @@ def getProviderFromSiteNum(siteNum):
provider = siteVivid

# AdultEmpireCash Network
elif siteNum == 815 or siteNum == 1337 or siteNum == 1574 or (1765 <= siteNum <= 1796):
elif siteNum == 815 or siteNum == 1337 or siteNum == 1574 or (1765 <= siteNum <= 1796) or siteNum == 1800:
provider = networkAdultEmpireCash

# My Pervy Family
Expand Down Expand Up @@ -3233,4 +3236,8 @@ def getProviderFromSiteNum(siteNum):
elif 1760 <= siteNum <= 1764:
provider = networkPKJMedia

# Brand New Amateurs
elif siteNum == 1799:
provider = siteBrandNewAmateurs

return provider
64 changes: 47 additions & 17 deletions Contents/Code/networkAdultEmpireCash.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,54 @@


def search(results, lang, siteNum, searchData):
sceneID = None
parts = searchData.title.split()
if unicode(parts[0], 'UTF-8').isdigit():
sceneID = parts[0]
searchData.title = searchData.title.replace(sceneID, '', 1).strip()

directURL = '%s/%s/%s.html' % (PAsearchSites.getSearchBaseURL(siteNum), sceneID, slugify(searchData.title))

req = PAutils.HTTPRequest(directURL)

if req.ok:
detailsPageElements = HTML.ElementFromString(req.text)
titleNoFormatting = PAutils.parseTitle(detailsPageElements.xpath('//h1[@class="description"]/text()')[0].strip(), siteNum)
curID = PAutils.Encode(directURL)

date = detailsPageElements.xpath('//div[@class="release-date"]/text()')
if date:
releaseDate = datetime.strptime(date[0].strip(), '%b %d, %Y').strftime('%Y-%m-%d')
else:
releaseDate = searchData.dateFormat() if searchData.date else ''

displayDate = releaseDate if date else ''

score = 100

results.Append(MetadataSearchResult(id='%s|%d' % (curID, siteNum), name='%s [%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), displayDate), score=score, lang=lang))

req = PAutils.HTTPRequest(PAsearchSites.getSearchSearchURL(siteNum) + searchData.encoded)
searchResults = HTML.ElementFromString(req.text)
for searchResult in searchResults.xpath('//div[contains(@class, "item-grid")]/div[@class="grid-item"]'):
if siteNum == 815 or siteNum == 1337 or siteNum == 1776:
# Modification for JAYs POV, SpankMonster, Hot Wife Fun
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('.//img[contains(@class, "img-full-fluid")]/@title')[0], siteNum)
curID = PAutils.Encode(searchResult.xpath('.//article[contains(@class, "scene-update")]/a/@href')[0])
elif siteNum == 1766 or siteNum == 1779 or siteNum == 1790 or siteNum == 1792:
# Modification for Bizarre Entertainment, Jonathan Jordan XXX, Smut Factor, Step House XXX
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('.//a[@class="scene-title"]/p/text()')[0].split(' | ', 1)[0], siteNum)
curID = PAutils.Encode(searchResult.xpath('.//a[@class="scene-title"]/@href')[0])
else:
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('.//a[@class="scene-title"]/h6/text()')[0], siteNum)
curID = PAutils.Encode(searchResult.xpath('.//a[@class="scene-title"]/@href')[0])

score = 100 - Util.LevenshteinDistance(searchData.title.lower(), titleNoFormatting.lower())

results.Append(MetadataSearchResult(id='%s|%d' % (curID, siteNum), name='%s [%s]' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum)), score=score, lang=lang))
try:
if siteNum == 815 or siteNum == 1337 or siteNum == 1776 or siteNum == 1800:
# Modification for JAYs POV, SpankMonster, Hot Wife Fun
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('.//img[contains(@class, "img-full-fluid")]/@title')[0].strip(), siteNum)
curID = PAutils.Encode(searchResult.xpath('.//article[contains(@class, "scene-update")]/a/@href')[0])
elif siteNum == 1766 or siteNum == 1779 or siteNum == 1790 or siteNum == 1792:
# Modification for Bizarre Entertainment, Jonathan Jordan XXX, Smut Factor, Step House XXX
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('.//a[@class="scene-title"]/p/text()')[0].split(' | ', 1)[0].strip(), siteNum)
curID = PAutils.Encode(searchResult.xpath('.//a[@class="scene-title"]/@href')[0])
else:
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('.//a[@class="scene-title"]/h6/text()')[0].strip(), siteNum)
curID = PAutils.Encode(searchResult.xpath('.//a[@class="scene-title"]/@href')[0])

score = 100 - Util.LevenshteinDistance(searchData.title.lower(), titleNoFormatting.lower())

results.Append(MetadataSearchResult(id='%s|%d' % (curID, siteNum), name='%s [%s]' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum)), score=score, lang=lang))
except:
pass

return results

Expand Down Expand Up @@ -51,9 +81,9 @@ def update(metadata, lang, siteNum, movieGenres, movieActors, art):
metadata.collections.add(metadata.tagline)

# Release Date
date = detailsPageElements.xpath('//div[@class="release-date"]/text()')[0].strip()
date = detailsPageElements.xpath('//div[@class="release-date"]/text()')
if date:
date_object = datetime.strptime(date, '%b %d, %Y')
date_object = datetime.strptime(date[0].strip(), '%b %d, %Y')
metadata.originally_available_at = date_object
metadata.year = metadata.originally_available_at.year

Expand Down
92 changes: 92 additions & 0 deletions Contents/Code/siteBrandNewAmateurs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import PAsearchSites
import PAutils


def search(results, lang, siteNum, searchData):
url = '%s/%s.html' % (PAsearchSites.getSearchSearchURL(siteNum), searchData.title.replace(' ', ''))
req = PAutils.HTTPRequest(url)

searchResults = HTML.ElementFromString(req.text)
for searchResult in searchResults.xpath('//div[contains(@class, "item-video")]'):
titleNoFormatting = PAutils.parseTitle(searchResult.xpath('./div[@class="item-thumb"]//a/@title')[0], siteNum)
curID = PAutils.Encode(searchResult.xpath('./div[@class="item-thumb"]//a/@href')[0])
actorURL = PAutils.Encode(url)

releaseDate = searchData.dateFormat() if searchData.date else ''

score = 100 - Util.LevenshteinDistance(searchData.title.lower(), titleNoFormatting.lower())

results.Append(MetadataSearchResult(id='%s|%d|%s|%s' % (curID, siteNum, releaseDate, actorURL), name='%s [%s]' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum)), score=score, lang=lang))

return results


def update(metadata, lang, siteNum, movieGenres, movieActors, art):
metadata_id = str(metadata.id).split('|')
sceneURL = PAutils.Decode(metadata_id[0])
actorURL = PAutils.Decode(metadata_id[3])
if not sceneURL.startswith('http'):
sceneURL = PAsearchSites.getSearchBaseURL(siteNum) + sceneURL
req = PAutils.HTTPRequest(sceneURL)
detailsPageElements = HTML.ElementFromString(req.text)

# Title
metadata.title = PAutils.parseTitle(detailsPageElements.xpath('//h3')[0].text_content().strip(), siteNum)

# Summary
try:
metadata.summary = detailsPageElements.xpath('//div[@class="videoDetails clear"]/p')[0].text_content().strip()
except:
pass

# Studio
metadata.studio = PAsearchSites.getSearchSiteName(siteNum)

# Tagline and Collection(s)
metadata.collections.add(metadata.studio)

# Genres
for genreLink in detailsPageElements.xpath('//ul[./li[contains(., "Tags:")]]//a'):
genreName = genreLink.text_content().strip()

movieGenres.addGenre(genreName)

# Actor(s)
req = PAutils.HTTPRequest(actorURL)
actorPageElements = HTML.ElementFromString(req.text)
actorName = actorPageElements.xpath('//h3')[0].text_content().strip()
actorPhotoURL = actorPageElements.xpath('//div[@class="profile-pic"]/img/@src0_3x')[0]
if not actorPhotoURL.startswith('http'):
actorPhotoURL = PAsearchSites.getSearchBaseURL(siteNum) + actorPhotoURL
movieActors.addActor(actorName, actorPhotoURL)

# Posters
xpaths = [
'//meta[contains(@name, "twitter:image")]/@content'
]

for xpath in xpaths:
for poster in detailsPageElements.xpath(xpath):
if 'http' not in poster:
poster = PAsearchSites.getSearchBaseURL(siteNum) + poster

Log('Artwork found: %d' % len(art))
for idx, posterUrl in enumerate(art, 1):
if not PAsearchSites.posterAlreadyExists(posterUrl, metadata):
# Download image file for analysis
try:
image = PAutils.HTTPRequest(posterUrl)
im = StringIO(image.content)
resized_image = Image.open(im)
width, height = resized_image.size
# Add the image proxy items to the collection
if width > 1 or height > width:
# Item is a poster
metadata.posters[posterUrl] = Proxy.Media(image.content, sort_order=idx)
if width > 100 and width > height:
# Item is an art item
metadata.art[posterUrl] = Proxy.Media(image.content, sort_order=idx)
except:
pass

return metadata
1 change: 1 addition & 0 deletions docs/sitelist.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ If you're having difficulty finding the SceneID, double-check [PAsiteList.py](..
- Hot Guys Fuck
- Sugar Daddy Porn
+ #### Bound Honeys | ✓ - **Title only, Date Add**
+ #### Brand New Amateurs | ✓ - **Actor Name**
+ #### Brazzers Network
##### Matching type (main): ✓ - **Title only**
##### Matching type (alternate): ❌ - **SceneID**
Expand Down
Loading