class YChartsDataImplementation(object): def __init__(self): self.client = YChartsClient() def authenticate(self, username, password): self.client.authenticate(username, password) def get_metric(self, ticker, metric, time_length, start_date, end_date): start_date = _convert_date(start_date) end_date = _convert_date(end_date) raw_data = self.client.get_security_metric( ticker, metric, time_length=time_length, start_date=start_date, end_date=end_date ) return convert_to_pandas(raw_data, metric) def get_prices(self, ticker, time_length, start_date, end_date): start_date = _convert_date(start_date) end_date = _convert_date(end_date) raw_data = self.client.get_security_prices( ticker, time_length=time_length, start_date=start_date, end_date=end_date ) return convert_to_pandas(raw_data, "price")
def main(symbol_file, parameter_file, output_dir): param_fp = open(parameter_file, 'r') param_list = [] count = {} for parameter in param_fp: param_list.append(parameter.strip()) count[parameter.strip()] = 0 client = YChartsClient() error_count = {} with open(symbol_file, 'r') as sym_fp: for symbol in list(csv.reader(sym_fp)): row_info = {} symbol = symbol[0].strip() to_write = [] to_write.append(['symbol', 'timestamp']) non_params = [] print symbol for parameter in param_list: parameter = parameter.strip() to_write[0].append(parameter) try: row = client.get_security_metric(symbol, parameter, start_date="01/01/1900") except Exception, e: if parameter in error_count: error_count[parameter] += 1 else: error_count[parameter] = 1 non_params.append(parameter) continue for row_obj in row: if row_obj[0] not in row_info: row_info[row_obj[0]] = {} row_info[row_obj[0]][str(parameter)] = row_obj[1] if count[parameter] == 0: count[parameter] = 1 new_file = open(os.path.join(output_dir, str(symbol) + '.csv'), 'w+') for key in sorted(row_info): temp = [] temp.append(str(symbol)) temp.append(convert(key)) for parameter in param_list: parameter = str(parameter) if count[parameter] == 0: param_list.remove(parameter) to_write[0].remove(parameter) continue if parameter in row_info[key]: #print 'HERE', parameter, key temp.append(row_info[key][parameter]) #to_write[-1].append(row_info[key][str(parameter)]) else: #print 'NOT ', parameter, row_info[key] temp.append('NaN') to_write.append(temp) #print to_write[-1], len(to_write[-1]) #row_info[key].insert(0, convert(key)) #row_info[key].insert(0, str(symbol)) #to_write.append(row_info[key]) writer = csv.writer(new_file) writer.writerows(to_write) new_file.close()
def main(symbol_file, parameter_file, output_dir): ''' Params: ------------------------ parameter_file: This is the path to the file that contains the information that you want to fetch via the stock prediction api like ps_ratio, dividend_yield, etc. An example for this file is in the input directory of the project source directory. symbol_file: This is path to text file with the symbols that you want the output of seperated by newlines. output_dir: path to output directory. In this directory the files will be created and saved as symbol_1.csv, symbol_2.csv, etc. ''' param_fp = open(parameter_file, 'r') param_list = [] count = {} for parameter in param_fp: param_list.append(parameter.strip()) count[parameter.strip()] = 0 client = YChartsClient() error_count = {} with open(symbol_file, 'r') as sym_fp: for symbol in list(csv.reader(sym_fp)): row_info = {} symbol = symbol[0].strip() to_write = [] to_write.append(['symbol', 'timestamp']) non_params = [] print symbol for parameter in param_list: parameter = parameter.strip() to_write[0].append(parameter) try: row = client.get_security_metric(symbol, parameter, start_date="01/01/1900") except Exception, e: if parameter in error_count: error_count[parameter] += 1 else: error_count[parameter] = 1 non_params.append(parameter) continue for row_obj in row: if row_obj[0] not in row_info: row_info[row_obj[0]] = {} row_info[row_obj[0]][str(parameter)] = row_obj[1] if count[parameter] == 0: count[parameter] = 1 new_file = open(os.path.join(output_dir, str(symbol) + '.csv'), 'w+') for key in sorted(row_info): temp = [] temp.append(str(symbol)) temp.append(convert(key)) for parameter in param_list: parameter = str(parameter) if count[parameter] == 0: param_list.remove(parameter) to_write[0].remove(parameter) continue if parameter in row_info[key]: #print 'HERE', parameter, key temp.append(row_info[key][parameter]) #to_write[-1].append(row_info[key][str(parameter)]) else: #print 'NOT ', parameter, row_info[key] temp.append('NaN') to_write.append(temp) #print to_write[-1], len(to_write[-1]) #row_info[key].insert(0, convert(key)) #row_info[key].insert(0, str(symbol)) #to_write.append(row_info[key]) writer = csv.writer(new_file) writer.writerows(to_write) new_file.close()
def setup(self, patched_requests): self.client = YChartsClient() patched_requests.session.assert_called_once_with() patched_requests.session().get.assert_called_once_with("http://ycharts.com/login")
class TestYChartsClient(object): @patch("ychartspy.client.requests") def setup(self, patched_requests): self.client = YChartsClient() patched_requests.session.assert_called_once_with() patched_requests.session().get.assert_called_once_with("http://ycharts.com/login") def test_make_request_with_security(self): self.client.session.get.return_value = MockResponse() self.client._make_request("SPY", "price", "1", None, None, "security") eq_(self.client.session.get.call_count, 2) self.client.session.get.assert_called_with( YCHARTS_DATA_URL, params=_make_security_params("SPY", "price") ) def test_make_request_with_indicator(self): self.client.session.get.return_value = MockResponse() self.client._make_request("USRSG", "price", "1", None, None, "indicator") eq_(self.client.session.get.call_count, 2) self.client.session.get.assert_called_with(YCHARTS_DATA_URL, params=[ ("securities", "type:indicator,id:I:USRSG,include:true"), ("calcs", "id:price,include:true"), ("zoom", "1") ]) def test_get_security_metric(self): self.client.session.get.return_value = MockResponse() response = self.client.get_security_metric("AAPL", "pe_ratio", "1") eq_(self.client.session.get.call_count, 2) self.client.session.get.assert_called_with( YCHARTS_DATA_URL, params=_make_security_params("AAPL", "pe_ratio") ) eq_(response, RAW_DATA) @raises(Exception) def test_get_security_metric_raises_exception(self): self.client.session.get.return_value = MockResponse() self.client.get_security_metric("AAPL", "foo", "1") @raises(Exception) def test_get_security_metric_raises_exception_for_status(self): self.client.session.get.return_value = MockResponse(status_code=400) self.client.get_security_metric("AAPL", "pe_ratio", "1") def test_get_raw_data(self): data = self.client._get_raw_data(MockResponse()) eq_(data, RAW_DATA) def test_get_security_metric_with_start_date(self): self.client.session.get.return_value = MockResponse() response = self.client.get_security_metric("AAPL", "pe_ratio", start_date="01/01/2014") eq_(self.client.session.get.call_count, 2) self.client.session.get.assert_called_with( YCHARTS_DATA_URL, params=_make_security_params("AAPL", "pe_ratio", start_date="01/01/2014") ) eq_(response, RAW_DATA) def test_get_security_metric_with_end_date(self): self.client.session.get.return_value = MockResponse() response = self.client.get_security_metric("aapl", "pe_ratio", end_date="01/01/2014") eq_(self.client.session.get.call_count, 2) self.client.session.get.assert_called_with( YCHARTS_DATA_URL, params=_make_security_params("aapl", "pe_ratio", end_date="01/01/2014") ) eq_(response, RAW_DATA) def test_get_security_metric_with_start_and_end_date(self): self.client.session.get.return_value = MockResponse() response = self.client.get_security_metric( "aapl", "pe_ratio", end_date="01/01/2014", start_date="01/01/2013" ) eq_(self.client.session.get.call_count, 2) self.client.session.get.assert_called_with( YCHARTS_DATA_URL, params=_make_security_params( "aapl", "pe_ratio", end_date="01/01/2014", start_date="01/01/2013" ) ) eq_(response, RAW_DATA) @raises(Exception) def test_get_security_metric_raises_exception_for_invalid_start_date(self): self.client.session.get.return_value = MockResponse() self.client.get_security_metric( "aapl", "pe_ratio", end_date="01/01/2014", start_date="01-01-2013" ) @raises(Exception) def test_get_security_metric_raises_exception_for_invalid_end_date(self): self.client.session.get.return_value = MockResponse() self.client.get_security_metric( "aapl", "pe_ratio", end_date="2014/01/01", start_date="01/01/2013" )
def __init__(self): self.client = YChartsClient()