Example #1
0
def get_standalone_info(game, name, document):
    # middle left column
    game_left_column = domparser.get_element(
        document, 'div', class_='leftcol game_description_column')

    purchase_block = domparser.get_element(game_left_column,
                                           'div',
                                           id='game_area_purchase')
    game.store.category = get_game_category(purchase_block, document)
    game.store.price = get_game_price(purchase_block, name)
    game.store.os = get_game_os(game_left_column)

    # top right header
    glance_ctn_block = domparser.get_element(document,
                                             'div',
                                             class_='glance_ctn')
    game.store.image = get_game_image(glance_ctn_block)
    game.store.avg_review,\
    game.store.cnt_review   = get_game_review(glance_ctn_block, name)
    game.store.release_date = get_game_release_date(glance_ctn_block, name)
    game.store.tags = get_game_tags(glance_ctn_block)

    if (game.store.category in [Category.Game, Category.Video]):
        game.store.description = get_game_description(glance_ctn_block)
    elif (game.store.category is Category.DLC):
        game.store.description = get_dlc_description(document)
    else:
        game.store.description = ''
        styledprint.print_info(
            'The category {0} is not implemented yet!'.format(
                game.store.category.name))

    game.store.interface,\
    game.store.audio,\
    game.store.subtitles    = get_game_languages(document)
Example #2
0
def get_game_languages(document):
    interface = list()
    audio = list()
    subtitles = list()

    try:

        language_block = domparser.get_element(document,
                                               'table',
                                               class_='game_language_options')
        if (language_block is not None):
            rows = domparser.get_elements(language_block, 'tr')
            if (rows):
                for row in rows[1:]:
                    language = domparser.get_text(row, 'td',
                                                  class_='ellipsis').strip()
                    availabilities = domparser.get_elements(row,
                                                            'td',
                                                            class_='checkcol')
                    if (availabilities):
                        if (domparser.get_element(availabilities[0], 'span')
                                is not None):
                            interface.append(language)
                        if (domparser.get_element(availabilities[1], 'span')
                                is not None):
                            audio.append(language)
                        if (domparser.get_element(availabilities[2], 'span')
                                is not None):
                            subtitles.append(language)
    except Exception as e:
        titles = get_titles(document, 'N/A')
        print(titles)
        raise e

    return interface, audio, subtitles
Example #3
0
def get_game_category(purchase_block, document):
    dlc_block = domparser.get_element(
        purchase_block, 'div', class_='game_area_dlc_bubble game_area_bubble')
    if (dlc_block is not None):
        return Category.DLC

    videos_href = domparser.get_element(document,
                                        'a',
                                        text='All Streaming Videos')
    if (videos_href is not None):
        return Category.Video

    return Category.Game
Example #4
0
def get_game_review(glance_ctn_block, name):
    overall_block = domparser.get_element(glance_ctn_block,
                                          'div',
                                          class_='subtitle column all',
                                          string='All Reviews:')

    if (overall_block == None):
        styledprint.print_info(
            'Cannot find the review block for game: {0}'.format(name))
        return '', '0'

    user_reviews_block = domparser.get_parent(overall_block)

    reviewCount = domparser.get_value(user_reviews_block,
                                      'content',
                                      'meta',
                                      itemprop='reviewCount')

    ratingValue = domparser.get_value(user_reviews_block,
                                      'content',
                                      'meta',
                                      itemprop='ratingValue')

    if (reviewCount):
        return int(ratingValue), int(reviewCount)
    return None, None
Example #5
0
async def get_forOneRating(url, rating, webSession):
    fullURL = url + rating
    apps = []

    _, _, page = await webSession.cached_get_web_page(fullURL)
    if ((page is None)
            or ('<p class="text-center">No matches found</p>' in page)):
        return apps

    document = domparser.load_html(page)

    pageElem = domparser.get_element(document, 'div', class_='text-center')
    numOfPages = domparser.get_next_siblings_text(pageElem, 'b')[1]

    tasks = []
    for p in range(2, int(numOfPages) + 1):
        nextURL = '{0}&iPage={1}'.format(fullURL, p)
        tasks.append(webSession.cached_get_web_page(nextURL))

    #1st page
    apps.extend(get_apps_from_doc(document))
    #others
    for f in asyncio.as_completed(tasks):
        _, _, page = await f
        document = domparser.load_html(page)
        apps2 = get_apps_from_doc(document)
        if (apps2 is not None):
            apps.extend(apps2)

    print(len(apps), 'apps for rating', rating)
    return apps, rating
Example #6
0
def get_apps_from_doc(document):
    table = domparser.get_element(document,
                                  'table',
                                  class_="whq-table whq-table-full")
    if (table is None):
        return None

    return domparser.get_texts_and_values(table, 'a', 'href')[2:]
Example #7
0
def get_game_details(document):
    details_block = domparser.get_element(
        document,
        'div',
        class_='block responsive_apppage_details_left',
        id="category_block")
    if (details_block is not None):
        return domparser.get_texts(details_block, 'a')

    return list()
Example #8
0
def get_game_tags(glance_ctn_block):
    tags_block = domparser.get_element(glance_ctn_block,
                                       'div',
                                       class_='glance_tags popular_tags')
    if (tags_block is not None):
        # tags are by default in the format:
        # \r\n\t\t\t\t\t\t\t\t\t\t\t\tTAG\t\t\t\t\t\t\t\t\t\t\t\t
        return sorted(
            list(map(lambda s: s.strip(), domparser.get_texts(tags_block,
                                                              'a'))))
    return list()
