Skip to content

Commit

Permalink
Merge pull request #1934 from diamondpete/radicalcash
Browse files Browse the repository at this point in the history
Refactor/Move Radical Cash Sites to API Search and Add Support for more Sites
  • Loading branch information
DirtyRacer1337 authored Aug 1, 2024
2 parents 22f4bdb + 9d067e4 commit 1bbb4aa
Show file tree
Hide file tree
Showing 5 changed files with 171 additions and 332 deletions.
88 changes: 51 additions & 37 deletions Contents/Code/PAsiteList.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@
import networkSinX
import networkPureCFNM
import siteATKGirlfriends
import networkTwoWebMedia
import siteInterracialPass
import network1service
import networkTeamSkeet
Expand Down Expand Up @@ -146,7 +145,6 @@
import siteFemjoy
import networkThickCash
import networkPornCZ
import networkTopWebModels
import siteMyDirtyHobby
import networkMetadataAPI
import networkCouplesCinema
Expand Down Expand Up @@ -1030,9 +1028,9 @@
834: ('LadyVoyeurs', 'https://www.ladyvoyeurs.com', '/models/'),
835: ('BAMVisions', 'https://tour.bamvisions.com', '/search.php?st=advanced&qall='),
836: ('ATKGirlfriends', 'https://www.atkgirlfriends.com', '/tour/model/'),
837: ('Wank It Now', 'https://www.wankitnow.com', '/search'),
838: ('Bopping Babes', 'https://www.boppingbabes.com', '/search'),
839: ('Upskirt Jerk', 'https://www.upskirtjerk.com', '/search'),
837: ('WankItNow', 'https://www.wankitnow.com', '/videos'),
838: ('BoppingBabes', 'https://www.boppingbabes.com', '/videos'),
839: ('UpskirtJerk', 'https://www.upskirtjerk.com', '/videos'),
840: ('Interracial Pass', 'https://www.interracialpass.com', '/t1/search.php?query='),
841: ('LookAtHerNow', 'https://www.lookathernow.com', 'https://site-api.project1service.com'),
842: ('Mylfwood', 'https://www.mylf.com', '/movies/'),
Expand Down Expand Up @@ -1422,14 +1420,14 @@
1226: ('Czech Bi Porn', 'https://www.czechbiporn.com', '/en/search-results?value='),
1227: ('Czech Shemale', 'https://www.czechshemale.com', '/en/search-results?value='),
1228: ('Czech Gay City', 'https://www.czechgaycity.com', '/en/search-results?value='),
1229: ('Top Web Models', 'https://tour.topwebmodels.com', '/search/'),
1230: ('Big Gulp Girls', 'https://tour.biggulpgirls.com', '/search/'),
1231: ('2 Girls 1 Camera', 'https://tour.2girls1camera.com', '/search/'),
1232: ('Cougar Season', 'https://tour.cougarseason.com', '/search/'),
1233: ('Deepthroat Sirens', 'https://tour.deepthroatsirens.com', '/search/'),
1234: ('Facials Forever', 'https://tour.facialsforever.com', '/search/'),
1235: ('Pounded Petite', 'https://tour.poundedpetite.com', '/search/'),
1236: ('She\'s Brand New', 'https://tour.shesbrandnew.com', '/search/'),
1229: ('Top Web Models', 'https://tour.topwebmodels.com', '/scenes'),
1230: ('Big Gulp Girls', 'https://tour.biggulpgirls.com', '/scenes'),
1231: ('2 Girls 1 Camera', 'https://tour.2girls1camera.com', '/scenes'),
1232: ('Cougar Season', 'https://tour.cougarseason.com', '/scenes'),
1233: ('Deepthroat Sirens', 'https://tour.deepthroatsirens.com', '/scenes'),
1234: ('Facials Forever', 'https://tour.facialsforever.com', '/scenes'),
1235: ('Pounded Petite', 'https://tour.poundedpetite.com', '/scenes'),
1236: ('She\'s Brand New', 'https://tour.shesbrandnew.com', '/scenes'),
1237: ('MyDirtyHobby', 'https://en.mydirtyhobby.com', '/search?searchKeyword='),
1238: ('Deviante', 'https://www.deviante.com', 'https://site-api.project1service.com'),
1239: ('Forgive Me Father', 'https://www.forgivemefather.com', 'https://site-api.project1service.com'),
Expand Down Expand Up @@ -1768,17 +1766,17 @@
1672: ('Young Busty', 'https://adultprime.com', '/studios/search?type='),
1673: ('Abuse Me', 'http://bangbrosportal.com', '/?s='),
1674: ('DirtyAuditions', 'https://dirtyauditions.com', '/_next/data/'),
1675: ('Sexy Modern Bull', 'https://sexymodernbull.com', '/search/'),
1676: ('GotFilled', 'https://gotfilled.com', '/search/'),
1677: ('ComeInside', 'https://comeinside.com', '/models/'),
1678: ('Benefit Monkey', 'https://benefitmonkey.com', '/search/'),
1679: ('Ricky\'s Room', 'https://rickysroom.com', '/search/'),
1680: ('Inserted', 'https://inserted.com', '/search/'),
1681: ('BJRAW', 'https://bjraw.com', '/search/'),
1682: ('AltErotic', 'https://alterotic.com', '/search/'),
1683: ('Lezkey', 'https://lezkey.com', '/search/'),
1684: ('Side Chick', 'https://sidechick.com', '/search/'),
1685: ('JAV888', 'https://jav888.com', '/search/'),
1675: ('Sexy Modern Bull', 'https://sexymodernbull.com', '/videos'),
1676: ('GotFilled', 'https://gotfilled.com', '/videos'),
1677: ('Come Inside', 'https://comeinside.com', '/scenes'),
1678: ('Benefit Monkey', 'https://benefitmonkey.com', '/scenes'),
1679: ('Ricky\'s Room', 'https://rickysroom.com', '/videos'),
1680: ('Inserted', 'https://inserted.com', '/videos'),
1681: ('BJ Raw', 'https://bjraw.com', '/videos'),
1682: ('AltErotic', 'https://alterotic.com', '/videos'),
1683: ('Lezkey', 'https://lezkey.com', '/scenes'),
1684: ('SIDECHICK', 'https://sidechick.com', '/videos'),
1685: ('JAV888', 'https://jav888.com', '/videos'),
1686: ('Smashed', 'https://nubiles-porn.com', '/video/website/68/'),
1687: ('Pie 4k', 'https://vip4k.com', '/en/search/'),
1688: ('Shower 4K', 'https://pornplus.com', '/video/'),
Expand Down Expand Up @@ -1840,7 +1838,7 @@
1744: ('ScoreVideos', 'https://www.scorevideos.com', '/porn-videos/'),
1745: ('Bush', 'https://www.cherrypimps.com', '/search.php?query='),
1746: ('Ginger', 'https://www.cherrypimps.com', '/search.php?query='),
1747: ('Divine-DD', 'https://www.divine-dd.com', '/search/'),
1747: ('Divine-DD', 'https://www.divine-dd.com', '/videos'),
1748: ('Serve 4K', 'https://vip4k.com', '/en/search/'),
1749: ('Fan Fuckers', 'https://adultprime.com', '/studios/search?type='),
1750: ('Fill Up My Mom', 'https://www.filthykings.com', 'https://tsmkfa364q-dsn.algolia.net/1/indexes/*/queries'),
Expand Down Expand Up @@ -1895,9 +1893,9 @@
1799: ('Brand New Amateurs', 'https://brandnewamateurs.com', '/models'),
1800: ('Hot Wives Cheating', 'https://hotwivescheating.com/', '/MemberSceneSearch?q='),
1801: ('Pornbox', 'https://www.pornbox.com', '/store/search?q='),
1802: ('Downblouse Jerk', 'https://www.downblousejerk.com', '/search'),
1803: ('Real Bikini Girls', 'https://www.realbikinigirls.com', '/search'),
1804: ('Lingerie Tales', 'https://www.lingerietales.com', '/search'),
1802: ('DownblouseJerk', 'https://www.downblousejerk.com', '/videos'),
1803: ('RealBikiniGirls', 'https://www.realbikinigirls.com', '/videos'),
1804: ('LingerieTales', 'https://www.lingerietales.com', '/videos'),
1805: ('DFXtra', 'https://www.dogfartnetwork.com', 'https://tsmkfa364q-dsn.algolia.net/1/indexes/*/queries'),
1806: ('Milfy', 'https://www.milfy.com', '/graphql'),
1807: ('Use POV', 'https://www.usepov.com', '/movies/'),
Expand All @@ -1922,6 +1920,28 @@
1826: ('Cream Her', 'https://www.creamher.com', '/search.php?query='),
1827: ('DR. Daddy POV', 'https://www.drdaddypov.com', '/search.php?query='),
1828: ('Goth Girlfriends', 'https://www.gothgirlfriends.com', '/search.php?query='),
1829: ('POV Perv', 'https://tour.povperv.com', '/scenes'),
1830: ('LegendaryX', 'https://legendaryx.com', '/videos'),
1831: ('Amazing Films', 'https://amazingfilms.com', '/videos'),
1832: ('Lucid Flix', 'https://lucidflix.com', '/episodes'),
1833: ('Nick Marxx', 'https://nickmarxx.com', '/videos'),
1834: ('BlackBullChallenge', 'https://blackbullchallenge.com', '/videos'),
1835: ('Dark Shade', 'https://darkshade.com', '/videos'),
1836: ('Dick HD Daily', 'https://dickhddaily.com', '/videos'),
1837: ('Dire Desires', 'https://diredesires.com', '/scenes'),
1838: ('Purity VR', 'https://purityvr.com', '/videos'),
1839: ('Passion POV', 'https://passionpov.com', '/videos'),
1840: ('Queer Crush', 'https://queercrush.com', '/videos'),
1841: ('Hard Werk', 'https://hardwerk.com', '/films'),
1842: ('Cannon Prod', 'https://cannonprod.com', '/videos'),
1843: ('Bemefi', 'https://bemefi.com', '/videos'),
1844: ('FreakMobMedia', 'https://freakmobmedia.com', '/videos'),
1845: ('XFul', 'https://xful.com', '/videos'),
1846: ('S3XUS', 'https://s3xus.com', '/scenes'),
1847: ('Yes Girlz', 'https://yesgirlz.com', '/scenes'),
1848: ('Z Filmz Originals', 'https://z-filmz-originals.com', '/videos'),
1849: ('Hoby Buchanon', 'https://hobybuchanon.com', '/updates'),
1850: ('VRHush', 'https://vrhush.com', '/scenes'),
}

