develop custom_top_html:no
default debug random = 2 / type = READ / detected = READ

안녕하세요.

예전에 html코드만으로 거래소 이용하는 예제 올렸는데 많은 분들이 추천을 주셔서

이번에도 간단한 코드 올려드리려 합니다.

 

html코드만으로 거래소 API처리하기는 많은 제약사항이 있지만,

굳이 html을 사용하시는건...... 예제 자료도 많이 있고 무엇보다 그래픽 환경이라는 점이 클거라고 생각합니다.

하지만 python은 주식 관련 라이브러리나 머신러닝 관련 자료도 많아서 데이터를 훨씬 유연하게 처리할 수 있습니다.

 

그래서 이번에는 웹 브라우저에서 명령을 내리고 python에서 데이터를 처리하는 방법을 소개하려 합니다.

python이 URL을 통해 명령어를 입력받고 처리 후 데이터를 리턴하는 방식입니다.

 

동작방식

동작 :          브라우저 요청            ->         python 처리          ->      python 출력     ->       브라우저 응답

예시 : (http://내아이피/coinone/ticker)      (coinone의 ticker받아옴)       (ticker결과 출력)      (html로 이쁘게 보여줌)

 

준비물

1. python2.7

2. 웹 브라우저

3. 서버, 데이터베이스, 웹 호스팅, 돈...

4. django, flask

※ python의 기본 모듈만으로 만들어 보겠습니다.

 

설치하기

1. http://python.org 여기서 2.7.13버전을 받으시면 됩니다.

2. 다운받은 설치프로그램을 더블클릭하여 설치합니다.

 

실행하기

1. 설치 후, 시작에서 "IDLE (Python GUI)"를 찾아 실행합니다.

2. File > New File을 눌러 새로운 파일을 띄웁니다.

3. 편한 곳에 test.py로 저장합니다.

 

코드작성

1. 아래 코드를 test.py에 붙여넣습니다.

   URL으로 데이터를 입력받고 데이터를 리턴해주는 기본 틀이라고 생각하시면 됩니다.

   기본 틀에서 수정해야할 곳은 빨간색으로 해놓았습니다.

( 참고한 사이트 : http://i5on9i.blogspot.kr/2014/05/simplehttpserver.html )

#-*- coding: utf-8 -*-

# python 2.7.x
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import json, re, urllib2, urllib, time
import hmac,hashlib

# This class will handles any incoming request from
# the browser


class MyHandler(BaseHTTPRequestHandler):

    def _genParamDic(self, params):
        paramDic = {}
        for i in params.split('&'):
            if i.find('=') is -1:
                continue
            key, val = i.split('=')
            paramDic[key] = val
        return paramDic

    def _doSend(self, retMessage):
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.end_headers()

        self.wfile.write(retMessage)

    def _get(self, url):
        req = urllib2.Request(url)
        resp = urllib2.urlopen(req, timeout=10)
        retMessage = resp.read()
        return retMessage

    def _post(self, url, post_data, headers={}):
        post_data = urllib.urlencode(post_data)
        req = urllib2.Request(url, post_data, headers)
        resp = urllib2.urlopen(req, timeout=10)

        retMessage = resp.read()
        return retMessage

    # Handler for the POST requests
    def do_POST(self):
        self.do_GET()

        return

    # Handler for the GET requests
    def do_GET(self):

        pathes = self.path.split('/')
        retMessage = ''

        if len(pathes) < 3:
            return

        sep = re.split('/|\?', self.path)
        reqType = sep[1]
        reqTarget = sep[2]

        params = ''
        paramDic = ''
        if len(sep) > 3:
            params = sep[3]

            paramDic = self._genParamDic(params)

        # URL 접근 시 변수 예시
        # http://127.0.0.1/coinone/ticker?currency=btc&test=1
        # reqType = coinone
        # reqTarget = ticker
        # params = currency=btc&test=1
        # paramDic = {'currency':'btc', 'test'='1'}
        
        #-----------여기에 코드를 넣습니다-----------#

        #--------------------------------------------#

        return

if __name__=="__main__":

    IP_ADDR = '?.?.?.?' # 자신의 아이피
    PORT_NUMBER = 80
    
    try:
        # Create a web server and define the handler to manage the
        # incoming request
        server = HTTPServer((IP_ADDR, PORT_NUMBER), MyHandler)
        print('Started httpserver on port ', PORT_NUMBER)

        # Wait forever for incoming htto requests
        server.serve_forever()

    except KeyboardInterrupt:
        print('^C received, shutting down the web server')
        server.socket.close()

 

 

2. IP_ADDR에 자신의 아이피를 확인하여 넣습니다.

   - 확인법 : 윈도우키+R > cmd 입력 > ipconfig 입력 > 이더넷 어댑터 부분의 IPv4 주소

 

3. F5를 눌러서 실행하면 자신의 아이피로 웹 서버가 동작을 시작합니다.

   "http://자신의아이피/" 으로 동작합니다.

 

4. URL으로 입력하는 명령어는 다음과 같습니다.

# http://자신의아이피/명령어1/명령어2?변수1=a&변수2=b

   reqType : 명령어1

   reqTarget : 명령어2

   params : 변수1=a&변수2=b

   paramDic : {'변수1' : 'a', '변수2' : 'b'}

 

5. 코드 넣는 부분에는 다음과 같이 처리하면 됩니다. 

5-1. coinone ticker 코드 예제

        if reqType == 'coinone':
            if reqTarget == 'ticker':
                retMessage = self._get('https://api.coinone.co.kr/ticker/?'+params)
                self._doSend(retMessage)

5-2. coinone ticker 입출력 예제

입력 : http://자신의아이피/coinone/ticker?currency=all

출력 : {"result":"success","volume":"18097.1977","last":"4630000","timestamp":"1502647387",......

※ 전체 예제 코드

        #-----------여기에 코드를 넣습니다-----------#

        if reqType == 'coinone':
            if reqTarget == 'ticker':
                retMessage = self._get('https://api.coinone.co.kr/ticker/?'+params)
                self._doSend(retMessage)
            elif reqTarget == 'orderbook':
                retMessage = self._get('https://api.coinone.co.kr/orderbook/?'+params)
                self._doSend(retMessage)
        elif reqType == 'bithumb':
            if reqTarget == 'ticker':
                retMessage = self._get('https://api.bithumb.com/public/ticker/'+params)
                self._doSend(retMessage)
            elif reqTarget == 'orderbook':
                retMessage = self._get('https://api.bithumb.com/public/orderbook/'+params)
                self._doSend(retMessage) 

        #--------------------------------------------#

 

6. 잘 되는지 확인

api.png

 

6. html코드에서 python 명령어 실행

   jquery로 데이터 가져오는 URL부분을 작성한 python 코드에 맞게 수정합니다.

   [ 참고(거래소api를 html으로 다루기) : https://www.ddengle.com/bitcoindeveloper_voted/2641559 ]

$.get('http://자신의아이피/coinone/ticker?currency=all', function(data) {
                    var coinone_btc = parseFloat(data['btc']['last']);

                   ...........

 

 

이렇게 만들면 크로스도메인 문제 해결할 수 있으며, 데이터는 파이썬에서 처리하게 만들 수 있습니다.

실제로 python에서 데이터를 처리하고 거래소를 통해 매수/매도 하는 방법은 글이 너무 길어져 추후 다루겠습니다.

 

땡글에서도 트레이딩 알고리즘에 대한 정보공유가 활발해졌으면 하는 마음으로 올립니다.

감사합니다.

107
Attachment
첨부 '1'
댓글 17
  • ?
    궁금해 하고 있었는데 감사합니다. 추천글로 고고!
  • 좋은글 감사합니다~ ^^
  • ?
    감사합니다. 추천드리며, 다음글도 기대하겠습니다...
  • ?
    좋은 정보 감사합니다.~
  • ?
    감사합니다. ^^
  • ?
    매번 잘보고배워용 !
  • ?

    질문이잇는데요 이방법으로 받아서 사용하려면 계속 컴퓨터 한대는 파이썬 서버(?)를 실행해 두어야하나요?

     

    만약 그렇다면 한번실행후 해당 컴퓨터를 꺼도 작동되게하는 방법이 잇는지 궁금합니다

  • ?
    @Jackbauer
    웹 브라우저 실행하는 건 컴퓨터이니 파이썬 실행도 같이 하면 될거라고 생각했는데
    더 생각해보니 모바일에서 보게 되는 경우는 좀 난감하겠네요

    파이썬만을 무료로 호스팅해주는곳이 있습니다.
    https://www.pythonanywhere.com/
    사실 저는 사용해보지 않았습니다만 비트코인 랜딩봇 돌리시는 분들이 많이 사용하고 있습니다.
    자신만 사용한다면 가장 적당한거 같습니다.
  • ?
    좋은글입니다.
  • ?

    안녕하세요 큰 도움이 되었습니다. 질문이 있는데요
    https://www.pythonanywhere.com/ 에 가입하고 조금 만져보고 있습니다

     

    질문을 올렸다가 몇 차례 수정이 되었는데. 해당 질문들을 어느정도 해결했기 때문인데 현재는

    파일을 런 시켰을때 나타나는 에러를 없애야 하는 상황이네요~

  • ?

    Traceback (most recent call last):
    File "/home/soulkeep/BaseHTTPServer.py", line 3, in <module>
    from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
    File "/home/soulkeep/BaseHTTPServer.py", line 3, in <module>
    from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
    ImportError: cannot import name 'BaseHTTPRequestHandler'

    라는 에러가 발생합니다. 크로비님의 예제를 거의 그대로 사용했구여~

  • ?
    @달빛아래말할게
    음... 저도 잘 모르겠는데
    혹시 파이썬 2.x버전 사용해야하는데 3.x버전 사용하셨는지 확인해주세요
  • ?
    생각보다 간단한 문제가 아닌 것 같군요 ㅠㅠ. 다시 자바스크립트로 돌아가서 CORS 문제를 해결하는 쪽으로 생각해야 겠네요
  • ?
    @달빛아래말할게
    크로스 도메인 안되는 사이트는 제외하거나 고정값(환율같은부분)으로 처리하는것도 괜찮을거 같네요 ㅎㅎ
  • ?
    파이썬에 대해 생각보다 높은 지식이 있지 않으면 파이썬호스팅은 조금 힘들어 보이긴 합니다
    아이피를 넣는칸에 호스팅주소를 넣어야하는데 그렇게 되면 문구를 조금 바꿔야 하는식의 추가 지식이 있어야 해서 ^^
    그래도 감사합니다
  • ?

    안녕하세요.

    코빗은 어떻게 넣으면되나요??

    ..

    여러가지 해봤는데 파이썬은 무뇌라서 ..ㅠ

  • ?
    감사합니다
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
개발 웹 브라우저 + python으로 거래소 API 처리하기 1 안녕하세요. 예전에 html코드만으로 거래소 이용하는 예제 올렸는데 많은 분들이 추천을 주셔서 이번에도 간단한 코드 올려드리려 합니다.   html코드만으로 거래소 API처리하기는 많은 제약사항... 17 file 18 12000
크로비
2017.08.14
359 개발 리눅스 터미널용 nvidia 오버클럭 스크립트 http://www.nippyzip.com/uploads/170815014119-75339.zip   nv-tool.zip 파일의 압축을 풀면 nv-tool.sh 쉘 스크립트가 들어있습니다.   ssh를 통해서 관리하시는 분들을 위해 터미널을 통해서 ... 8 file 9 3666
ethminer
2017.08.14
358 개발 초보 독학러가 api받는 법에대해 질문이 잇습니당  $.get(&quot;https://api.coinone.co.kr/ticker/?currency=all&quot;, function(data) { var btc = data['btc']['last']  var vol = data['btc']['volume'] ... ... 이런식으로 받아서 잘사용하고있는데  ... 8 0 2417
Jackbauer
2017.08.13
357 개발 python 질문좀 드릴께요. def mygetbalance2(market_name):     bal = my.balance()     if market_name.lower() == &quot;krw&quot;:         #print(&quot;KRW balance:&quot;,balance['krw']['avail'])         bb = bal['krw']['avail']  ... 4 0 1961
태무현
2017.08.13
356 개발 BitcoinYo - 비트코인요 ESCROW(신용거래) 결제 지원   비트코인요 서비스 추가내용을 전달드립니다 ^^;   기존 결제방식에 에스크로(신용거래)기능을 지원해 원하는 의견이 있어서 추가해 보았습니다. (결제수수료가 2배가 되는건 안비밀;)   기존 ... 11 file 2 2514
이더리움링
2017.08.12
355 개발 허접하지만 알뜰한 기능의 채굴기 모니터링 프로그램입니다 기능 -채굴기 1set의 평균온도와 해쉬 -모든 그래픽카드들의 온도와 해쉬 -온도와 해쉬의 수치별 색상변화 -각 set별 혹은 그래픽카드별 설정수치시 알람 발생(sms 문자발생, 다수인원 가능) -설... 23 file 93 8249
503
2017.08.12
354 개발 마플허 잔고, 마이너 확인 웹 만들었어요ㅋㅋ 이전에 zec,eth 확인웹 만들었는데 ( https://www.ddengle.com/bitcoindeveloper/2537759   최근엔 모네로랑 dgb까지 채굴하게 되었네요 근데 두 마이너가 api를 제공안해줘서 어쩔수없이 마플허... 10 file 5 2931
싱싱88
2017.08.12
353 개발 오토핫키로 api 제작중인데 질문이 있습니다. 프로그래밍을 전문적으로 배운적은 없고 독학하면서 배우는 중입니다.   파이썬으로 배우면서 시작하다가 한글로 된 자료가 너무 부족해서    오토핫키로 바꿔서 새로 제작중에 있습니다.     현... 4 file 0 4028
가가무
2017.08.11
352 개발 모니터링 프로그램 ver 0.5 업데이트 안녕하세요. 남자별입니다. 이번 업데이트는 기존 요청사항들중 편의성 부분으로 개별 설정할 수 있도록 수정했습니다.   ver 0.5  업데이트                 monitor.ini 설정 추가. 기본 배포... 61 file 44 12848
남자별
2017.08.11
351 개발 블록체인 스타트업을 함께 일궈내실 개발자분을 찾고있습니다. (서울) 블록체인 관련 스타트업을 준비중입니다. 현재는 세미나 형식으로 매주 월요일 강남에서 개발자를 포함해 6명이 모이고있습니다. (개발자3,기획2,마케팅1명) 개발방향은 어느정도 정해져있고, 무... 4 0 2386
notyolo
2017.08.11
350 개발 거래소 개발 정보수집중엔데 , 거래소 핫왈렛 콜드왈렛 관련 질문입니다. 주변에 블럭체인관련 개발자가 별로 없어서   거래소 개발준비하는데 어려움이 많네요 ㅠㅠ   1)  거래소 핫왈렛 ,콜드왈렛의  지갑생성은  보통 어떤걸 쓰는지요?        이더의 경우 미스트왈... 3 0 1628
록키7
2017.08.11
349 개발 어제 코인스노티파이에 첫 고객문의가 들어왔습니다. 어제 오후에 &quot;초밥매니아님?&quot; 이라는 전화를 받았습니다.   무슨 장난전화인가 했는데 알고보니 제가 만든 코인스노티파이 가입하고 인증메일이 안온다는 문의였습니다. (코인스노티파이는 제가 ... 27 14 4419
초밥매니아
2017.08.11
348 개발 이더리움 메인넷에 컨트렉트 실행 관련 문제   안녕하세요. 이더리움 메인넷에 컨트랙트 하나 실행 시키려 합니다.   그런데 가스 비용을 이더리움 월렛에서 최저 가격으로 했는데 컨트랙 생성이 30분이 지나도 안되네요.   다른 분들은 이... 2 0 1593
수집가
2017.08.11
347 개발 HI Miner basic 0.4.5 업데이트 했습니다. 무료 채굴관리 프로그램 HI Miner basic 0.4.5 버전 업데이트 안내입니다.   ※ 베타인 만큼 오류가 있을 수 있습니다. ※ 기존 버전 사용하시는 분들은 채굴 설정을 다시 해주시기 바랍니다. ※ 사... 10 10 4686
AMDMANIA
2017.08.10
346 개발 12V DC 팬 질문좀 드립니다. 장비에서 팬소리가 나서 분해를 해보니 12v DC 40mm 쿨링팬에서 소음이 나더군요.   12v DC  == 1.4w  라고 표기 되어 있습니다. (암페어 계산하니 0.11a 나오네요)    궁금한건 12v 인거 사서 ... 3 0 2244
발로짜
2017.08.09
345 개발 엑셀로 시세 보는거 만들려는데 뭐가 틀린지 모르겠습니다 대체 어디가 틀린건지 모르겠군요..1시간동안 봐도 틀린곳이 없는 것 같은데......      function getBlockChainArray2KRWByBithumb (arCoin)  {   var url = 'https://api.bithumb.com/public/t... 8 file 1 2680
흑곰짜응
2017.08.08
344 개발 거래소 설립에 따른 해외 가상화폐거래소를 개설 준비중입니다.   고수님들의 고언을 듣고자 합니다. 6 1 3632
아인소프
2017.08.08
343 개발 안녕하세요. 코인알람 개발자입니다~! 안녕하세요. 코인알람 개발자입니다   안녕하세요 코인투자자 여러분. 코인알람 개발자입니다. 많은 분들의 성원에 힘입어 더욱 열심히 개발을 하고 있습니다. 이번 업데이트에는 여러 거래소에 ... 20 file 9 6341
CoinAlarm
2017.08.07
342 개발 주말저녁에 BitcoinYo 한글버전을 출시했습니다. 어서 코인 버셔요 ㅋㅋ;   어떻게 쓰는지 모르겠다는 문의가 좀 있어서 주말저녁에 시간내서 번역작업을 해봤습니다 . 비트코인이 뜨겁게 타오르는 시점에서 어서 주변물품 정리하셔서 비트코인 버셨으면 좋겠네요. 한국... 15 file 9 7897
이더리움링
2017.08.06
341 개발 MUSICOIN 마이이더월릿 지갑 적용되었습니다. 공식적으로 https://www.myetherwallet.com  에 지갑 릴리즈 되었습니다.   몇일전 PullRequest 전 https://mcdnode.trustfarm.io  로 사용시는 다음을 참조하시고요. https://www.ddengle.com/m... 8 file 2 3771
안씨아저씨
2017.08.06
Board Pagination Prev 1 ... 70 71 72 73 74 75 76 77 78 79 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