Info-Tech

Cron작업을 통해 특정 거래소의 코인 정보들을 실시간으로 확인해보기 본문

프로그래밍/파이썬 & 장고

Cron작업을 통해 특정 거래소의 코인 정보들을 실시간으로 확인해보기

개발 로그를 쌓고 싶은 블로거 2018. 10. 26. 17:48

선수지식

  • 크롤링을 통해 특정 거래소의 코인정보 받아오기 (https://info-tech.tistory.com/17


Python에서 Cron을 더 이쁘고 깔끔하게 사용해보기

  • Crontab을 YAML로 작성이 가능
  • cron job이 실패할 경우 제어 가능
  • 실패시 해당 값을 재시도 할 수 있다.
  • 유연하게 구성 가능

* python >= 3.5 버전에서 사용가능

#pip 설치
pip install yacron

#사용법
#-c 를 통해 yaml 위치한 파일을 가르킨다
yacron -c my-crontab.yaml



5분마다 echo 'foo-bar 를 실행하는 코드

jobs:
  - name: test-01
    command: echo "foobar"
    shell: /bin/bash
    schedule: "*/5 * * * *”

특정일(2017-07-19)에 5분마다 echo foobar’ 실행하는 코드
jobs:
  - name: test-01
    command: echo "foobar"
    schedule:
      minute: "*/5"
      dayOfMonth: 19
      month: 7
      year: 2017
      dayOfWeek: "*"


이런식으로 사용이 가능하다.

  1. 우리가 원하는건 실시간 (여기선 60초 간격으로 하겠습니다)으로 coin의 정보를 가져오도록 python 파일을 만들겠습니다.

#파이썬 파일을 만들어줍니다.
1. vim get_coin_crawl.py

####get_coin_crawl.py 내용입니다



import http.client
import json

def get_coin_info_from_Coingecko():
    # API호출되는 기본적인 도메인 주소를 정해줍니다.
    base_url = ‘api.coingecko.com'


    # 헤더를 정해줘야 합니다.
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
    }

    #해당 주소가 https로 시작함으로, 클라이언트를 HTTPSConnection로 연결 해 줍니다.
    conn = http.client.HTTPSConnection(base_url)


    # i값은 아직 지정해주지 않았습니다. 자신이 원하는 정보를 선택할 거래소를 넣어주면 됩니다
    #이번에는 bithumb을 넣어주도록 하겠습니다.
    i = ‘bithumb'
    conn.request('GET', '/api/v3/exchanges/{0}'.format(i), headers=headers)
    res = conn.getresponse()

    #결과값이 dict형태로 되어있음으로 가공하기 쉽게 json으로 받아옵니다.
    contents = json.loads(res.read().decode('utf-8’))

    ##이중에서 저는 현재 모든 코인에 대해서 현재가격과, 거래대금을 가져와보도록 하겠습니다.
    ##coingecko에서는 현재가격을 last, 거래대금은 volume으로 값을 내려주고 있습니다.
    ##이 값들은 tickers에 리스트 형태로 저장되어 있습니다.

    for info in contents[‘tickers’]:
        ## base(코인), 가격, 거래대금 데이터베이스에 저장 (데이터 베이스는 자신이 구현한 model 일 것 입니다)
        coin_models.save( info[‘base’], info[‘last’], info[‘volume’], 등등)

##함수 호출
get_coin_info_from_Coingecko()


    2. 크론잡 yaml 만들기

vim get_coin_info.yaml

jobs:
  - name: get_coin_info
    command: python get_coin_crawl.py
    shell: /bin/bash
    schedule: “*/1 * * * *”


  1. 크론잡 실행
yacron -c get_coin_info.yaml



Admin에 쌓인 코인 정보들 결과화면









Comments