def search(self, results, media, lang): if Prefs['strip_enable']: title = media.name.split(Prefs['strip_symbol'], 1)[0] else: title = media.name title = getSearchTitle(title) Log('***MEDIA TITLE [from media.name]*** %s' % title) searchSettings = PAsearchSites.getSearchSettings(title) Log(searchSettings) filepath = None filename = None if media.filename: filepath = urllib.unquote(media.filename) filename = str(os.path.splitext(os.path.basename(filepath))[0]) if searchSettings['siteNum'] is None and filepath: directory = str(os.path.split(os.path.dirname(filepath))[1]) newTitle = getSearchTitle(directory) Log('***MEDIA TITLE [from directory]*** %s' % newTitle) searchSettings = PAsearchSites.getSearchSettings(newTitle) if searchSettings['siteNum'] is not None and searchSettings[ 'searchTitle'].lower() == PAsearchSites.getSearchSiteName( searchSettings['siteNum']).lower(): newTitle = '%s %s' % (newTitle, title) Log('***MEDIA TITLE [from directory + media.name]*** %s' % newTitle) searchSettings = PAsearchSites.getSearchSettings(newTitle) siteNum = searchSettings['siteNum'] if siteNum is not None: search = PAsearchData.SearchData(media, searchSettings['searchTitle'], searchSettings['searchDate'], filepath, filename) provider = PAsiteList.getProviderFromSiteNum(siteNum) if provider is not None: providerName = getattr(provider, '__name__') Log('Provider: %s' % providerName) provider.search(results, lang, siteNum, search) if Prefs['metadataapi_enable']: if providerName != 'networkMetadataAPI' and ( not results or 100 != max([result.score for result in results])): siteNum = PAsearchSites.getSiteNumByFilter( 'MetadataAPI') if siteNum is not None: provider = PAsiteList.getProviderFromSiteNum( siteNum) if provider is not None: providerName = getattr(provider, '__name__') Log('Provider: %s' % providerName) try: provider.search(results, lang, siteNum, search) except Exception as e: Log(e) results.Sort('score', descending=True)
def update(metadata, siteID, movieGenres, movieActors): Log('******UPDATE CALLED*******') metadata_id = str(metadata.id).split('|') url = PAutils.Decode(metadata_id[0]) sceneDate = metadata_id[2] poster = metadata_id[3] if len(metadata_id) > 3 else None detailsPageElements = HTML.ElementFromURL(url) # Studio metadata.studio = 'Full P**n Network' # Title metadata.title = detailsPageElements.xpath( '//h4')[0].text_content().strip() # Summary metadata.summary = detailsPageElements.xpath( '//p[@class="hide-for-small-only"]')[0].text_content().strip() # Release Date if sceneDate: date_object = parse(sceneDate) metadata.originally_available_at = date_object metadata.year = metadata.originally_available_at.year # Tagline and Collection(s) metadata.collections.clear() for seriesName in [ metadata.studio, PAsearchSites.getSearchSiteName(siteID) ]: metadata.collections.add(seriesName) # Genres movieGenres.clearGenres() genres = detailsPageElements.xpath( '//div[@class="small-12"]//a[contains(@href, "/category/")]/text()') for genreLink in genres: genreName = genreLink.strip() movieGenres.addGenre(genreName) # Actors movieActors.clearActors() actors = detailsPageElements.xpath( '//div[@class="small-12"]//a[contains(@href, "/model/")]/@href') for actorLink in actors: actorPage = HTML.ElementFromURL( PAsearchSites.getSearchBaseURL(siteID) + actorLink) actorName = actorPage.xpath('//h1')[0].text_content().strip() actorPhotoURL = actorPage.xpath('//img[@alt="%s"]/@src' % actorName)[0] movieActors.addActor(actorName, actorPhotoURL) # Posters art = [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: img_file = urllib.urlopen(posterUrl) im = StringIO(img_file.read()) 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(HTTP.Request( posterUrl, headers={ 'Referer': 'http://www.google.com' }).content, sort_order=idx) if width > 100: # Item is an art item metadata.art[posterUrl] = Proxy.Media(HTTP.Request( posterUrl, headers={ 'Referer': 'http://www.google.com' }).content, sort_order=idx) except: pass return metadata
def update(metadata, siteID, movieGenres, movieActors): Log('******UPDATE CALLED*******') metadata_id = str(metadata.id).split('|') sceneId = metadata_id[0] token = getToken(PAsearchSites.getSearchBaseURL(siteID)) detailsPageElements = getDatafromAPI( PAsearchSites.getSearchBaseURL(siteID), sceneId, token) # Studio producerLink = detailsPageElements['producer'] metadata.studio = '%s %s' % (producerLink['name'], producerLink['last_name']) # Title metadata.title = detailsPageElements['title'] # Summary metadata.summary = detailsPageElements['synopsis_clean'] # Tagline and Collection(s) metadata.collections.clear() tagline = PAsearchSites.getSearchSiteName(siteID).strip() metadata.tagline = tagline metadata.collections.add(tagline) # Genres movieGenres.clearGenres() for genreLink in detailsPageElements['tags']: genreName = genreLink['title'] movieGenres.addGenre(genreName) # Release Date date_object = parse(detailsPageElements['release_date']) metadata.originally_available_at = date_object metadata.year = metadata.originally_available_at.year # Actors movieActors.clearActors() for actorLink in detailsPageElements['performers']: actorName = '%s %s' % (actorLink['name'], actorLink['last_name']) actorPhotoURL = actorLink['poster_image'].split('?', 1)[0] movieActors.addActor(actorName, actorPhotoURL) # Director director = metadata.directors.new() directorLink = detailsPageElements['director'] director.name = '%s %s' % (directorLink['name'], directorLink['last_name']) # Poster art = [detailsPageElements['poster_picture'].split('?', 1)[0]] for photoLink in detailsPageElements['album']: img = photoLink['path'].split('?', 1)[0] art.append(img) 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: img_file = urllib.urlopen(posterUrl) im = StringIO(img_file.read()) 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(HTTP.Request( posterUrl, headers={ 'Referer': 'http://www.google.com' }).content, sort_order=idx) if width > 100 and width > height and idx > 1: # Item is an art item metadata.art[posterUrl] = Proxy.Media(HTTP.Request( posterUrl, headers={ 'Referer': 'http://www.google.com' }).content, sort_order=idx) except: pass return metadata
def search(results, encodedTitle, title, searchTitle, siteNum, lang, searchDate): searchResultsURLs = [] googleResults = PAutils.getFromGoogleSearch(searchTitle, siteNum) for sceneURL in googleResults: if sceneURL not in searchResultsURLs: url = None if '/scene/' in sceneURL: url = sceneURL else: for item in ['/trailers/', '/updates/']: if item in sceneURL: url = sceneURL.replace(item, '/1/scene/').replace( '.html', '/') break if url and url not in searchResultsURLs: searchResultsURLs.append(url) for url in searchResultsURLs: detailsPageElements = HTML.ElementFromURL(url) curID = PAutils.Encode(url) titleNoFormatting = detailsPageElements.xpath( '//h4')[0].text_content().strip() releaseDate = parse(searchDate).strftime( '%Y-%m-%d') if searchDate else '' score = 100 - Util.LevenshteinDistance(searchTitle.lower(), titleNoFormatting.lower()) results.Append( MetadataSearchResult( id='%s|%d|%s' % (curID, siteNum, releaseDate), name='%s [FPN/%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), releaseDate), score=score, lang=lang)) searchResults = HTML.ElementFromURL( PAsearchSites.getSearchSearchURL(siteNum) + searchTitle.replace(' ', '_')) for searchResult in searchResults.xpath( '//div[contains(@class, "section-updates")]'): curID = PAutils.Encode(searchResult.xpath('.//a/@href')[0]) titleNoFormatting = searchResult.xpath( './/div[contains(@class, "scene-info")]//a')[0].text_content( ).strip() poster = searchResult.xpath('.//img/@src')[0] releaseDate = parse(searchDate).strftime( '%Y-%m-%d') if searchDate else '' score = 100 - Util.LevenshteinDistance(searchTitle.lower(), titleNoFormatting.lower()) results.Append( MetadataSearchResult( id='%s|%d|%s|%s' % (curID, siteNum, releaseDate, poster), name='%s [FPN/%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), releaseDate), score=score, lang=lang)) return results
def update(metadata, siteNum, movieGenres, movieActors): metadata_id = str(metadata.id).split('|') sceneURL = PAutils.Decode(metadata_id[0]) if not sceneURL.startswith('http'): sceneURL = PAsearchSites.getSearchBaseURL(siteNum) + sceneURL req = PAutils.HTTPRequest(sceneURL) detailsPageElements = HTML.ElementFromString(req.text) # Title metadata.title = detailsPageElements.xpath('//h1')[0].text_content().strip() # Summary metadata.summary = detailsPageElements.xpath('//div[@id="content-more-less"]/p')[0].text_content().strip() # Studio metadata.studio = 'CumLouder' # Tagline and Collection(s) metadata.collections.clear() tagline = PAsearchSites.getSearchSiteName(siteNum).strip() metadata.tagline = tagline metadata.collections.add(tagline) # Genres movieGenres.clearGenres() for genreLink in detailsPageElements.xpath('//ul[@class="tags"]/li/a'): genreName = genreLink.text_content().strip() movieGenres.addGenre(genreName) # Release Date - no actual date aviable, guessing (better than nothing) date = detailsPageElements.xpath('//div[@class="added"]')[0].text_content().strip() timeframe = date.split(' ')[2] timenumber = int(date.split(' ')[1]) today = datetime.now() if timeframe: if timeframe == 'minutes': date_object = today elif timeframe == 'hour' or timeframe == 'hours': date_object = today - relativedelta(hours=timenumber) elif timeframe == 'day' or timeframe == 'days': date_object = today - relativedelta(days=timenumber) elif timeframe == 'week' or timeframe == 'weeks': date_object = today - relativedelta(weeks=timenumber) elif timeframe == 'month' or timeframe == 'months': date_object = today - relativedelta(months=timenumber) elif timeframe == 'year' or timeframe == 'years': date_object = today - relativedelta(years=timenumber) metadata.originally_available_at = date_object metadata.year = metadata.originally_available_at.year # Actors movieActors.clearActors() actors = detailsPageElements.xpath('//a[@class="pornstar-link"]') if actors: if len(actors) == 3: movieGenres.addGenre('Threesome') if len(actors) == 4: movieGenres.addGenre('Foursome') if len(actors) > 4: movieGenres.addGenre('Orgy') for actorLink in actors: actorName = actorLink.text_content().strip() actorPhotoURL = '' movieActors.addActor(actorName, actorPhotoURL) # Posters art = [] xpaths = [ '//div[@class="box-video box-video-html5"]/video/@lazy' ] for xpath in xpaths: for img in detailsPageElements.xpath(xpath): art.append(img) 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, headers={'Referer': 'http://www.google.com'}) 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) if width > 100: # Item is an art item metadata.art[posterUrl] = Proxy.Media(image.content, sort_order=idx) except: pass return metadata
def update(metadata, siteNum, movieGenres, movieActors): metadata_id = str(metadata.id).split('|') sceneURL = PAutils.Decode(metadata_id[0]) if not sceneURL.startswith('http'): sceneURL = PAsearchSites.getSearchSearchURL(siteNum) + sceneURL req = PAutils.HTTPRequest(sceneURL, headers={'Cookie': 'cLegalAge=true'}) detailsPageElements = HTML.ElementFromString(req.text) # Title Title = detailsPageElements.xpath( '//span[@class="contentFilmName"]')[0].text_content().strip().title() metadata.title = Title.title() # Studio metadata.studio = PAsearchSites.getSearchSiteName(siteNum) # Tagline and Collection(s) metadata.collections.clear() tagline = PAsearchSites.getSearchSiteName(siteNum) metadata.tagline = tagline metadata.collections.add(tagline) # Release Date date = detailsPageElements.xpath('//span[@class="contentFileDate"]')[ 0].text_content().strip().split(' • ')[0] date_object = datetime.strptime(date, '%Y %B %d') metadata.originally_available_at = date_object metadata.year = metadata.originally_available_at.year # Summary # Basic Summary try: description = detailsPageElements.xpath( '//div[@class="contentPreviewDescription"]')[0].text_content() metadata.summary = description.strip() except: pass # Genres movieGenres.clearGenres() # Default Genres genres = ['BDSM', 'S&M'] for genreName in genres: movieGenres.addGenre(genreName) # Dynamic Genres for genreLink in detailsPageElements.xpath( '//div[@class="contentPreviewTags"]/a'): genreName = genreLink.text_content().strip() movieGenres.addGenre(genreName) # Actors movieActors.clearActors() siteActors = [ 'abby', 'briana', 'david', 'diamond', 'greta', 'hellia', 'hilda', 'holly', 'jade', 'jeby', 'jessica', 'keya', 'lilith', 'luna', 'marc', 'micha', 'misty', 'nastee', 'nazryana', 'pearl', 'qs', 'queensnake', 'rachel', 'ruby', 'sharon', 'suzy', 'tanita', 'tracy', 'zara' ] for actorLink in detailsPageElements.xpath( '//div[@class="contentPreviewTags"]/a'): if actorLink.text_content().strip().lower() in siteActors: actorName = actorLink.text_content().strip() actorPhotoURL = '' movieActors.addActor(actorName, actorPhotoURL) # Posters art = [] for poster in detailsPageElements.xpath( '//div[@class="contentBlock"]//img[contains(@src, "preview")]/@src' ): posterUrl = PAsearchSites.getSearchBaseURL(siteNum) + poster.split( '?')[0] art.append(posterUrl) 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: # Item is a poster metadata.posters[posterUrl] = Proxy.Media(image.content, sort_order=idx) if width > 100 and idx > 1: # Item is an art item metadata.art[posterUrl] = Proxy.Media(image.content, sort_order=idx) except: pass return metadata
def update(metadata, siteNum, movieGenres, movieActors): metadata_id = str(metadata.id).split('|') sceneURL = PAutils.Decode(metadata_id[0]) if not sceneURL.startswith('http'): sceneURL = PAsearchSites.getSearchBaseURL(siteNum) + sceneURL sceneDate = metadata_id[2] req = PAutils.HTTPRequest(sceneURL) detailsPageElements = HTML.ElementFromString(req.text) # Title metadata.title = detailsPageElements.xpath( '//div[@class="content-desc content-new-scene"]//h1')[0].text_content( ).replace('Video -', '').replace('Movie -', '').strip() # Studio metadata.studio = PAsearchSites.getSearchSiteName(siteNum) # Summary try: metadata.summary = detailsPageElements.xpath( '//div[@class="content-desc content-new-scene"]//p' )[0].text_content().strip() except: pass # Genres movieGenres.clearGenres() for genre in detailsPageElements.xpath( '//ul[contains(@class,"scene-tags")]/li'): genreName = genre.xpath('.//a')[0].text_content().lower() movieGenres.addGenre(genreName) # Release Date date = detailsPageElements.xpath('//meta[@itemprop="uploadDate"]')[0].get( 'content') if date: date_object = datetime.strptime(date, '%m/%d/%Y') metadata.originally_available_at = date_object metadata.year = metadata.originally_available_at.year elif sceneDate: date_object = parse(date) metadata.originally_available_at = date_object metadata.year = metadata.originally_available_at.year # Actors movieActors.clearActors() for actorPage in detailsPageElements.xpath( '//ul[@id="featured_pornstars"]//div[@class="model"]'): actorName = actorPage.xpath('.//h3')[0].text_content().strip() actorPhotoURL = actorPage.xpath('.//img/@src')[0] movieActors.addActor(actorName, actorPhotoURL) # Posters art = [ detailsPageElements.xpath( '//div[@id="trailer_player_finished"]//img/@src')[0] ] 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: # Item is a poster metadata.posters[posterUrl] = Proxy.Media(image.content, sort_order=idx) if width > 100: # Item is an art item metadata.art[posterUrl] = Proxy.Media(image.content, sort_order=idx) except: pass return metadata
def search(results, lang, siteNum, search): req = PAutils.HTTPRequest( PAsearchSites.getSearchSearchURL(siteNum) + search['encoded']) searchResults = HTML.ElementFromString(req.text) for searchResult in searchResults.xpath('//div[@class="scene"]'): url = searchResult.xpath('.//a[@data-track="TITLE_LINK"]/@href')[0] if '/scenes/' in url: curID = PAutils.Encode(url) titleNoFormatting = searchResult.xpath( './/a[@data-track="TITLE_LINK"]')[0].text_content() releaseDate = parse( searchResult.xpath('./span[@class="scene-date"]') [0].text_content().strip()).strftime('%Y-%m-%d') if search['date']: score = 100 - Util.LevenshteinDistance(search['date'], releaseDate) else: score = 100 - Util.LevenshteinDistance( search['title'].lower(), titleNoFormatting.lower()) results.Append( MetadataSearchResult( id='%s|%d|%s' % (curID, siteNum, releaseDate), name='%s [%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), releaseDate), score=score, lang=lang)) # search for exact scene name urlTitle = search['encoded'].replace('%20', '-') urls = [ PAsearchSites.getSearchBaseURL(siteNum) + '/scenes/video---' + urlTitle + '_vids.html', PAsearchSites.getSearchBaseURL(siteNum) + '/scenes/movie---' + urlTitle + '_vids.html' ] for url in urls: try: sceneReq = PAutils.HTTPRequest(url) scenePage = HTML.ElementFromString(sceneReq.text) curID = PAutils.Encode(url) titleNoFormatting = scenePage.xpath( '//div[@class="content-desc content-new-scene"]//h1' )[0].text_content().strip() releaseDate = parse( scenePage.xpath('//meta[@itemprop="uploadDate"]')[0].get( 'content')) score = 100 results.Append( MetadataSearchResult( id='%s|%d|%s' % (curID, siteNum, releaseDate), name='%s [%s] %s' % (titleNoFormatting, PAsearchSites.getSearchSiteName(siteNum), releaseDate), score=score, lang=lang)) except: pass return results