def _get_token(self): capsule_container = BSoupHandler.find_tag(soup=self.target_soup, tag_name='img') capsule_url = BSoupHandler.get_value_by_key(soup=capsule_container, key_name='src') token = DataParser.get_bundle_img_token(capsule_url) return token
def _get_metadata(self): """ <a class="search_result_row ds_collapse_flag" data-ds-appid="582010" data-ds-crtrids="[33273264,34827959]" data-ds-itemkey="App_582010" data-ds-tagids="[1685,3859,19,1695,122,1697,21]" > condition: data-ds-appid="215770,215772" appid = target_id.split(',') def _is_digit(): for appid in appid_list(): if not appid.isdigit(): return False return True if len(appid)>1 and cls._is_digit(appid): return data-ds-packageid data-ds-packageid="16492" data-ds-itemkey="Sub_16492" data-ds-packageid """ app_id = BSoupHandler.get_value_by_key(soup=self.target_soup, key_name=STEAM.LABEL.APP_ID) bundle_id = BSoupHandler.get_value_by_key( soup=self.target_soup, key_name=STEAM.LABEL.BUNDLE_ID) package_id = BSoupHandler.get_value_by_key( soup=self.target_soup, key_name=STEAM.LABEL.PACKAGE_ID) if package_id: return {'target_id': package_id, 'is_bundle': True, 'token': None} if bundle_id: token = self._get_token() return {'target_id': bundle_id, 'is_bundle': True, 'token': token} if app_id: return {'target_id': app_id, 'is_bundle': False, 'token': None} return {'target_id': None, 'is_bundle': False, 'token': None}
def _get_platforms(self): """ <div class="col search_name ellipsis"> <span class="title"> THE GAME TITLE </span> <p> <span class="platform_img win"> <span class="platform_img mac"> <span class="platform_img linux"> </span> </p> </div> """ search_name_col = BSoupHandler.find_tag_by_key_value( soup=self.target_soup, tag='div', key='class', value=STEAM.LABEL.CONTAINER_OF_PLATFORM) if not search_name_col: return None span_list = BSoupHandler.find_all_tag(soup=search_name_col, tag_name='span') if not span_list: return None platform_span_list = span_list[1:] platform_info = list() for platform_span in platform_span_list: platform = BSoupHandler.get_value_by_key(soup=platform_span, key_name='class') if platform: if len(platform) == 1: platform_info.append(platform) else: platform_info.append(platform[1]) return platform_info
def _get_reviews(self): """ <div class="col search_reviewscore responsive_secondrow"> <span class= "search_review_summary positive" data-tooltip-html= "Mostly Positive<br>77% of the 638,504 user reviews for games in this bundle are positive."> </span> </div> """ reviews = dict() search_reviewscore_col = BSoupHandler.find_tag_by_key_value( soup=self.target_soup, tag='div', key='class', value=STEAM.LABEL.CONTAINER_OF_REVIEW) if not search_reviewscore_col: return reviews summary_container = BSoupHandler.find_tag(soup=search_reviewscore_col, tag_name='span') if not summary_container: return reviews review_string = BSoupHandler.get_value_by_key( soup=summary_container, key_name=STEAM.LABEL.RESULTS_OF_REVIEW) review_info = DataParser.get_users_review(input_string=review_string) rate = review_info.get('rate_of_positive') rate_of_positive = self._convert_decimal(rate) if rate else None amount = review_info.get('amount_of_reviews') amount_of_reviews = self._convert_integer(amount) if amount else None reviews.update({ 'rate_of_positive': rate_of_positive, 'amount_of_reviews': amount_of_reviews }) return reviews