Example #9
0
def get_dlc_description(document):
    widget_create_block = domparser.get_element(document,
                                                'div',
                                                id='widget_create')

    if (widget_create_block is not None):
        description = domparser.get_value(widget_create_block, 'placeholder',
                                          'textarea')
        if (description is not None):
            return description.replace('"', '').strip()

    return None
Example #10
0
def get_game_genres(document):
    genre_title = domparser.get_element(document, 'b', string='Genre:')
    if (genre_title is not None):
        return domparser.get_next_siblings_text(genre_title, 'a')
    return list()
Example #11
0
def get_game_price(purchase_block, name):
    wrappers = domparser.get_elements(purchase_block,
                                      'div',
                                      class_='game_area_purchase_game_wrapper')

    if (wrappers is not None):
        names = list()
        prices = list()
        for wrapper in wrappers:
            names.append(domparser.get_text(wrapper, 'h1')[4:].lower())
            price = domparser.get_text(wrapper,
                                       'div',
                                       class_='game_purchase_price price')
            if (not price):
                price = domparser.get_text(wrapper,
                                           'div',
                                           class_='discount_final_price')
            prices.append(price)

        sortedprices = list()
        if (len(names)):
            matches = namematching.get_matches(name.lower(), names, len(names))
            for match in matches:
                index = names.index(match)
                sortedprices.append(prices[index])
        if (not len(sortedprices)):
            sortedprices = prices
    else:
        sortedprices = domparser.get_texts(purchase_block,
                                           'div',
                                           class_='game_purchase_price price')
        if (not sortedprices):
            sortedprices = domparser.get_texts(purchase_block,
                                               'div',
                                               class_='discount_final_price')

    for price in sortedprices:
        if (price):
            # we got the wrong div
            if ('demo' in price.lower()):
                continue

            price = price.replace('$', '').replace('€', '').strip()
            if (price.replace('.', '', 1).isdigit()):
                return float(price)
            elif (('free' in price.lower()) or ('play' in price.lower())):
                return 0
            else:
                styledprint.print_info('Unexpected price: {0} for {1}'.format(
                    price, name))
                return -1

    play_game_span = domparser.get_element(purchase_block,
                                           'span',
                                           string='Play Game')
    if (play_game_span is not None):
        return 0

    download_span = domparser.get_element(purchase_block,
                                          'span',
                                          string='Download')
    if (download_span is not None):
        return 0

    styledprint.print_info('No price found for {0}'.format(name))
    return -1
Example #12
0
async def get_collection_info(game, name, document, webSession):
    game.store.category = Category.Collection

    descriptions = list()
    OS = list()
    release_dates = list()
    avg_reviews = 0
    cnt_reviews = 0
    tags = list()
    interface = list()
    audio = list()
    subtitles = list()

    game_left_column = domparser.get_element(
        document, 'div', class_='leftcol game_description_column')
    items = domparser.get_elements(game_left_column, 'div', class_='tab_item ')
    if (len(items) == 0):
        items = domparser.get_elements(game_left_column,
                                       'div',
                                       class_='tab_item')

    for item in items:
        itemlink = domparser.get_value(item,
                                       'href',
                                       'a',
                                       class_='tab_item_overlay')
        itemname = domparser.get_text(item, 'div', class_='tab_item_name')
        descriptions.append('- {0}'.format(itemname))

        itemgame = Game()
        itemgame.store.link = itemlink
        await get_store_info(itemgame, itemname, webSession)
        for o in itemgame.store.os:
            if (o not in OS):
                OS.append(o)
        if (itemgame.store.release_date):
            release_dates.append(itemgame.store.release_date)
        # to average the reviews
        if (itemgame.store.cnt_review):
            avg_reviews += itemgame.store.cnt_review * itemgame.store.avg_review
            cnt_reviews += itemgame.store.cnt_review
        for tag in itemgame.store.tags:
            if (tag not in tags):
                tags.append(tag)
        for language in itemgame.store.interface:
            if (language not in interface):
                interface.append(language)
        for language in itemgame.store.audio:
            if (language not in audio):
                audio.append(language)
        for language in itemgame.store.subtitles:
            if (language not in subtitles):
                subtitles.append(language)

    game.store.image = get_collection_image(game_left_column)
    game.store.description = 'Items included in this package:{0}{1}'.format(
        os.linesep, os.linesep.join(descriptions))
    game.store.os = sorted(OS)
    if (len(release_dates)):
        game.store.release_date = sorted(release_dates)[-1]
    if (cnt_reviews):
        game.store.avg_review = int(avg_reviews / cnt_reviews)
        game.store.cnt_review = int(cnt_reviews / len(items))
    game.store.tags = sorted(tags)
    game.store.interface = sorted(interface)
    game.store.audio = sorted(audio)
    game.store.subtitles = sorted(subtitles)

    purchase_block = domparser.get_element(game_left_column,
                                           'div',
                                           id='game_area_purchase')
    game.store.price = get_game_price(purchase_block, name)
Example #13
0
def get_post(url, postid):
    status, html = web.get_utf8_web_page(url)
    document = domparser.load_html(html)
    post = domparser.get_element(document, 'div', id=postid)

    return str(post)