def fetch_keyratios(self, ticker, datacode): """Get Morningstar key ratio data and return desired element to user""" #Check for sane user input for datacode. if datacode < 1 or datacode > 946: return 'Invalid Datacode' #Check whether flags indicate that we already have the data we need. if self.keyratio_flag[0] == '1' or self.keyratio_flag[1] != ticker: #Query NASDAQ for exchange and check for errors. exchange = smf.find_exchange(self, ticker) if exchange not in ['XNYS', 'XASE', 'XNAS']: return exchange #Query Morningstar for key ratios and check for errors. url_ending = '®ion=usa&culture=en-US&cur=USD&order=desc' self.keyratio_reader = query_morningstar(self, exchange, ticker, url_ending) if self.keyratio_flag[0] == '1': return self.keyratio_reader #Set flags and read data into memory upon successful query. else: self.keyratio_flag[0] = '0' self.keyratio_flag[1] = ticker self.keyratio_data = [row for row in self.keyratio_reader] #Append day for ISO standard dates. for idx in range (2, 12): self.keyratio_data[0][idx] += '-01' #Check for existing datacode -> value map, if none exists then create it. if not hasattr(self, 'key_datacode_map'): self.key_datacode_map = keyratio_datacode_map() #Lookup and return value from map. row, col = self.key_datacode_map[datacode] element = self.keyratio_data[row][col] #Strip , from str so we can convert to float return element.replace(',','')
def advfn_exchange(self, ticker): """Determine exchange ticker is traded on so we can query advfn""" exchange = smf.find_exchange(self, ticker) if exchange == 'XNAS': return 'NASDAQ' elif exchange == 'XNYS': return 'NYSE' elif exchange == 'XASE': return 'AMEX' return exchange
def fetch_financials(self, fin_type, ticker, datacode): """Get Morningstar financial data and return desired element to user""" if datacode < 1 or datacode > 162: return 'Invalid Datacode' #Check whether flags indicate that we already have the data we need. flags = self.financial_flag if fin_type == 'qtr': flags = self.qfinancial_flag if flags[0] == '1' or flags[1] != ticker: #Query NASDAQ for exchange and check for errors. exchange = smf.find_exchange(self, ticker) if exchange not in ['XNYS', 'XASE', 'XNAS']: return exchange #Query Morningstar for financials and check for errors. if fin_type == 'qtr': url_ending = ( '®ion=usa&culture=en-US&cur=USD&reportType=is' '&period=3&dataType=A&order=desc&columnYear=5&rounding=3' '&view=raw&r=113199&denominatorView=raw&number=3') else: url_ending = ( '®ion=usa&culture=en-US&cur=USD&reportType=is' '&period=12&dataType=A&order=desc&columnYear=5&rounding=3' '&view=raw&r=113199&denominatorView=raw&number=3') financial_reader = query_morningstar(self, exchange, ticker, url_ending) if flags[0] == '1': return financial_reader #Set flags and read data into memory upon successful query. else: flags[0] = '0' flags[1] = ticker financial_data_setup(self, financial_reader) #Check for existing datacode -> value map, if none exists then create it. if not hasattr(self, 'fin_datacode_map'): self.fin_datacode_map = financial_datacode_map() #Lookup and return value from map. row, col = self.fin_datacode_map[datacode] element = self.financial_data[row][col] #Strip , from str so we can convert to float return element.replace(',', '')
def fetch_financials(self, fin_type, ticker, datacode): """Get Morningstar financial data and return desired element to user""" if datacode < 1 or datacode > 162: return 'Invalid Datacode' #Check whether flags indicate that we already have the data we need. flags = self.financial_flag if fin_type == 'qtr': flags = self.qfinancial_flag if flags[0] == '1' or flags[1] != ticker: #Query NASDAQ for exchange and check for errors. exchange = smf.find_exchange(self,ticker) if exchange not in ['XNYS', 'XASE', 'XNAS']: return exchange #Query Morningstar for financials and check for errors. if fin_type == 'qtr': url_ending = ('®ion=usa&culture=en-US&cur=USD&reportType=is' '&period=3&dataType=A&order=desc&columnYear=5&rounding=3' '&view=raw&r=113199&denominatorView=raw&number=3') else: url_ending = ('®ion=usa&culture=en-US&cur=USD&reportType=is' '&period=12&dataType=A&order=desc&columnYear=5&rounding=3' '&view=raw&r=113199&denominatorView=raw&number=3') financial_reader = query_morningstar(self, exchange, ticker, url_ending) if flags[0] == '1': return financial_reader #Set flags and read data into memory upon successful query. else: flags[0] = '0' flags[1] = ticker financial_data_setup(self, financial_reader) #Check for existing datacode -> value map, if none exists then create it. if not hasattr(self, 'fin_datacode_map'): self.fin_datacode_map = financial_datacode_map() #Lookup and return value from map. row, col = self.fin_datacode_map[datacode] element = self.financial_data[row][col] #Strip , from str so we can convert to float return element.replace(',','')