뉴스 자동매매 구현중 중간소스 점검
마스터욱
0
44
0
0
2018-03-14 00:03:40
확실히 닷넷보다 개발하기 편하네요.
앞으로 윈도우 프로그램은 다 파이썬으로 짜야겠다 ㅋㅋ
일단 공시뉴스 데이터가 있어야 매수든 매도든 할거 아니겠어요?
그래서 xx증권 사이트에 들어가서 공시뉴스를 가져오는 소스까지 짜뒀습니다.
개발하면서 느낀건데, 저는 소스코드에 관해 약간의 결벽증이 있었던 것 같습니다.
어떻게든 깔끔하게 짜고 싶은 성격이랄까...
그런데 그렇게 개발하니 저만 피곤하고, 신경쓸게 많다보니 짜증나더라구요~
맘편하게 주석도 왕창달고, 더럽게 짜니깐 맘편하네요 케케케~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | import sys import lib as lib from PyQt5.QtWidgets import * import pandas as pd from pprint import pprint import re import requests import json from collections import OrderedDict class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("뉴스매매(Makeby 욱)") self.setGeometry(300, 300, 1200, 700) self.setTable() """"" btn1 = QPushButton("Click me", self) btn1.move(20, 20) btn1.clicked.connect(self.btn1_clicked) """ def setTable(self): #self.setGeometry(5,5,200,200) newsLabel = QLabel("실시간 뉴스", self) newsLabel.setGeometry(5, 5, 500, 50) self.tableWidget = QTableWidget(self) #self.tableWidget.resize(500, 500) self.tableWidget.setGeometry(5, 50, 500, 500) self.tableWidget.setRowCount(20) self.tableWidget.setColumnCount(2) #self.tableWidget.setVerticalHeaderLabels(['1','2']) self.tableWidget.setHorizontalHeaderLabels(['제목', '시간']) #데이터 넣기 #self.setTableWidgetData() #뉴스 저장하기 self.setNews() #뉴스 가져오기 self.getNews() def setTableWidgetData(self): self.tableWidget.setItem(0, 0, QTableWidgetItem("(0,0)")) self.tableWidget.setItem(0, 1, QTableWidgetItem("(0,1)")) self.tableWidget.setItem(1, 0, QTableWidgetItem("(1,0)")) self.tableWidget.setItem(1, 1, QTableWidgetItem("(1,1)")) """ def btn1_clicked(self): QMessageBox.about(self, "message", "clicked") """ #API 서버에서 뉴스크롤링 실행시키기 def setNews2(self): post_data = {"type":"croll"} url = "apiurl" r = requests.post(url, data=post_data) result_json = r.text #{"result":"OK"} # JSON 디코딩 dict = json.loads(result_json) #파이썬 자체에서 크롤링 def setNews(self): #공시정보 가져오기 #lib.get_financial_statements('http://dart.fss.or.kr/api/search.json?auth=5d7fe977e575fb2ec15661d0a1556f40793237f6') outhtml = lib.get_financial_statements('크롤링 url') #print(outhtml) #output = re.match(r'(?s).*<!-- List BBS Block Start -->(.*)<!-- //List BBS Block End -->.*', outhtml, re.M|re.I) #print(output.group(1)) #output = re.match(r'(?s).*<div class="newListArea">(.*)</div>(.*)</div>.*', output.group(1), re.M|re.I) output = re.match(r'(?s).*<!-- %%LIST data%% -->(.*)<!-- %%ENDLIST data%% -->.*', outhtml, re.M | re.I) output_data = ''; if output is not None: output_data = output.group(1) #print(output) else: print("젠장... 비었음...") #print(output_data) outlist = re.split('</tr>', output_data) #pprint(outlist) cnt = 0 all_json = OrderedDict() for row in outlist: #date = lib.get_between_string(row, '<div id="date_0">', '</div>') #print(row) row_list = re.split('<td', row) #pprint(row_list) #print(row_list[2]) #print(lib.strip_tags(row_list[3])) #print(row_list[3]) date = '' time = '' title = '' try: row_json = OrderedDict() tmp = re.match(r'(?s).*<div id="date_.*">(.*)</div></td>.*', row_list[1]) date = tmp.group(1) tmp = re.match(r'(?s).*<div id="time_.*">(.*)</div></td>.*', row_list[2]) time = tmp.group(1) tmp = re.match(r'(?s).*<div id=\'title_.*\'>(.*)</div></a>.*', row_list[3]) title = tmp.group(1) title = title.replace(' ','') row_json['date'] = date row_json['time'] = time row_json['title'] = title all_json[str(cnt)] = row_json except: print("끝줄에러") ''' test = "" test += "date = " + date + " || " test += "time = " + time + " || " test += "title = " + title + " || " print(str(cnt) + " = " + test) ''' cnt = cnt + 1 #pprint(all_json) jsonString = json.dumps(all_json) post_data = {'data': jsonString, "type": "news_toss"} #print(jsonString) #pprint(post_data) #디비에 저장 url = "/api/set_news.php" r = requests.post(url, data=post_data) result_json = r.text #{"result":"OK"} def getNews(self): url = "apiurl" r = requests.post(url) result_json = r.text #{"result":"OK"} # JSON 디코딩 dict = json.loads(result_json) # Dictionary 데이타 체크 #print(dict['result']) #print(dict['list']) cnt = 0; for row in dict['list']: print(row['title'] + " " + row['time']) self.tableWidget.setItem(cnt, 0, QTableWidgetItem(row['title'])) self.tableWidget.setItem(cnt, 1, QTableWidgetItem(row['time'])) cnt = cnt + 1 #각 열크기 맞춤 self.tableWidget.resizeColumnsToContents() self.tableWidget.resizeRowsToContents() if __name__ == "__main__": app = QApplication(sys.argv) #print(sys.argv) #D:/project/python/hello/hello.py myWindow = MyWindow() myWindow.show() app.exec_() | cs |