def perform(self): #第一次请求取得cookie url = self.prepare_url self.curl.setopt(pycurl.URL, url) self.curl.perform() self.call_back() args = { 'size': '1', 'category': 'SH', 'orderby': 'symbol', 'order': 'desc', } request_attrs = XueqiuStock.attr_list() for attr in request_attrs: args[attr] = 'ALL' #先请求二次取得总数 url = self.base_url + '/screen.json?%s' % (urllib.urlencode(args)) self.curl.setopt(pycurl.URL, url) self.curl.setopt(pycurl.WRITEFUNCTION, self.buf_1.write) #设置回调 self.curl.perform() response = self.buf_1.getvalue() self.all_result = json.loads(response) args['size'] = self.all_result['count'] self.call_back() #再请求第三次取得所有数据 url = self.base_url + '/screen.json?%s' % (urllib.urlencode(args)) self.curl.setopt(pycurl.URL, url) self.curl.setopt(pycurl.WRITEFUNCTION, self.buf_2.write) #设置回调 self.curl.perform() response = self.buf_2.getvalue() self.all_result = json.loads(response) self.call_back()
def perform(self): #第一次请求取得cookie url = self.prepare_url self.curl.setopt(pycurl.URL, url) self.curl.perform() self.call_back() args = { 'size':'1', 'category':'SH', 'orderby':'symbol', 'order':'desc', } request_attrs = XueqiuStock.attr_list() for attr in request_attrs: args[attr] = 'ALL' #先请求二次取得总数 url = self.base_url+'/screen.json?%s'%(urllib.urlencode(args)) self.curl.setopt(pycurl.URL, url) self.curl.setopt(pycurl.WRITEFUNCTION, self.buf_1.write)#设置回调 self.curl.perform() response = self.buf_1.getvalue() self.all_result = json.loads(response) args['size'] = self.all_result['count'] self.call_back() #再请求第三次取得所有数据 url = self.base_url+'/screen.json?%s'%(urllib.urlencode(args)) self.curl.setopt(pycurl.URL, url) self.curl.setopt(pycurl.WRITEFUNCTION, self.buf_2.write)#设置回调 self.curl.perform() response = self.buf_2.getvalue() self.all_result = json.loads(response) self.call_back()
def test_XueqiuDao_Filter(self): dao = XueqiuDao('../db.sqlite3', 'xueqiu') cond = [('mc', 0, 10000)] ret = dao.filter(cond) self.assertGreater(len(ret), 1) stock = XueqiuStock(*ret[0]) self.assertGreater(stock.mc, 0) self.assertGreater(10000, stock.mc)
def test_XueqiuDao_Filter_Multi(self): dao = XueqiuDao('../db.sqlite3', 'xueqiu') cond = [('mc', -7000, 7000), ('fmc', -10000, 10000)] ret = dao.filter(cond) self.assertGreater(len(ret), 1) for item in ret: stock = XueqiuStock(*item) self.assertGreater(stock['mc'], -7000) self.assertGreater(7000, stock['mc']) self.assertGreater(stock['fmc'], -10000) self.assertGreater(10000, stock['fmc'])
def test_XueqiuStock(self): test_data = { 'ticker':'23333', 'title':'ABCD', 'change':0.123, 'price':1.234, 'pe':2.345, 'peg':3.456, 'pbv':4.567, 'capital':5.678, } st = XueqiuStock(**test_data) for key in test_data: self.assertEqual(test_data[key],st[key]) self.assertEqual('double',st.get_type_by_key(key)) ret = XueqiuStock.attr_list() self.assertEqual([ "pct1m", "pelyr", "chgpct", "tr1m", "tr20", "pb" , "chgpct1m", "pct20", "tr", "pct", "current", "pettm", "chgpct20", "tr5", "fmc", "chgpct5", "tr10", "evps", "volavg30", "volume", "pct10", "dy", "mc", "amount", "pct5", "chgpct10"], ret)
def test_XueqiuStock(self): test_data = { 'ticker': '23333', 'title': 'ABCD', 'change': 0.123, 'price': 1.234, 'pe': 2.345, 'peg': 3.456, 'pbv': 4.567, 'capital': 5.678, } st = XueqiuStock(**test_data) for key in test_data: self.assertEqual(test_data[key], st[key]) self.assertEqual('double', st.get_type_by_key(key)) ret = XueqiuStock.attr_list() self.assertEqual([ "pct1m", "pelyr", "chgpct", "tr1m", "tr20", "pb", "chgpct1m", "pct20", "tr", "pct", "current", "pettm", "chgpct20", "tr5", "fmc", "chgpct5", "tr10", "evps", "volavg30", "volume", "pct10", "dy", "mc", "amount", "pct5", "chgpct10" ], ret)
def results(self): data = self.all_result['list'] #雪球的是list for item in data: stock = XueqiuStock(**item) self.save.append(stock) return self.save