def convert(i, amount): n = i.get_account_id() n2 = i.getInputDevice().getClientID() stats = db.getData(n) try: amount = abs(int(amount)) except: pass if amount >= 10000: bs.screenMessage('You wanna be hella rich or whut?') return if amount <= stats['s']: stats['s'] -= amount stats['p'] += int(amount / 10) bs.screenMessage( u'{} Score Points have been converted to {} \ue01f'.format( amount, int(amount / 10))) bs.screenMessage(u'New Score: {} | New \ue01f: {}'.format( stats['s'], stats['p'])) db.saveData(n, stats) else: bs.screenMessage('Not Enough Score Points', clients=[n2], transient=True, color=(1, 0.5, 0.5))
def me(nick): if nick is None: return if isinstance(nick, bs.Player): n = nick.get_account_id() elif nick.startswith('pb'): n = nick else: return stats = db.getData(n) score = stats['s'] rank = db.getRank(n) points = stats['p'] message = bs.uni(stats['n']) message2 = u'\ue01f: ' + str(points) message3 = 'Total Score: ' + str(score) message4 = 'Rank: ' + str(rank) message5 = 'K: ' + str(stats['k']) message6 = 'D: ' + str(stats['d']) if n in joined: message7 = 'Time Spent: ' + str( datetime.timedelta(milliseconds=(bs.getRealTime() - joined[str(n)] + stats['tp']))).split('.', 2)[0] else: message7 = 'Time Spent: ' + \ str(datetime.timedelta(milliseconds=( stats['tp']))).split('.', 2)[0] bs.screenMessage(u' | '.join( [message, message2, message3, message4, message5, message6, message7])) clear(2500)
def get_NaverStock(self, code_stock): # 초기화 for row in code_stock: code = row[0] DB_Manager.db_control().delDBtable(dir_naver_ks, 'kospi_' + code) print('1. 테이블 삭제: ', code) # 최초 데이터 가져오기 for row in code_stock: df = pd.DataFrame() code = row[0] company = row[1] url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code) for page in range(1, 38): pg_url = '{url}&page={page}'.format(url=url, page=page) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) # self.code_df = self.code_df.rename(columns={'회사명': 'name', '종목코드': 'code'}) df = df.dropna() df.to_sql('kospi_' + code, con_naver_ks, chunksize=1000) print(df.head()) self.count = self.count + 1; print('count: ',self.count) print('///////////////////////////')
def join(accountid,clientID): if accountid is not None and clientID is not None: if db.isBanned(accountid): data = db.getBanData(accountid) bs.screenMessage( "You have been banned. Ban Expires on: {} IST".format( data['till'].strftime('%Y/%m/%d %H:%M:%S')), color=(1, 0, 0), clients=[clientID], transient=True) bsInternal._disconnectClient(clientID) return joined.update({accountid: bs.getRealTime()}) now_time = long(tim.strftime('%Y%m%d%H%M', tim.localtime(tim.time()))) stats = db.getData(accountid) if stats['i'] == []: stats['i'] = {} for name, exp in stats['i'].items(): if now_time > exp: bs.screenMessage( '%s Expired' % name, clients=[clientID], transient=True) stats['i'].pop(name) db.saveData(accountid, stats) daily(accountid,clientID) queue.remove(accountid)
def addRealtimeStock(self, code_stock): location = 'addRealtimeStock' cnt = 0 start = time.time() dropCompany = [] dropCode = [] table = '\'Stock_Realtime\'' value = DB_Manager.db_control().checkDBtable(dir_naver_ks_Realtime, table) temp_val = value[0] if (temp_val[0] == 0): column = '(\'종목\' TEXT PRIMARY KEY ,\'코드\' TEXT ,\'체결가\' INTEGER,\'체결시각\' TEXT)' DB_Manager.db_control().create(dir_naver_ks_Realtime, table, column) for row in code_stock: df = pd.DataFrame() cnt += 1 code = row[0] company = row[1] now = datetime.datetime.now() nowDate = now.strftime('%Y%m%d%H%M%S') url = 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format( code=code, thistime=nowDate) pg_url = '{url}&page={page}'.format(url=url, page=1) try: df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) df = df.dropna() data = df.ix[1] nowDay = now.strftime('%Y-%m-%d') Engagement_time = nowDay + ' ' + data[0] data_column = [] data_column.append(company) data_column.append(code) data_column.append(data[1]) data_column.append(Engagement_time) table = 'Stock_Realtime' column = '(\'종목\',\'코드\',\'체결가\',\'체결시각\') values (?,?,?,?)' length = 1 DB_Manager.db_control().insertOrReplaceDB( dir_naver_ks_Realtime, table, column, length, data_column) LogPrint(curr_date(), '#2.AddRealtime:', cnt, company, code, data[1], 'DB 저장완료') except Exception as e: print('#2, AddRealtime: ', cnt, company, code, '/ 데이터가 없습니다.') dropCompany.append(company) dropCode.append(code) self.timeCheck(start, location)
def main(): print 'Start Init DB object' db = None db = DB_Manager.openDB(db, 'Home.db') print 'Start Init COM object' objCOM = ClassCOM() objCOM.ComOpen() objCOM.run(db) db = DB_Manager.closeDB(db)
def receive_pseudo_code(): try: pseudocode = request.form['pcode'] lines = pseudocode.split('\n') DB_Manager.insert_pseudocode_into_db(lines) # print(lines) # detect_intent_texts(PROJECT_ID, SESSION_ID, lines, 'en-US') # return render_template('result1.html') return render_template('result1.html', statements=lines) except: return render_template('input_form1.html')
def receive_pseudo_code(): try: pseudocode = request.form['pcode'] lines_raw = pseudocode.split('\n') lines = [] for l in lines_raw: if l is not '' and l is not '\r': lines.append(l) DB_Manager.insert_pseudocode_into_db(lines) return render_template('result1.html', statements=lines) except: return render_template('input_form1.html')
def daily(n,n2): if n is None: return date = int(datetime.datetime.now().strftime('%d')) stats = db.getData(n) if stats.get('ed', 0) != date: stats['p'] += 50 stats['ed'] = date bs.screenMessage(u"You Got 50 \ue01f Daily Bonus", clients=[n2], transient=True) db.saveData(n, stats) return
def generate_intermediate_code(): lines = DB_Manager.get_pseudocode_from_db()[0] # full_pc = "" full_pc = line_manipulator(lines, data_set_name) # for line in lines: # pc = detect_intent_texts(PROJECT_ID, SESSION_ID, line, 'en-US') # full_pc = full_pc + '\n' + pc print(full_pc[0]) f = open("ipc.txt", "w+") f.write(full_pc[0]) DB_Manager.delete_all_documents("pseudocodes_temp") DB_Manager.insert_standard_pc_into_db(full_pc[1]) return render_template('result1.html', statements=full_pc[1])
def generate_intermediate_code(): lines = DB_Manager.get_pseudocode_from_db()[0] full_pc = "" for line in lines: pc = detect_intent_texts(PROJECT_ID, SESSION_ID, [line], 'en-US') full_pc = full_pc + '\n' + pc print(full_pc) # f = open(os.path.join(app.config['DOWNLOAD_FOLDER']) + '/ipc.txt', "w+") f = open("ipc.txt", "w+") f.write(full_pc) DB_Manager.delete_all_documents("pseudocodes_temp") # path = "ipc.txt" # return send_file(path, as_attachment=True) return render_template('result1.html', statements=lines)
def take(p, nick, amount, reason): try: amount = abs(int(amount)) except: return if not p.get_account_id() in [some.ownerid,some.admin_id]: bs.screenMessage('You are not the host'); return taker_player = getPlayerFromNick(nick) taker = taker_player.get_account_id() t = db.getData(taker) t['p'] -= amount db.saveData(taker, t) reason = reason if reason != '' else 'Penalty' bs.screenMessage(u'{} lost {}\ue01f | Reason: {}'.format( taker_player.getName(True), amount, reason), transient=True, color=(1, 0.5, 0.5))
def loadAllCharacters(self): account_id = self._player.get_account_id() if account_id is None: return items = db.getData(account_id)['i'] if items is not None: if isinstance(getattr(self, "characterNames", None), list): try: if 'unlock-chars' in items: self.characterNames.append('Steve') self.characterNames.append('Raphael') # for name,profile in self.profiles.items(): # character = profile.get("character","Spaz") # if (character not in self.characterNames # and character in bsSpaz.appearances): # self.characterNames.append(character) for i, k in bsSpaz.appearances.items(): if k.style != 'spaz' and i not in self.characterNames: self.characterNames.append(i) bs.screenMessage( 'All Characters Unlocked', color=(0, 1, 0), clients=[self._player.getInputDevice().getClientID()], transient=True) elif 'logicon' in items: self.characterNames.append('Logicon') bs.screenMessage( 'Logicon Unlocked', color=(0, 1, 0), clients=[self._player.getInputDevice().getClientID()], transient=True) except: bs.printException()
def upload_totalDB(self): count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result,'STG1_180525') for row in rows: count = count + 1 print('회사 카운트: ',count) dir = '/Stock/Evaluation/'+row[0]+'/' data = {'Name': row[0], 'Code': row[1], 'Volatility': row[2], 'Average': row[3], 'Eval1': row[4], 'Eval2': row[5], 'Eval3': row[6], 'StockReturn': row[7], 'Stability': row[8], 'Result': row[9], 'Total': row[10] } FB_Manager.FirebaseManager().patch(dir,data) print(row[0]) print("마무리")
def add_OnedayStock(self, code_stock): count = 0 check = [] for rows in code_stock: try: code = rows[0] df = pd.DataFrame() url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format( code=code) pg_url = '{url}&page={page}'.format(url=url, page=1) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) df = df.dropna() row = df.ix[0] except: count = count + 1 check.append(code) pass else: data = [] index_ks = self.now date_ks = row[0] close = str(row[1]) netChange = str(row[2]) open = str(row[3]) high = str(row[4]) low = str(row[5]) volume = str(row[6]) value = '?,?,?,?,?,?,?,?' data = [ index_ks, date_ks, close, netChange, open, high, low, volume ] DB_Manager.db_control().replaceDBtable(dir_naver_ks, 'kospi_' + code, value, data) print('4-1. 추가종목코드: ', code) print("4-2. 에러코드:", check) print('4-3. 에러총계 ', count)
def __ModifyBs_disconnectClient(clientID, Force=False, banTime=5 * 60): accountid = handle.getAccountIDFromClientID(clientID) if accountid is not None: if db.getAdmin(accountid): bs.screenMessage("Admin Detected. Aborting Kick...", transient=True) print "%s is in Admin-List! Aborting Kick!" % accountid return __bsInternal_disconnectClient(clientID, banTime=banTime)
def beg(i): n = i.get_account_id() n2 = i.getInputDevice().getClientID() stuff = db.getData(n) prob = random.random() if prob >= 0.2: c = random.randint(5, 25) stuff['p'] += c db.saveData(n, stuff) bsInternal._chatMessage( random.choice(celeb) + ' Gave ' + i.getName(full=True) + ' ' + str(c) + u" \ue01f!") else: bs.screenMessage(random.choice(celeb) + " flicked " + i.getName(full=True) + ' off!', color=(1, 0, 0), transient=True) clear()
def run(self, db): out = '' print 'Start Listen COM...' try: while 1: if self.ser.isOpen(): try: while self.ser.inWaiting() > 0: out += self.ser.read(1) if out != '': self.COM_READ = 1 print 'COM RX: ' + out #self.COM_BUFF_OUT=self.COM_BUFF_OUT+out self.COM_BUFF_OUT = out self.nrf(db, self.COM_BUFF_OUT) out = '' except Exception as e: self.ser.close() print "Error:", e break time.sleep(1) try: r = DB_Manager.select_last_TB_HTTP_REQ(db) if r != '': if not r[0] == self.LAST_REQ_ID: if not self.LAST_REQ_ID == '': self.firs_time = 0 self.LAST_REQ_ID = r[0] #print r[0],type(r[0]),r[2],type(r[2]),r[3],type(r[3]) self.COM_BUFF_IN = "[" + str(r[2]) + str( r[3]) + "]" self.COM_BUFF_IN = self.COM_BUFF_IN.strip() self.COM_BUFF_IN = self.COM_BUFF_IN.strip('\n') self.COM_BUFF_IN = self.COM_BUFF_IN.strip('\r') self.COM_BUFF_IN = self.COM_BUFF_IN.strip('\t') if self.COM_BUFF_IN != '' and self.COM_READ == 1 and not self.firs_time == 1: print 'COM TX: ' + self.COM_BUFF_IN #self.ser.write(self.COM_BUFF_IN + '\r\n') self.ser.write(self.COM_BUFF_IN) self.COM_BUFF_IN = '' except Exception as e: self.ser.close() print "Error:", e break except Exception as e: print "Error:", e
def give(p, nick, amount, reason): try: amount = abs(int(amount)) except: return giver = p.get_account_id() taker_player = getPlayerFromNick(nick) if taker_player is None: return taker = taker_player.get_account_id() if taker == giver: bs.screenMessage( 'Why would you try to give yourself tickets!\nStoopid Ass') return g = db.getData(giver) t = db.getData(taker) if not g['p'] >= amount: return g['p'] -= amount db.saveData(giver, g) t['p'] += amount db.saveData(taker, t) reason = reason if reason != '' else 'Gift :>' bs.screenMessage(u'Success | {} > {}\ue01f > {} | Reason: {}'.format( p.getName(True), amount, taker_player.getName(True), reason), transient=True, color=(0.5, 1, 0.5))
def bet(i, amt): bs.screenMessage('Dangerous command, turned off for your safety.') return n = i.get_account_id() n2 = i.getInputDevice().getClientID() stats = db.getData(n) multiplier = 1.7 if 'multiplier' in stats['i'] else 1.3 try: amt = abs(int(amt)) except: if amt == 'all': amt = stats['p'] elif amt == 'half': amt = stats['p'] // 2 else: bs.screenMessage( 'Hey Everyone! This doofus thinks "{}" is a number! Lol what a noob' .format(amt), color=(1, 0, 0)) return if stats['p'] < amt: bs.screenMessage('You don\'t have enough money lol. RIP. :)', color=(1, .2, .2)) else: bet_num = random.random() if bet_num <= 0: #(0.33 if 'luckycharm' in stats['i'] else 0.25): stats['p'] += int(amt * multiplier) bs.screenMessage(u'Yaay! You won {} \ue01f'.format( int(amt * multiplier)), color=(.5, 1, .5)) else: stats['p'] -= amt bs.screenMessage( u'Lol sucks to be you. You lost {} \ue01f'.format(amt), color=(1, .2, .2)) db.saveData(n, stats)
def inv(nick): n = nick.get_account_id() clid = nick.getInputDevice().getClientID() stats = db.getData(n) items = stats['i'] import datetime msgs = [] msgs.append('You currently have {} items'.format(len(items))) for i, e in items.items(): expire = datetime.datetime.strptime( str(e), "%Y%m%d%H%M").strftime("%d-%m-%Y %H:%M:%S") msgs.append('Item: {} | Expires On: {}'.format(i.upper(), expire)) bs.screenMessage('\n'.join(msgs), transient=True, clients=[clid], color=(0.7, 0.7, 1))
def upload_totalDB_JSON(self): count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525') data_json = '' for row in rows: count = count + 1 print('회사 카운트: ', count) data = '\''+ row[0] +'\'' + ': ' + '{'\ + '\'' + 'Name'+'\'' +':'+'\'' + row[0] +'\'' +','\ + '\'' + 'Code'+ '\'' +':'+ '\'' +str(row[1]) +'\'' +','\ + '\'' + 'Volatility'+'\'' + ':' + str(row[2]) +','\ + '\'' + 'Average' +'\'' + ':' + str(row[3]) + ','\ + '\'' + 'Eval1' + '\'' +':' + str(row[4]) + ','\ + '\'' + 'Eval2' + '\'' +':' + str(row[5]) + ','\ + '\'' + 'Eval3' + '\'' +':' + str(row[6]) + ','\ + '\'' + 'StockReturn' +'\'' + ':' + str(row[7]) + ','\ + '\'' + 'Stability' +'\'' + ':' + str(row[8]) + ','\ + '\'' + 'Result' +'\'' + ':' + str(row[9]) + ','\ + '\'' + 'Total' + '\'' + ':' + str(row[10]) + '}'+',' data_json = data_json + data print(data_json) data_json = data_json[:-1] print('1. ',data_json) data = '{'+ data_json +'}' print('2. ',data) print('3. ',type(data)) data_dic = eval(data) print('4. ',type(data_dic)) dir = '/Stock/Evaluation/' FB_Manager.FirebaseManager().patch(dir, data_dic)
def upload_RankDB(self): # 제이슨 파일로 만들어서 보냄 count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525') for row in rows: count = count + 1 print('회사 카운트: ', count) dir = '/Stock/Rank/' data = { row[0]+'('+row[1]+')': row[10] } FB_Manager.FirebaseManager().patch(dir, data) print(row[0]) print("마무리")
def upload_RankDB_JSON(self): # 방법: 딕셔너리로 만들고 그 다음 dump를 통해서 json 문자열로 변경하면된다. # 제이슨 파일로 만들어서 보냄 # json_val = json.dump(dict1) count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525') data_json ='' for row in rows: count = count + 1 print('회사 카운트: ', count) data = '\''+row[0]+'('+str(row[1])+')'+'\''+':' + str(row[10]) + ', ' data_json = data_json + data print(data_json) dir = '/Stock/Rank/' data_json = data_json[:-2] print(data_json) data = '{'+ data_json +'}' data_dic = eval(data) print('data_dic: ',data_dic) print(len(data_dic)) # dic 파일로 해도 전달됨 # data_json = json.dumps(data_dic, ensure_ascii=False) # print(data_json) # print(type(data_json)) FB_Manager.FirebaseManager().patch(dir, data_dic)
def addRealtimeStock(self,code_stock): cnt = 0 start = time.time() dropCompany = [] dropCode = [] for row in code_stock: df = pd.DataFrame() cnt += 1 code = row[0] company = row[1] print('01. 순서: ',cnt) print('02 회사: ',company) print('03 코드: ',code) # code = '000020' # company = 'youngsu' now = datetime.datetime.now() nowDate = now.strftime('%Y%m%d%H%M%S') url= 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format(code=code, thistime = nowDate) pg_url = '{url}&page={page}'.format(url=url, page=1) try: df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) df = df.dropna() data = df.ix[1] nowDay = now.strftime('%Y-%m-%d') Engagement_time = nowDay + ' ' + data[0] # time = data[0] data_column = [] data_column.append(company) data_column.append(code) data_column.append(data[1]) data_column.append(Engagement_time) table = 'Stock_Realtime' column = "종목, 코드, 체결가, 체결시각" column = '(\'종목\',\'코드\',\'체결가\',\'체결시각\') values (?,?,?,?)' length = len(data_column) length = 1 DB_Manager.db_control().insertOrReplaceDB(dir_naver_ks_Realtime, table, column, length, data_column) print('04. DB 저장 완료') print('--------------------------------------------') except Exception as e: print('데이터가 없습니다.', e) dropCompany.append(company) dropCode.append(code) done = time.time() elapsed = done - start print('05. 시간: ', elapsed) print('06. 사라진 회사 ', dropCompany) print('07. 사라진 회사 수', len(dropCompany)) # 반올림해서 시간(초)을 구함 print(int(round(float(elapsed))))
def createRealtimeStock(self): column = '(\'종목\' TEXT PRIMARY KEY ,\'코드\' TEXT ,\'체결가\' INTEGER,\'체결시각\' TEXT)' table = 'Stock_Realtime' DB_Manager.db_control().create(dir_naver_ks_Realtime,table,column)
def logic_Start(self,code_stock): count = 0 for row in code_stock: print('row ',row) code = row[0] company = row[1] kospi_code = 'kospi_'+code column = "날짜, 종가" date_ks = "날짜" # limit = 50 temp_list_price = DB_Manager.db_control().viewDBdata_Close(dir_naver_ks,column,kospi_code,date_ks,limit_day) list_price = [] list_daydiff = [] count = count + 1 print('1. 회사: ',company) print('2. 코드: ',code) for value in temp_list_price: # value: ('2018-02-05 00:00:00', 7800.0) price = value[1] list_price.append(price) last = len(list_price) print("3.종가 리스트: ", list_price) for i in range(1, len(list_price)): today = i - 1 yesterday = i day_diff = list_price[today]/list_price[yesterday] list_daydiff.append(day_diff) print("4.일변동: ", list_daydiff) list_result = AL_Manager.AlgorithmManager.start_logic(list_daydiff) # company_ks = company+'('+code+')' list_result.insert(0, company) list_result.insert(1, code) self.result_ks.append(list_result) print('5. 최종 데이터: ',self.result_ks) print(len(self.result_ks)) print('6. 전체회사 ',count) # break # 1. DB 테이블 생성: 오늘 날짜 default_column = '(종목 TEXT ,코드 TEXT ,변동성 INTEGER,평균 INTEGER,평가1 INTEGER,평가2 INTEGER,평가3 INTEGER,수익률_별점 INTEGER,안정성_별점 INTEGER,최종평가 INTEGER,종합점수 INTEGER)' str_date = self.now.strftime('%Y%m%d') str_date = str_date[2:8] table = 'STG1_' + str_date DB_Manager.db_control().create(dir_result, table, default_column) # 2. DB에 결과값 넣기 column = '(\'종목\',\'코드\',\'변동성\',\'평균\',\'평가1\',\'평가2\',\'평가3\',\'수익률_별점\',\'안정성_별점\',\'최종평가\',\'종합점수\') values (?,?,?,?,?,?,?,?,?,?,?)' length = len(self.result_ks) # value = '?,?,?,?,?,?,?,?,?,?' # 0th DB_Manager.db_control().saveResult(dir_result,table,column,length,self.result_ks) print("결과DB 완성") return self.result_ks
class MainStock: list_ks = [] list_kq = [] # list_result_ks = [] # list_result_ks_all = [] result_ks = [] result_kq = [] # list_result_kq = [] # list_result_kq_all = [] pre_day = -100 check_retry = 2 check_replay = 0 instance_DB = DB_Manager.db_control() now = datetime.datetime.now() end_date = now.strftime('%Y-%m-%d') pre = now + datetime.timedelta(days=pre_day) start_date = pre.strftime('%Y-%m-%d') data_source = 'yahoo' repalce_positions = '(Date, Open, High, Low, Close,`Adj Close`, Volume )' list_Com_ks = [] list_Com_kq = [] list_noneCom_ks = [] list_noneCom_kq = [] code_ks_re = [] code_kq_re = [] count = 0 url_day = 'http://finance.naver.com/item/sise_day.nhn?code={code}' url_realtime = 'http://finance.naver.com/item/sise_time.nhn?code={code}&thistime={realtime}' # /////////////////////////// START /////////////////////////// # 0. 시작 def __init__(self): pass # 1. 코스피, 코스닥 종목 가져오기 def get_stockCode(self,db, table): rows = DB_Manager.db_control().viewDBdata_stockCode(db,table) print(rows) return rows # 2. 네이버에서 데이터 가져오기: 최초 한번만 진행 def get_NaverStock(self, code_stock): # 초기화 for row in code_stock: code = row[0] DB_Manager.db_control().delDBtable(dir_naver_ks, 'kospi_' + code) print('1. 테이블 삭제: ', code) # 최초 데이터 가져오기 for row in code_stock: df = pd.DataFrame() code = row[0] company = row[1] url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code) for page in range(1, 38): pg_url = '{url}&page={page}'.format(url=url, page=page) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) # self.code_df = self.code_df.rename(columns={'회사명': 'name', '종목코드': 'code'}) df = df.dropna() df.to_sql('kospi_' + code, con_naver_ks, chunksize=1000) print(df.head()) self.count = self.count + 1; print('count: ',self.count) print('///////////////////////////') # 3. 전략진행 및 DB저장 def logic_Start(self,code_stock): count = 0 for row in code_stock: print('row ',row) code = row[0] company = row[1] kospi_code = 'kospi_'+code column = "날짜, 종가" date_ks = "날짜" # limit = 50 temp_list_price = DB_Manager.db_control().viewDBdata_Close(dir_naver_ks,column,kospi_code,date_ks,limit_day) list_price = [] list_daydiff = [] count = count + 1 print('1. 회사: ',company) print('2. 코드: ',code) for value in temp_list_price: # value: ('2018-02-05 00:00:00', 7800.0) price = value[1] list_price.append(price) last = len(list_price) print("3.종가 리스트: ", list_price) for i in range(1, len(list_price)): today = i - 1 yesterday = i day_diff = list_price[today]/list_price[yesterday] list_daydiff.append(day_diff) print("4.일변동: ", list_daydiff) list_result = AL_Manager.AlgorithmManager.start_logic(list_daydiff) # company_ks = company+'('+code+')' list_result.insert(0, company) list_result.insert(1, code) self.result_ks.append(list_result) print('5. 최종 데이터: ',self.result_ks) print(len(self.result_ks)) print('6. 전체회사 ',count) # break # 1. DB 테이블 생성: 오늘 날짜 default_column = '(종목 TEXT ,코드 TEXT ,변동성 INTEGER,평균 INTEGER,평가1 INTEGER,평가2 INTEGER,평가3 INTEGER,수익률_별점 INTEGER,안정성_별점 INTEGER,최종평가 INTEGER,종합점수 INTEGER)' str_date = self.now.strftime('%Y%m%d') str_date = str_date[2:8] table = 'STG1_' + str_date DB_Manager.db_control().create(dir_result, table, default_column) # 2. DB에 결과값 넣기 column = '(\'종목\',\'코드\',\'변동성\',\'평균\',\'평가1\',\'평가2\',\'평가3\',\'수익률_별점\',\'안정성_별점\',\'최종평가\',\'종합점수\') values (?,?,?,?,?,?,?,?,?,?,?)' length = len(self.result_ks) # value = '?,?,?,?,?,?,?,?,?,?' # 0th DB_Manager.db_control().saveResult(dir_result,table,column,length,self.result_ks) print("결과DB 완성") return self.result_ks # 1. 기존 데이터의 최근 날짜를 가져온다. # 2. 현재 날짜를 가져온다. # 3. 날짜를 비교해서 가져와야 하는 페이지를 계산 # 4. 부족한 데이터만 가져오기 # 3. 일별시세 데이터 추가: 하루에 한번 실행 def addDayStock(self,code_stock): # 1. 기존 sqlite DB에 있는 샘플 코드 날짜 2개를 추출 : kospi_000020, kospi_900140 # 2. 날짜를 비교해서 가장 업데이트 안된 날짜를 기준으로 네이버 최신 데이터와 비교 column = '날짜' table1 = 'kospi_000020' table2 = 'kospi_900140' limit = 3 code = '000020' check_day1 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table1, column, limit) check_day2 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table2, column, limit) day1 = check_day1[0] day2 = check_day2[0] d1 = datetime.datetime.strptime(day1[0], "%Y.%m.%d").date() d2 = datetime.datetime.strptime(day2[0], "%Y.%m.%d").date() print('d1: ', d1) print('d2: ', d2) delta = d1 - d2 check_delta = delta.days diff_day = d1 if check_delta == 0 : diff_day = d1 elif check_delta > 0: diff_day = d2 elif check_delta < 0: diff_day = d1 # 1. sqlite DB에 있는 데이터 가져와서 마지막 날짜를 네이버 날짜랑 비교 df = pd.DataFrame() url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code) pg_url = '{url}&page={page}'.format(url=url, page=1) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) data = df.ix[1] print('data: ', data) print(type(data)) temp = '날짜' print(data[0]) day3 = data[0] print('day3: ',day3) d3 = datetime.datetime.strptime(day3, "%Y.%m.%d").date() print('d3: ',d3) delta = d3 - diff_day check_delta = delta.days print('check_delta: ',check_delta) cnt_page = check_delta//10 print('cnt_page: ',cnt_page) cnt = 0 for row in code_stock: cnt = cnt + 1 df = pd.DataFrame() code = row[0] company = row[1] url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code) print('------------------------------------------------------------') print('1. 순번: ', cnt) print('2. 코드: ', code) print('3. 회사: ', company) for page in range(1, cnt_page): pg_url = '{url}&page={page}'.format(url=url, page=page) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) df = df.dropna() df.to_sql('kospi_' + code, con_naver_ks, if_exists='replace') print('4. 일별 데이터: ', df) # print("start_time", start_time) # 출력해보면, 시간형식이 사람이 읽기 힘든 일련번호형식입니다. # print("--- %s seconds ---" % (time.time() - start_time)) # 1. 처음 데이터베이스 > 테이블 만들자 # 2. 신규 데이터 삽입 # 3. 데이터 업데이트 def createRealtimeStock(self): column = '(\'종목\' TEXT PRIMARY KEY ,\'코드\' TEXT ,\'체결가\' INTEGER,\'체결시각\' TEXT)' table = 'Stock_Realtime' DB_Manager.db_control().create(dir_naver_ks_Realtime,table,column) def addRealtimeStock(self,code_stock): cnt = 0 start = time.time() dropCompany = [] dropCode = [] for row in code_stock: df = pd.DataFrame() cnt += 1 code = row[0] company = row[1] print('01. 순서: ',cnt) print('02 회사: ',company) print('03 코드: ',code) # code = '000020' # company = 'youngsu' now = datetime.datetime.now() nowDate = now.strftime('%Y%m%d%H%M%S') url= 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format(code=code, thistime = nowDate) pg_url = '{url}&page={page}'.format(url=url, page=1) try: df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) df = df.dropna() data = df.ix[1] nowDay = now.strftime('%Y-%m-%d') Engagement_time = nowDay + ' ' + data[0] # time = data[0] data_column = [] data_column.append(company) data_column.append(code) data_column.append(data[1]) data_column.append(Engagement_time) table = 'Stock_Realtime' column = "종목, 코드, 체결가, 체결시각" column = '(\'종목\',\'코드\',\'체결가\',\'체결시각\') values (?,?,?,?)' length = len(data_column) length = 1 DB_Manager.db_control().insertOrReplaceDB(dir_naver_ks_Realtime, table, column, length, data_column) print('04. DB 저장 완료') print('--------------------------------------------') except Exception as e: print('데이터가 없습니다.', e) dropCompany.append(company) dropCode.append(code) done = time.time() elapsed = done - start print('05. 시간: ', elapsed) print('06. 사라진 회사 ', dropCompany) print('07. 사라진 회사 수', len(dropCompany)) # 반올림해서 시간(초)을 구함 print(int(round(float(elapsed)))) # 5. 파이어베이스에 데이터 업로드 def upload_totalDB(self): count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result,'STG1_180525') for row in rows: count = count + 1 print('회사 카운트: ',count) dir = '/Stock/Evaluation/'+row[0]+'/' data = {'Name': row[0], 'Code': row[1], 'Volatility': row[2], 'Average': row[3], 'Eval1': row[4], 'Eval2': row[5], 'Eval3': row[6], 'StockReturn': row[7], 'Stability': row[8], 'Result': row[9], 'Total': row[10] } FB_Manager.FirebaseManager().patch(dir,data) print(row[0]) print("마무리") def upload_RankDB(self): # 제이슨 파일로 만들어서 보냄 count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525') for row in rows: count = count + 1 print('회사 카운트: ', count) dir = '/Stock/Rank/' data = { row[0]+'('+row[1]+')': row[10] } FB_Manager.FirebaseManager().patch(dir, data) print(row[0]) print("마무리") def upload_RankDB_JSON(self): # 방법: 딕셔너리로 만들고 그 다음 dump를 통해서 json 문자열로 변경하면된다. # 제이슨 파일로 만들어서 보냄 # json_val = json.dump(dict1) count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525') data_json ='' for row in rows: count = count + 1 print('회사 카운트: ', count) data = '\''+row[0]+'('+str(row[1])+')'+'\''+':' + str(row[10]) + ', ' data_json = data_json + data print(data_json) dir = '/Stock/Rank/' data_json = data_json[:-2] print(data_json) data = '{'+ data_json +'}' data_dic = eval(data) print('data_dic: ',data_dic) print(len(data_dic)) # dic 파일로 해도 전달됨 # data_json = json.dumps(data_dic, ensure_ascii=False) # print(data_json) # print(type(data_json)) FB_Manager.FirebaseManager().patch(dir, data_dic) def upload_totalDB_JSON(self): count = 0 rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525') data_json = '' for row in rows: count = count + 1 print('회사 카운트: ', count) data = '\''+ row[0] +'\'' + ': ' + '{'\ + '\'' + 'Name'+'\'' +':'+'\'' + row[0] +'\'' +','\ + '\'' + 'Code'+ '\'' +':'+ '\'' +str(row[1]) +'\'' +','\ + '\'' + 'Volatility'+'\'' + ':' + str(row[2]) +','\ + '\'' + 'Average' +'\'' + ':' + str(row[3]) + ','\ + '\'' + 'Eval1' + '\'' +':' + str(row[4]) + ','\ + '\'' + 'Eval2' + '\'' +':' + str(row[5]) + ','\ + '\'' + 'Eval3' + '\'' +':' + str(row[6]) + ','\ + '\'' + 'StockReturn' +'\'' + ':' + str(row[7]) + ','\ + '\'' + 'Stability' +'\'' + ':' + str(row[8]) + ','\ + '\'' + 'Result' +'\'' + ':' + str(row[9]) + ','\ + '\'' + 'Total' + '\'' + ':' + str(row[10]) + '}'+',' data_json = data_json + data print(data_json) data_json = data_json[:-1] print('1. ',data_json) data = '{'+ data_json +'}' print('2. ',data) print('3. ',type(data)) data_dic = eval(data) print('4. ',type(data_dic)) dir = '/Stock/Evaluation/' FB_Manager.FirebaseManager().patch(dir, data_dic)
dir_result = './RESULT.db' pre_day = -100 check_retry = 2 check_replay = 0 table_kospi = 'KOSPI' table_kosdaq = 'KOSDAQ' con_yahoo_ks = sqlite3.connect("./yahoo_stock_ks.db") con_yahoo_kq = sqlite3.connect("./yahoo_stock_kq.db") con_kospi = sqlite3.connect("./kospi_db.db") con_kosdaq = sqlite3.connect("./kosdaq_db.db") # cur_ks = con_kospi.cursor() instance_DB = DB_Manager.db_control() now = datetime.datetime.now() end_date = now.strftime('%Y-%m-%d') pre = now + datetime.timedelta(days = pre_day) start_date = pre.strftime('%Y-%m-%d') data_source = 'yahoo' repalce_positions ='(Date, Open, High, Low, Close,`Adj Close`, Volume )' list_Com_ks = [] list_Com_kq = [] list_noneCom_ks = [] list_noneCom_kq = []
def addDayStock(self,code_stock): # 1. 기존 sqlite DB에 있는 샘플 코드 날짜 2개를 추출 : kospi_000020, kospi_900140 # 2. 날짜를 비교해서 가장 업데이트 안된 날짜를 기준으로 네이버 최신 데이터와 비교 column = '날짜' table1 = 'kospi_000020' table2 = 'kospi_900140' limit = 3 code = '000020' check_day1 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table1, column, limit) check_day2 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table2, column, limit) day1 = check_day1[0] day2 = check_day2[0] d1 = datetime.datetime.strptime(day1[0], "%Y.%m.%d").date() d2 = datetime.datetime.strptime(day2[0], "%Y.%m.%d").date() print('d1: ', d1) print('d2: ', d2) delta = d1 - d2 check_delta = delta.days diff_day = d1 if check_delta == 0 : diff_day = d1 elif check_delta > 0: diff_day = d2 elif check_delta < 0: diff_day = d1 # 1. sqlite DB에 있는 데이터 가져와서 마지막 날짜를 네이버 날짜랑 비교 df = pd.DataFrame() url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code) pg_url = '{url}&page={page}'.format(url=url, page=1) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) data = df.ix[1] print('data: ', data) print(type(data)) temp = '날짜' print(data[0]) day3 = data[0] print('day3: ',day3) d3 = datetime.datetime.strptime(day3, "%Y.%m.%d").date() print('d3: ',d3) delta = d3 - diff_day check_delta = delta.days print('check_delta: ',check_delta) cnt_page = check_delta//10 print('cnt_page: ',cnt_page) cnt = 0 for row in code_stock: cnt = cnt + 1 df = pd.DataFrame() code = row[0] company = row[1] url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code) print('------------------------------------------------------------') print('1. 순번: ', cnt) print('2. 코드: ', code) print('3. 회사: ', company) for page in range(1, cnt_page): pg_url = '{url}&page={page}'.format(url=url, page=page) df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True) df = df.dropna() df.to_sql('kospi_' + code, con_naver_ks, if_exists='replace') print('4. 일별 데이터: ', df)