Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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