class Etrade: def __init__(self): self.browser = Browser() self.cj=GAELWPCookieJar() self.browser.set_cookiejar(self.cj) self.browser.set_handle_equiv(True) #br.set_handle_gzip(True) self.browser.set_handle_redirect(True) self.browser.set_handle_referer(True) self.browser.set_handle_robots(False) self.browser.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 GTB7.1 ( .NET CLR 3.5.30729)')] self.resp = None def zandaka(self): #try: #logging.info("zandaka") soup = BeautifulSoup(self.browser.response().read()) #logging.info(unicode(self.browser.response().read(),'ms932')) p = re.compile(r'^[0-9,]+$') for obj in soup.find('tr', bgcolor="#e6e5ff").findAll('b'): if p.match(obj.string.strip()): return obj.string.strip() return "" #except: # return "" def tone_board(self,stocks): buf="" if self.ketai_login() or self.ketai_login(): #logging.info(stocks) for stock in stocks: url = MyResource.ETRADE_KETAI_TONE_BOARD_URL.replace("XXXX",stock['code']) self.browser.open( url ) soup = BeautifulSoup(self.browser.response().read()) tables = soup.find('body').findAll('table') buf += stock['code'] + u' ' + stock['name'] + u'<br>' buf+="<table border=0 cellspacing=0 cellpadding=0 width=95%>" for c in tables[6]: buf+= unicode(str(c).replace("#eceaf9","#4c4a59").replace("#f9f9f9","#595959").replace("#FF0000","#FF4040").replace("#0000FF","#40FF40"),"utf_8") buf+="</table><br>" return buf def ketai_login(self): try: self.browser.open(MyResource.ETRADE_KETAI_TOP_URL) self.browser._factory.encoding = "shift_jis" self.browser._factory._forms_factory.encoding = "shift_jis" self.browser._factory._links_factory._encoding = "shift_jis" self.browser.select_form('form1') self.browser['username'] = MyResource.ETRADE_ID self.browser['password'] = MyResource.ETRADE_PASSWORD self.resp = self.browser.submit() #self.orgcj = copy(self.cj) logging.info(self.browser.response().info()) return self.resp except: return False def login(self): #try: #self.browser.open(MyResource.ETRADE_TOP_URL) self.browser.open(MyResource.ETRADE_LOGIN_URL) logging.info(self.browser.response().info()) self.browser._factory._forms_factory.encoding = "shift_jis" self.browser._factory._links_factory._encoding = "shift_jis" self.browser.select_form('MyForm01') logging.info(self.browser) controls = self.browser.form.controls controls[16]._value = MyResource.ETRADE_ID controls[17]._value = MyResource.ETRADE_PASSWORD #self.browser['user_id[]'] = [MyResource.ETRADE_ID] #self.browser['user_password[]'] = [MyResource.ETRADE_PASSWORD] self.browser['_ActionID'] = [MyResource.ETRADE_ACTION_ID] self.resp = self.browser.submit() #self.orgcj = copy(self.cj) logging.info(self.browser.response().info()) logging.info("encodng:"+ self.browser.encoding()) return self.resp #except: # return False def loggingform(self): #for form in self.browser.forms(): # logging.info(form) return def logging_response_header_cookie(self,msg): logging.info(msg) logging.info(self.browser.response().info()) logging.info(self.cj) def bad_response(self,content=""): return {'ret': False, 'content': content} def reset_control(self,k,v=""): try: for f in self.browser.forms(): for c in f.controls: c.readonly = False self.browser[k] = v return True except: return False def ketai_order(self,stock_code,opt): quantity="sum_quantity" if re.search(LIST_HEADER[u'信用新規買'], opt['ordertype']): orderform = MyResource.ETRADE_KETAI_HOST+'/bsite/member/margin/sellHOrderEntryTateList.do?open_trade_kbn=0&ipm_product_code='+stock_code+'&open_market=TKY&payment_limit=6&cayen.init=true' quantity="sum_quantity" elif re.search(LIST_HEADER[u'信用新規売'], opt['ordertype']): orderform = "http://yahoo.co.jp" elif re.search(LIST_HEADER[u'現物買'], opt['ordertype']): orderform = MyResource.ETRADE_KETAI_HOST+'/bsite/member/stock/sellOrderEntry.do?ipm_product_code='+stock_code quantity="quantity" else: orderform = "http://yahoo.co.jp" self.browser.open(orderform) #入力フォーム self.browser.select_form(nr=0) self.browser._factory.encoding = "Windows-31J" self.browser._factory._forms_factory.encoding = "Windows-31J" self.browser._factory._links_factory._encoding = "Windows-31J" self.browser[quantity] = opt['quantity'] self.browser['sasinari_kbn'] = [opt['nari_type']] self.browser['password'] = MyResource.ETRADE_PASSWORD self.resp = self.browser.submit(nr=1) #logging.info(BeautifulSoup(self.browser.response().read()).prettify()) #確認画面 self.browser.select_form(nr=0) self.resp = self.browser.submit(nr=0) #logging.info(BeautifulSoup(self.browser.response().read()).prettify()) if not self.resp: return self.bad_response(u"注文失敗") else: self.logging_response_header_cookie('finish order') res_ret=True p = re.compile(r'<.*?>') content = p.sub('', BeautifulSoup(self.browser.response().read()).prettify()) content = re.sub(' ','',content) content = re.sub('\n','',content) content = re.sub(' ','<br>',content) return {'ret': res_ret, 'content': content}