def iter_accounts(self): for line in self.doc.xpath( '//script[@id="initial-state"]')[0].text.split('\n'): m = re.search('window.__INITIAL_STATE__ = (.*);', line) if m: data = json.loads(literal_eval(m.group(1))) break else: assert False, "data was not found" assert data[13] == 'core' assert len(data[14]) == 3 # search for products to get products list for index, el in enumerate(data[14][2]): if 'products' in el: accounts_data = data[14][2][index + 1] assert len(accounts_data) == 2 assert accounts_data[1][4] == 'productsList' accounts_data = accounts_data[1][5] token = [] for account_data in accounts_data: if isinstance(account_data, basestring): balances_token = account_data elif isinstance(account_data, list) and not account_data[4][2][0] == "Canceled": acc = Account() if len(account_data) > 15: token.append(account_data[-11]) acc._idforJSON = account_data[10][-1] else: acc._idforJSON = account_data[-5][-1] acc._idforJSON = re.sub('\s+', ' ', acc._idforJSON) acc.number = '-%s' % account_data[2][2] acc.label = '%s %s' % (account_data[6][4], account_data[10][-1]) acc._balances_token = acc.id = balances_token acc._token = token[-1] acc.type = Account.TYPE_CARD yield acc
def iter_accounts(self): for line in self.doc.xpath( '//script[@id="initial-state"]')[0].text.split('\n'): m = re.search('window.__INITIAL_STATE__ = (.*);', line) if m: data = list(flatten(json.loads(literal_eval(m.group(1))))) break else: assert False, "data was not found" assert data.count( 'display_account_number') == 1, 'there should be exactly one card' acc = Account() acc.id = 'XXX-%s' % data[1 + data.index('display_account_number')] acc.label = '%s %s' % (data[1 + data.index('description')], data[1 + data.index('embossed_name')]) acc._index = data[1 + data.index('sorted_index')] acc._token = data[1 + data.index('account_token')] yield acc