Exemple #1
0
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('&nbsp;','<br>',content)
    return {'ret': res_ret, 'content': content}