abbreviations = (
Expand Down Expand Up @@ -2021,13 +2041,15 @@
('^faq ', 'FirstAnalQuest '),
('^fds ', 'FakeDrivingSchool '),
('^fft ', 'FemaleFakeTaxi '),
('^ffr ', 'FacialsForever '),
('^fhd ', 'FantasyHD '),
('^fhl ', 'FakeHostel '),
('^fho ', 'FakehubOriginals '),
('^fittingroom ', 'Fitting-Room '),
('^fj ', 'Femjoy '),
('^fka ', 'FakeAgent '),
('^fm ', 'FuckingMachines '),
('^fmm ', 'FreakMobMedia '),
('^fms ', 'FantasyMassage '),
('^frs ', 'FitnessRooms '),
('^ft ', 'FastTimes '),
Expand Down Expand Up @@ -2760,10 +2782,6 @@ def getProviderFromSiteNum(siteNum):
elif siteNum == 836:
provider = siteATKGirlfriends

# TwoWebMedia
elif (837 <= siteNum <= 839) or (1802 <= siteNum <= 1804):
provider = networkTwoWebMedia

# Interracial Pass / ExploitedX / I Kiss Girls
elif siteNum == 840 or (976 <= siteNum <= 978) or siteNum == 1244 or (1563 <= siteNum <= 1564):
provider = siteInterracialPass
Expand Down Expand Up @@ -3080,10 +3098,6 @@ def getProviderFromSiteNum(siteNum):
elif (1196 <= siteNum <= 1228):
provider = networkPornCZ

# Top Web Models
elif (1229 <= siteNum <= 1236):
provider = networkTopWebModels

# MyDirtyHobby
elif siteNum == 1237:
provider = siteMyDirtyHobby
Expand Down Expand Up @@ -3208,7 +3222,7 @@ def getProviderFromSiteNum(siteNum):
provider = siteJAVDatabase

# Radical Cash
elif (1675 <= siteNum <= 1685) or siteNum == 1747:
elif (837 <= siteNum <= 839) or (1229 <= siteNum <= 1236) or (1675 <= siteNum <= 1685) or siteNum == 1747 or (1802 <= siteNum <= 1804) or (1829 <= siteNum <= 1850):
provider = networkRadicalCash

# Teeny Taboo
Expand Down
115 changes: 80 additions & 35 deletions Contents/Code/networkRadicalCash.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,43 +9,49 @@ def search(results, lang, siteNum, searchData):
sceneId = parts[0]
searchData.title = searchData.title.replace(sceneId, '', 1).strip()

if PAsearchSites.getSearchSiteName(siteNum) == 'ComeInside':
searchURL = PAsearchSites.getSearchSearchURL(siteNum) + slugify(searchData.title.lower())
else:
searchURL = PAsearchSites.getSearchSearchURL(siteNum) + searchData.encoded.lower()

searchURL = '%s/api/search/%s' % (PAsearchSites.getSearchBaseURL(siteNum), searchData.encoded.lower())
req = PAutils.HTTPRequest(searchURL)
searchPageElements = HTML.ElementFromString(req.text)

searchResults = json.loads(searchPageElements.xpath('//script[@type="application/json"]')[0].text_content())

if PAsearchSites.getSearchSiteName(siteNum) == 'ComeInside':
data = searchResults['props']['pageProps']['model_contents']
else:
data = searchResults['props']['pageProps']['contents']['data']
searchResults = req.json()
data = searchResults['playlists'] if siteNum == 1677 else searchResults['scenes']

if searchResults:
for searchResult in data:
titleNoFormatting = PAutils.parseTitle(searchResult['title'], siteNum)
videoId = searchResult['id']
for type in ['scene', 'bts']:
if type == 'bts' and siteNum == 1835:
titleNoFormatting = 'BTS: %s' % PAutils.parseTitle(searchResult['title'], siteNum)

releaseDate = parse(searchResult['publish_date']).strftime('%Y-%m-%d')
sceneURL = '%s/bts/%s-bts' % (PAsearchSites.getSearchBaseURL(siteNum), searchResult['slug'])

if PAsearchSites.getSearchSiteName(siteNum) == 'ComeInside':
releaseDate = parse(searchResult['created_at']).strftime('%Y-%m-%d')
sceneURL = '%s/scenes/%s/%s' % (PAsearchSites.getSearchBaseURL(siteNum), videoId, searchResult['slug'])
else:
releaseDate = parse(searchResult['publish_date']).strftime('%Y-%m-%d')
sceneURL = '%s/videos/%s' % (PAsearchSites.getSearchBaseURL(siteNum), searchResult['slug'])
curID = PAutils.Encode(sceneURL)

curID = PAutils.Encode(sceneURL)
if searchData.date:
score = 80 - Util.LevenshteinDistance(searchData.date, releaseDate)
else:
score = 80 - Util.LevenshteinDistance(searchData.title.lower(), titleNoFormatting.lower())

if sceneId and int(sceneId) == int(videoId):
score == 100
elif searchData.date:
score = 80 - Util.LevenshteinDistance(searchData.date, releaseDate)
else:
score = 80 - Util.LevenshteinDistance(searchData.title.lower(), titleNoFormatting.lower())
results.Append(MetadataSearchResult(id='%s|%d' % (curID, siteNum), name='%s [%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), releaseDate), score=score, lang=lang))
elif type == 'scene':
titleNoFormatting = PAutils.parseTitle(searchResult['title'], siteNum)
videoId = searchResult['id']

results.Append(MetadataSearchResult(id='%s|%d' % (curID, siteNum), name='%s [%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), releaseDate), score=score, lang=lang))
if siteNum == 1677:
releaseDate = parse(searchResult['created_at']).strftime('%Y-%m-%d')
sceneURL = '%s/%s/%s' % (PAsearchSites.getSearchSearchURL(siteNum), videoId, searchResult['slug'])
else:
releaseDate = parse(searchResult['publish_date']).strftime('%Y-%m-%d')
sceneURL = '%s/%s' % (PAsearchSites.getSearchSearchURL(siteNum), searchResult['slug'])

curID = PAutils.Encode(sceneURL)

if sceneId and int(sceneId) == int(videoId):
score == 100
elif searchData.date:
score = 80 - Util.LevenshteinDistance(searchData.date, releaseDate)
else:
score = 80 - Util.LevenshteinDistance(searchData.title.lower(), titleNoFormatting.lower())

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

return results

Expand All @@ -58,7 +64,7 @@ def update(metadata, lang, siteNum, movieGenres, movieActors, art):
detailsPageElements = HTML.ElementFromString(req.text)
videoPageElements = json.loads(detailsPageElements.xpath('//script[@type="application/json"]')[0].text_content())

if PAsearchSites.getSearchSiteName(siteNum) == 'ComeInside':
if siteNum == 1677:
video = videoPageElements['props']['pageProps']['playlist']
content = videoPageElements['props']['pageProps']['content']
else:
Expand All @@ -69,14 +75,23 @@ def update(metadata, lang, siteNum, movieGenres, movieActors, art):
metadata.title = PAutils.parseTitle(video['title'], siteNum)

# Summary
metadata.summary = video['description']
summary = video['description']
if not re.search(r'.$(?<=(!|\.|\?))', summary):
summary = summary + '.'
metadata.summary = summary

# Studio
metadata.studio = 'Radical Cash'
if (1229 <= siteNum <= 1236):
metadata.studio = 'Top Web Models'
elif (837 <= siteNum <= 839):
metadata.studio = 'TwoWebMedia'
else:
metadata.studio = 'Radical Cash'

# Tagline and Collection(s)
tagline = PAsearchSites.getSearchSiteName(siteNum)
metadata.tagline = tagline
tagline = content['site'] if siteNum == 1677 else video['site']
if metadata.studio != tagline:
metadata.tagline = tagline
metadata.collections.add(tagline)

# Release Date
Expand All @@ -98,12 +113,25 @@ def update(metadata, lang, siteNum, movieGenres, movieActors, art):
movieActors.addActor(actorName, actorPhotoURL)

# Posters
art.append(content['trailer_screencap'])
if content['trailer_screencap']:
art.append(content['trailer_screencap'])

if 'previews' in content:
for image in content['previews']['full']:
art.append(image)

for imageType in ['extra_thumbnails']:
if imageType in content:
for image in list(content[imageType]):
art.append(image)

if not art:
if 'thumbs' in content:
for image in content['thumbs']:
art.append(image)

images = []
posterExists = False
Log('Artwork found: %d' % len(art))
for idx, posterUrl in enumerate(art, 1):
if not PAsearchSites.posterAlreadyExists(posterUrl, metadata):
Expand All @@ -117,10 +145,27 @@ def update(metadata, lang, siteNum, movieGenres, movieActors, art):
if height > width:
# Item is a poster
metadata.posters[posterUrl] = Proxy.Media(image.content, sort_order=idx)
posterExists = True
if width > height:
# Item is an art item
images.append((image, posterUrl))
metadata.art[posterUrl] = Proxy.Media(image.content, sort_order=idx)
except:
pass
elif PAsearchSites.posterOnlyAlreadyExists(posterUrl, metadata):
posterExists = True

if not posterExists:
for idx, (image, posterUrl) in enumerate(images, 1):
try:
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:
# Item is a poster
metadata.posters[posterUrl] = Proxy.Media(image.content, sort_order=idx)
except:
pass

return metadata
Loading

0 comments on commit 1bbb4aa

Please sign in to comment.