예제 #1
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
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
예제 #2
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
def get_game_description(glance_ctn_block):
    description = domparser.get_text(glance_ctn_block,
                                     'div',
                                     class_='game_description_snippet')

    if (description is not None):
        return description.replace('"', '').strip()

    return None
예제 #3
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
def get_document(page, name):
    document = domparser.load_html(page)

    if ('Oops, sorry!' in document):
        description = domparser.get_text(document, 'span', class_="error")
        logging.debug('The page for game {0} shows an error: {1}'.format(
            name, description))
        return None, description

    return document, None
예제 #4
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
def get_game_release_date(glance_ctn_block, name):
    date = domparser.get_text(glance_ctn_block, 'div', class_='date')
    if (date):
        try:
            return parser.parse(date.strip(), fuzzy_with_tokens=True)
        except:
            styledprint.print_info('date: {0} for game: {1} is no good'.format(
                date, name))
            pass

    return None
예제 #5
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
def get_titles(document, shortlink):
    titles = {}
    titles[shortlink] = [
        domparser.get_text(document, 'div', class_='apphub_AppName')
    ]

    wrappers = domparser.get_elements(
        document, 'div', class_=re.compile('game_area_purchase_game_wrapper'))

    if (wrappers is not None):
        for wrapper in wrappers:
            if (any(i in ['Bundle info', 'Package info']
                    for i in domparser.get_texts(wrapper, 'span'))):
                href = domparser.get_value(
                    wrapper,
                    'href',
                    'a',
                    class_=re.compile('btnv6_blue_blue_innerfade'))
                link = re.sub(r'.*steampowered.com/([^/]+/[^/]+)/.*',
                              r'\1',
                              href,
                              flags=re.IGNORECASE)
            else:
                link = shortlink
            title = domparser.get_text(wrapper, 'h1')[4:]
            if (title):
                if (title.lower().endswith('demo')):
                    continue
                #merge the regexp?
                title = re.sub(r'\s*Buy ?', r'', title)
                title = re.sub(r'(\n|\r|\t).*', r'', title)
                if (link not in titles):
                    titles[link] = []
                if (title not in titles[link]):
                    titles[link].append(title)
    return titles
예제 #6
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
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
예제 #7
0
파일: steam.py 프로젝트: John-Gee/HFRSteam
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)