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
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
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
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
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
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
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)